IE6-/Win: 关于伪类:hover的权重问题

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;
}

当鼠标悬停在链接上的时候是红色字,浅绿色背景 , 权重为 [0,1,2], 比第一条"hover"的权重 [0,1,1]高

第一条:hover完全被覆盖,IE6也是一样. 这个例子的权重 [0,1,2]和第二个例子的权重是一样的,但是它多了对 伪类:hover的定义就能完全覆盖第一条"hover"规则, 而第二个例子就不会覆盖.

Related: IE6-/Win: 关于伪类:visited的权重问题, 或者是 其他权重问题

翻译自:IE6-/Win: specificity problems with :hover pseudo-class