基本概念
优先级顺序
下列是一份优先级逐级增加的选择器列表:
通用选择器(*)
元素(类型)选择器
类选择器
属性选择器
伪类
ID 选择器
内联样式
css3常用新特性
新添加的选择器:
E:nth-last-child(n)
E:nth-of-type(n)
E:nth-last-of-type(n)
E:last-child
E:first-of-type
E:only-child
E:only-of-type
E:empty
E:checked
E:enabled
E:disabled
E::selection
E:not(s)
@Font-face 特性
Font-face 可以用来加载字体样式,而且它还能够加载服务器端的字体文件,让客户端显示客户端所没有安装的字体。
@font-face {
font-family: BorderWeb;
src:url(BORDERW0.eot);
}
@font-face {
font-family: Runic;
src:url(RUNICMT0.eot);
}
Word-wrap & Text-overflow 样式
边框和颜色(color, border)
color: rgba(255, 0, 0, 0.75);
background: rgba(0, 0, 255, 0.75);
CSS3 的阴影(Shadow)和反射(Reflect)效果
CSS3 的背景效果
CSS3 的 Transitions, Transforms 和 Animation
css选择器
-
后代选择器X Y
li a { text-decoration: none;} 后代选择器 (descendant selector),选取 X 元素内的所有 Y 元素,比如上面这段代码将选取 li 标签内的所有链接。
-
子选择器X > Y
div#container > ul { border: 1px solid black;} 后代选择器 X Y 选取父层 X 内的所有 Y 元素;子选择器 X > Y 则只选取直接出现在父层 X 内的 Y 元素。
-
临近选择器X + Y
ul + p { color: red;} 临近选择器 (adjacent selector),选取紧邻在 X 元素后面出现的第一个元素,比如上面这段代码将选取 ul 元素后出现的第一个元素,也就是 p 元素。
-
临近选择器X ~ Y
ul ~ p { color: red;} 同样也是临近选择器,前面 X + Y 选取紧邻在 X 后出现的第一个元素,而 X ~ Y 将选取 X 元素后出现的所有同级元素。上面这段代码将选取 ul 元素后出现的所有同级 p 元素,而不是像 ul + p 这样选取第一个出现的 p 元素。
-
属性选择器
The term SCUBA is an acronym rather than an abbreviation as it is pronounced as a word.
acronym[title] { border-bottom: 1px dotted #999; }
a[rel=”nofollow”] { background: url(nofollow.gif) no-repeat right center; padding-right: 20px; }
####选择器其他
-
多用组合
如果不确定模块的上下margin特别稳定,最好不要将它写在模块里,而是使用类的组合、单独为上下margin挂用于边距的原子类(例如mt10、mb20)。模块最好不要混用margin-top、margin-bottom,统一使用margin-top或margin-bottom.
-
权重规则 html标签的权重是1、class的权重10,id的权重是100,例如p的权重是1、“div em”的权重是1+1=2,“strong.demo”的权重是10+1=11
-
!important
对于常见隐藏元素的方法有如下五种:
- display:none; //不占空间
- height:0px;
- opacity:0;
- position:absolute;left:-11111111px;
- visibility:hidden; //占据空间
display:table-cell
table-cell同样会被其他一些CSS属性破坏,例如float, position:absolute,所以,在使用display:table-cell与float:left或是position:absolute属性尽量不用同用。设置了display:table-cell的元素对宽度高度敏感,对margin值无反应,响应padding属性,基本上就是活脱脱的一个td标签元素了。
支持性:IE8+以及其他现代浏览器都支持此属性;
用途
1、display:table-cell与大小不固定元素的垂直居中
基本概念
度量 viewport:window.innerWith(实际大小) 布局 viewport:document.body.clientWidth (viewport的宽度)
常用设备尺寸大小
- iPhone5 320pt
- iphone6 375pt;
- iphone6 plus 414pt;
缩放比:inital-scale=1
关于rem
rem相对于根html元素的字体大小,根html元素大小默认继承自浏览器,除非显示的覆盖使用 rem 单位的主要目的应该是确保无论用户如何设置自己的浏览器,我们的布局都能调整到合适大小。
什么时候使用rem
根据浏览器字体大小设置缩放的情况下使用rem。(模块外使用rem)width、height、margin-top padding.
关于em
em相对于使用em的元素字体大小进行转换,em单位具有继承效果。当 em 单位设置在 html 元素上时,它将转换为em值乘以浏览器字体大小的设置。
什么时候使用em
根据某个元素的字体大小做缩放而不是根元素的字体大小。比如padding、 margin,line-height.设计组件比如按钮,菜单和标题可能会有自己明确的字体大小。当你修改字体大小的时候,你希望整个组件都适当缩放。(模块内使用em)
不要使用 em 或 rem
-
多列布局 布局中的列宽通常应该是 %,因此他们可以流畅适应无法预知大小的视区。然而单一列一般仍然应使用 rem 值来设置最大宽度。
-
当元素应该是严格不可缩放的时候
没人告诉你关于z-index的一些事
堆叠顺序(Stacking Order)
-
如果没有涉及z-index和position属性的话,那规则很简单,堆叠顺序就是元素在HTML中出现的顺序。(当然如果你对行内元素使用负margin的话,可能情况会复杂一些。)
-
加上position属性的话,就是所有定位了得元素在没有被定位的元素前面。(一个元素被定位的意思这里指的是它有一个position属性,但是不是static,而是relative,absolute等)
-
再加上z-index属性,事情就变得有点诡异。首先z-index值越大,越靠前。但是z-index属性只作用在被定位了的元素上。所以如果你在一个没被定位的元素上使用z-index的话,是不会有效果的。还有就是z-index会创建一个堆叠的上下文(Stacking Contexts),我们可以理解为一个层。
堆叠上下文
同一个父元素下面的元素会受父元素的堆叠顺序影响,所以堆叠上下文是我们理解z-index和堆叠顺序的关键。(下面为了简化,我们称堆叠上下文为层。)
Dom回流和重绘
-
回流:当页面中Dom结构发生变化时(增加、删除、移动位置),浏览器都要重新计算DOM结构。减少DOM回流是js优化的重点。
-
重绘:当某个元素的样式发生变化时,浏览器需要重新渲染这个元素
-
文档碎片处理createDocumentFragment()
Table布局的优缺点
Tables的缺点
1、Table要比其它html标记占更多的字节。(延迟下载时间,占用服务器更多的流量资源。)
2、Tablle会阻挡浏览器渲染引擎的渲染顺序。(会延迟页面的生成速度,让用户等待更久的时间。)
3、Table里显示图片时需要你把单个、有逻辑性的图片切成多个图。(增加设计的复杂度,增加页面加载时间,增加HTTP会话数。)
4、在某些浏览器中Table里的文字的拷贝会出现问题。(这会让用户不悦。)
5、Table会影响其内部的某些布局属性的生效(比如<td>里的元素的height:100%)(这会限制你页面设计的自由性。)
6、一旦学了CSS知识,你会发现使用table做页面布局会变得更麻烦。(先花时间学一些CSS知识,会省去你以后大量的时间。)
7、table对对于页面布局来说,从语义上看是不正确的。(它描述的是表现,而不是内容。)
8、table代码会让阅读者抓狂。(不但无法利用CSS,而且会你不知所云)
9、table一旦设计完成就变成死的,很难通过CSS让它展现新的面貌。
Tables的优点
在某些场合,使用Table是100%的适合、恰当和正确。比如,用table做表格统计和分析是完全正确的。
###常见问题汇集
-
js,jquery获取页面的高度宽带
console.log(“浏览器当前窗口文档的高度:”+$(document).height()); == document.documentElement.scrollHeight; console.log(“浏览器当前窗口文档对象宽度:”+$(document).width()); == document.documentElement.scrollWidth; console.log(“浏览器当前窗口文档body的高度:”+$(document.body).height());
$(window).width(); == document.documentElement.clientWidth; $(window).height(); == document.documentElement.clientHeight; 获取元素的宽带width(),不含padding、border;outerWidth()含border、padding;
Basically, $(window).height() give you the maximum height inside of the browser window (viewport), and$(document).height() gives you the height of the document inside of the browser. Most of the time, they will be exactly the same, even with scrollbars.
-
给子元素添加外边距正常情况下,外边距是会跑到父元素的外面去。通过通过给父元素添加clearfix来实现子元素的margin生效。
我是子元素,我加了30px的外边距,通过给父元素添加clearfix属性来实现距离父元素30px的效果。
CSS布局奇淫巧计之-强大的负边距
子元素如何在父元素容器内垂直居中;
一像素边框问题
多行文本溢出
移动设备终端交互优化
一般来说,我们需要关注的是:字体、高宽间距、图像(图标、图片)。
浏览器渲染展示网页的过程
1、解析HTML(HTML Parser) 2、构建DOM树(DOM Tree) 3、渲染树构建(Render tree) 4、绘制渲染树(Painting) http://www.cnblogs.com/coco1s/p/5439619.html
浅谈域名发散与域名收敛
http 请求过程 首先要知道,使用一个 http 请求去请求一个资源时,会经历些什么。简单而言:
1、DNS 域名解析 –>
2、发起 TCP 的 3 次握手 –>
3、建立 TCP 连接后发起 http 请求 –>
4、服务器响应 http 请求
5、……略
DNS 解析 Step1: 首先拿到 URL 后,浏览器会寻找本地的 DNS 缓存,看看是否有对应的 IP 地址,如果缓存中存在那就好了,如果没有,那就得向 DNS Server 发送一个请求,找到你想要的 IP 地址。
Step2: 首先他会向你的 ISP(互联网服务提供商) 相关的 DNS servers 发送 DNS query。然后这些 DNS 进行递归查询(recursive)。所谓的递归查询,就是能够直接返回对应的IP地址,而不是其他的 DNS server 地址。
Step3: 如果上述的 DNS Servers 没有你要的域名地址,则就会发送迭代查询,即会先从 root nameservers 找起。 即是假如你要查询 www.example.com ,会先从包含根结点的 13 台最高级域名服务器开始。
Step4: 接着,以从右向左的方式递进,找到 com. 然后向包含 com 的 TLD(顶级域名) nameservers 发送 DNS 请求。接着找到包含 example 的 DNS server。
Step5: 现在进入到了example.com 部分,即是现在正在询问的是权威服务器,该服务器里面包含了你想要的域名信息,也就是拿到了最后的结果 record 。
Step6: 递归查询的 DNS Server 接受到这 record 之后, 会将该record 保存一份到本地。 如果下一次你再请求这个 domain 时,我就可以直接返回给你了。由于每条记录都会存在 TLL ,所以 server 每隔一段时间都会发送一次请求,获取新的 record,
Step7: 最后,再经由最近的 DNS Server 将该条 record 返回。 同样,你的设备也会存一份该 record 的副本。 之后,就是 TCP 的事了,下面是一张萌萌的简化图:
流程: . => com. => .exampl.com. => www.example.com. => IP adress
http://www.cnblogs.com/coco1s/p/5365179.html
MobileWeb 适配总结
固定高度,宽度自适应
这是目前最通用的一种做法,属于自适应布局,viewport width 设置为 device-width,以较小宽度(如 320px)的视觉稿作为参照进行布局。垂直方向的高度和间距使用定值,水平方向混合使用定值和百分比或者利用弹性布局,最终达到“当手机屏幕变化时,横向拉伸或者填充空白的效果”。图像元素根据容器情况,使用定值或者 background-size 缩放。
固定宽度,viewport 缩放
视觉稿、页面宽度、viewport width 使用统一宽度,利用浏览器自身缩放完成适配。页面样式(包括图像元素)完全按照视觉稿的尺寸,使用定值单位 (px、em)即可完成。
不过自从Retina这中妖艳的屏幕推出,分辨率已经不能代表世界的真相了。小小的Note3的分辨率比一些17“显示的分辨率还高。 所以还有必要判断一下设备的像素密度-device-pixel-ratio。
@media only screen and (-moz-min-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) 比如上面的