div =
p =/p
em ="em" "wrap"/em
/div
/body
这是段相当简单的HTML代码,但是具有相当的代表性.我们慢慢就能发现它为什么具有代表性了.
首先我们来加上一点简单的CSS声明:
{
;
}
{ /* 11 */
;
}
{ /* 12 */
;
}
{ /* 2 */
;
}
{ /* 102 */
;
}
{
;
}
{ /* 3 */
;
}
{ /* 13 */
;
}
大家来猜猜看结果中的"For Testing2"是什么颜色的呢?嗯...不浪费大家眼神了,结果是的,奇怪吗?有疑问吗?大家有没有注意到我在CSS中加入的注释中的数字?这是什么呢?这是CSS选择器特性权重值.
id选择器,class类选择器,HTML标签选择器,这3种选择器就是构成CSS继承的组件,浏览器在渲染它们的时候是有优先权的.而这个优先权在一定情况下是可以计算出来的.
统计在这个选择器里面ID选择器的数目为a 统计在这个选择器里面类的选择器,属性选择器和伪类为b 统计在这个选择器里面的元素名称数目为c,其中要忽略伪元素.串联三个数字为a-b-c,得到特征值.串连这3个数字就可以得到特征值.
* /* a=0 b=0 c=0 - 特征值 = 0 */
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)
li /* a=0 b=0 c=1 - 特征值 = 1 */
ul li /* a=0 b=0 c=2 - 特征值 = 2 */
ul ol+li /* a=0 b=0 c=3 - 特征值 = 3 */
h1 + *[rel=up] /* a=0 b=1 c=1 - 特征值 = 11 */
ul ol li.red /* a=0 b=1 c=3 - 特征值 = 13 */
li.red.level /* a=0 b=2 c=1 - 特征值 = 21 */
#x34y /* a=1 b=0 c=0 - 特征值 = 100 */
#s12:not(FOO) /* a=1 b=0 c=1 - 特征值 = 101 */
这样就能明白上面代码中的数字的含义了.
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)是不是就这么简单呢?
应该还有耐人寻味的地方.
比如说我给出这样一组CSS来定义上面的HTML:
{
;
}{ /* 11 */
;
}{ /* 11 */
;
}{
}
{ /* 111*/
red
}{ /* 111 */
green
}{
gray
}
这里的前3条权重值都是11,后4条声明的权重值都是111,那我们应该怎么判断呢?
首先,我们看这条声明最终定义的是哪个元素.前3条都是定义这个元素的,不难从中总结出一条规律:在声明中声明了元素的HTML标签的,权重又可以增加0.5,那么根据上面的例子,权重值就会变成:
{
;
}{ /* 11 */
;
}{ /* 11.5 */
;
}
可以发现第1条和第3条的权重值还是一样的,我们试着交换一下他们的位置,天哪,它们之间是可以相互覆盖的.对,那就证明它们是真正的同层(level)声明.
那同样的后4条声明也可以这样分析了:
{
}
{ /* 111*/
red
}{ /* 111 */
green
}{
gray
}
在这里的第1条和第4条权重值相同,第2条和第3条权重值相同.经交换实验也能发现这个数值的正确性.之前的权重计算公式曾经出现在Eric的书中以及W3的CSS3规范草稿中[].这个半点权重法可以说是我创造的呦~啊哈哈哈.