特殊性(specificity)描述了不同选择器的相对权重(weight)。一个选择器的特殊性是这样计算的:
·如果CSS属性是通过(X)HTML元素的style属性定义的,则记为a=1,否则记为0;
由于style属性是写在(X)HTML标签内的,因此不存在选择器,所以:a=1,b=0,c=0,且d=0;
·计算选择器中ID选择器的数量,计为b;
·计算选择器中类选择器、属性选择器和伪类的数量,计为c;
·计算选择器中类型选择器的数量,计为d;
·忽略伪元素。
将这4个数字(a,b,c,d)相连(数字进制要以大的为准),得到特殊性。例如:
{……}特殊性=0,0,0,0
li{……}特殊性=0,0,0,1
ulli{……}特殊性=0,0,0,2
ulol li{……}特殊性=0,0,0,3
h1 [rel="up"]{……}特殊性=0,0,1,1
ulolli.warning{……}特殊性=0,0,1,3
li.menu.level{……}特殊性=0,0,2,1
#x34y{……}特殊性=0,1,0,0
<pstyel=”……”>特殊性=1,0,0,0
特殊性高的规则会取代特殊性低的规则,无论其书写的先后顺序如何,例如:
h1{colorred;}0,0,0,1
bodyh1{colorgreen;}0,0,0,2(胜出)
或者:
h2.grape{colorpurple;}0,0,1,1(胜出)
h2{colorsilver;}0,0,0,1
4.6.3继承和特殊性
在特殊性的框架下,继承的特殊性为“0”。也就是说,任何显式的规则声明都会覆盖掉继承的样式,例如有如下代码:
em{color:blue;}
p.list{color:gray;}
<pclass="list">继承的特殊性为<em>“0”</em>。</p>
虽然“p.list”的特殊性为“0,0,1,1”,但是,对“em”的color声明还是会覆盖掉从“p.list”继承的color样式,因此在浏览器内显示如图4-32所示。
图4-32继承与特殊型
因此,如果需要让p内的em能呈现和p一样的颜色,则需要如下定义:
p.list,
p.listem{colorgray;}
4.6.4重要性
虽然层叠和特殊性决定了CSS规则的最后应用效果,但是,也可以通过声明某个规则的“重要性”来提高此规则的权重,例如图4-33所示。
图4-33重要性的表现
虽然ID选择器的特殊性高于类型选择器,但是由于类型选择器(div)属性值后面添加了“!important”重要性声明,因此“color:red”这条声明的特殊性最高。
“!important”重要性声明的权重甚至高于内联式样式,例如有如下代码,其在浏览器内显示如图4-34所示。










