写这些的原因
11年至今已经没有写过CSS了,其实我挺喜欢写CSS、写页面的(可惜现在的工作只能写JS),真怀念那些年写页面的日子。心里一致有重新拾起的想法,于是今天终于痛下决心,从规范上,系统上学习与整理下。
谈谈兼容的那些事儿
在前端开发中,肯定会有兼容浏览器这一项。比如页面要兼容IE6+,firefox,chrome等。这些兼容问题一般有两个方面造成的
- 浏览器自身的bug;
- 浏览器发布时基于的CSS规范已经过时,新规范中的功能没有被实现;
比如IE6,IE6的发布时间是2001年(随XP一起发布)。按照软件发布的时间周期,大致再向前推2年,也就是99年左右,这的时候左右,CSS1.0是被推荐的规范。所以 并不是IE6不怎么好,而CSS越来越完善,IE6没有跟上它的脚步而已 。如下表(来自:w3cschool)
| 规范 |
草案/提议 |
推荐 |
| CSS 1 |
|
1996 年 12 月 17 日 |
| CSS 1 (Revised) |
|
1999 年 1 月 11 日 |
| CSS 2 |
|
1998 年 5 月 12 日 |
| CSS 2.1 |
2007 年 7 月 19 日 |
|
范围
在CSS1.0和CSS2.1之间还有个版本叫CSS2.0.因CSS2.0与CSS2.1在此部分内容差不多,不再进行别外的介绍了,本文分别从CSS1.0,2.1,3.0三个规范版本整理下CSS的selector和它的权重计算规则。
CSS1.0
选择器列表
| 名称 |
例子 |
| Class Selector |
.selector |
| ID Selector |
#box |
| Contextual Selector |
h1,em |
| Pseudo-classes |
:link,:visited,:active |
| Pseudo-elements |
:first-line,:first-letter |
权重规则
- 计算selector中的id数量计为a;
- 计算selector中的class数量计为b;
- 计算selector中的tag数据计为c;
- 从上所得,此selector的权重为a100+b10+c*1的值
备注:
-
选择器class selector不支持多class选择器,如.a.b;
-
权重规则中并没有把pseudo-classes和pseudo-elements置入计算规则内,如下列:在CSS1.0规范中,两个选择器的权重是一样的,根据就近原则,CSS1.0规范显示为blue;
a:link{
color: red;
}
a{
color: blue;
}
CSS2.1
CSS2.1 是基于 CSS2.0 进行扩展的,而CSS2.0是基于 CSS1.0 进行的扩展,因此本段落,相对CSS1.0规范进行比较。
相对CSS1.0规范,在其它基础上优化了分类,并增加了选择器,如下表:
| 名称 |
例子 |
| Universal selector |
如 * |
| Type selectors |
如 body,div |
| Descendant selectors |
如 div span,body div |
| Child selectors |
如 ul > li |
| pseudo-class |
:first-clild,:focus,:hover,:lang |
| Adjacent selectors |
如 .cls1 + .cls2 |
| Attribute selectors |
如a[href],a[title="123"],a[href$="html"],a[class~="a"] |
| pseudo-elements |
:before,:after |
权重计算规则(不同于CSS1.0)
- 计算selector所对应的style属性,如果符合selector规则则计a为1;
- 计算selector中所对应的id属性的数量,计为b;
- 计算selector中所对应的其它属性和pseudo-class的个数,计为c;
- 计算selector中所对应的tag name和pseudo-elements的个数,计为d
- 从上所得,此selector的权重为a1000+b100+c10+d1的值;
CSS3.0
这个太多了,详情还是看手册或文档吧!^_^
参考资料
- CSS1.0规范
- CSS2.0规范
- CSS2.1规范
- CSS3.0规范 和 手册
写这些的原因
11年至今已经没有写过CSS了,其实我挺喜欢写CSS、写页面的(可惜现在的工作只能写JS),真怀念那些年写页面的日子。心里一致有重新拾起的想法,于是今天终于痛下决心,从规范上,系统上学习与整理下。
谈谈兼容的那些事儿
在前端开发中,肯定会有兼容浏览器这一项。比如页面要兼容IE6+,firefox,chrome等。这些兼容问题一般有两个方面造成的
比如IE6,IE6的发布时间是2001年(随XP一起发布)。按照软件发布的时间周期,大致再向前推2年,也就是99年左右,这的时候左右,CSS1.0是被推荐的规范。所以 并不是IE6不怎么好,而CSS越来越完善,IE6没有跟上它的脚步而已 。如下表(来自:w3cschool)
范围
在CSS1.0和CSS2.1之间还有个版本叫CSS2.0.因CSS2.0与CSS2.1在此部分内容差不多,不再进行别外的介绍了,本文分别从CSS1.0,2.1,3.0三个规范版本整理下CSS的selector和它的权重计算规则。
CSS1.0
选择器列表
权重规则
备注:
选择器class selector不支持多class选择器,如.a.b;
权重规则中并没有把pseudo-classes和pseudo-elements置入计算规则内,如下列:在CSS1.0规范中,两个选择器的权重是一样的,根据就近原则,CSS1.0规范显示为blue;
CSS2.1
CSS2.1 是基于 CSS2.0 进行扩展的,而CSS2.0是基于 CSS1.0 进行的扩展,因此本段落,相对CSS1.0规范进行比较。
相对CSS1.0规范,在其它基础上优化了分类,并增加了选择器,如下表:
权重计算规则(不同于CSS1.0)
CSS3.0
这个太多了,详情还是看手册或文档吧!^_^
参考资料