a { /* specificity [0,0,1] */
color: #00f;
background-color: #ff0;
}
a:hover { /* specificity [0,1,1] */
color: #ff0;
background-color: #00f;
}
第一条"normal" (not hover)的规则权重为 [0,0,1], hover的权重为 [0,1,1]
<p><a class="cl1" href="#">...</a></p>
p a.cl1 { /* specificity [0,1,2] */
color: #f00;
background-color: #0ff;
}
红色字,浅绿色背景,权重为 [0,1,2], 比第一条权重高.
在IE6下"normal" (not hover) 的值被覆盖了, 但是没有覆盖"hover"的值. 换句话说,权重为[0,1,1]的"hover"依然生效, 它没有被比他权重高的p a.cl1 [0,1,2]所覆盖 (但是没有定义:hover伪类)
<p class="cl2"><a class="cl3" href="#">...</a></p>
.cl2 a.cl3 { /* specificity [0,2,1] */
color: #f00;
background-color: #0ff;
}
红色字,浅绿色背景,权重为 [0,2,1], 比第一条规则"normal"和"hover"都要高.
现在在IE6下不管是"normal"还是"hover"的值都被覆盖了,这时候权重 [0,2,1] 完全覆盖了权重 [0,1,1].
<div><p><a href="#">...</a></p></div>
div p :hover { /* specificity [0,1,2] */
color: #f00;
background-color: #0ff;
}
第一条:hover完全被覆盖,IE6也是一样. 这个例子的权重 [0,1,2]和第二个例子的权重是一样的,但是它多了对 伪类:hover的定义就能完全覆盖第一条"hover"规则, 而第二个例子就不会覆盖.
Related: IE6-/Win: 关于伪类:visited的权重问题, 或者是 其他权重问题