什么是CSS选择器权重?
即使在不太复杂的样式表中,要寻找同一元素可能有两个或者更多规则,当同一元素被多个不同来源的样式规则设置了样式后,如何处理样式规则的冲突,显示元素最后的样式,用到的计算规则就是CSS选择器的权重规则。
根据选择器的特殊性决定规则的次序。具有更特殊选择器的规则优先于具有一般选择器的规则。如果两个规则的特殊性相同,那么后定义的规则优先。
特殊性
为了计算规则的特殊性,给每种选择器都分配一个数字值。然后,将规则的每个选择器的值加在一起,计算出规则的特殊性。特殊性的计算不是以10为技术的,而是采用一个更高的未指定的基数。这能确保非常特殊的选择器(比如ID选择器)不会被大量一般选择器(比如类型选择器)所超越。但是,为了简化,如果在一个特定选择器中的选择器数量少于10个,那么可以以10为基数计算特殊性。
选择器的特殊性分成4个成分等级:a, b, c 和 d。
- 如果样式是行内样式,那么a=1
- b等于ID选择器的总数
- c等于类,伪类和属性选择器的数量
- d等于类型选择器和伪元素选择的数量
使用这些规则可以计算任何CSS选择器的特殊性。下面的表格给出了一系列选择器以及相应的特殊性。
选择器 | 特殊性 | 以10为技术的特殊性 |
Style=" " | 1,0,0,0 | 1000 |
#wrapper #content {} | 0,2,0,0 | 200 |
#content .name {} | 0,1,1,0 | 110 |
div#ontent {} | 0,1,0,1 | 101 |
#content {} | 0,1,0,0 | 100 |
p.comment .name {} | 0,0,2,1 | 21 |
p.comment {} | 0,0,1,1 | 11 |
div p {} | 0,0,0,2 | 2 |
p {} | 0,0,0,1 | 1 |
用style属性编写的规则总是比其他任何规则特殊。具有ID选择器的规则比没有ID选择器的规则特殊,具有类选择器的规则比只有类型选择器的规则特殊。如果两个规则的特殊性相同,那么后定义的规则优先。