【分享】IE6 中 A 标签 hover 伪类特殊性过高的问题
昨天在 【分享】<a>标签的伪类书写顺序问题 中说到,A 标签的’:link’,’:visited’,’:hover’,’:actived’伪类的声明有顺序的限制,如果顺序不正确可能导致某些伪类的声明无效(其实是被其他的覆盖掉了)。但是,在 IE6 中声明顺序即使不正确, ‘:hover’ 会依然有效,这是为什么呢?
昨天也有童鞋已经说出了答案:它的根本原因是特殊性计算的问题。今天就这个问题,做一个详细点儿的说明。
各位看官注意,精彩的地方到了。
先做个简要的名词解释 :
1. IE6(Q)代表的是IE6 的 Quirks Mode;
2. IE6(S)代表的是IE6 的 Standards Modes;
为说明方便,排除其它因素对选择器优先级的影响,我们仅关注选择器的特殊性和出现的顺序。
这里,我们讨论IE6(S)(Q)/IE7(Q)/IE8(Q)下 A 元素 “:hover” 的bug,其中,IE6 中伪类声明顺序不正确但是 ‘:hover’ 依然有效就是此类问题的一个表现。
问题来了!在IE6(S)(Q)/IE7(Q)/IE8(Q)下,“A:hover”的优先级是否真的无法超越?请看如下代码:
<style type="text/css">a{background-color:#d4d4d4;font-size:14px;font-weight:bold;}a:hover{background-color:red;} /* [0,0,1,1] */div.div1 a{background-color:yellow;} /* [0,0,1,2] */</style><div class="div1"> <a class="a1" href="#">A:hover bug</a></div>
.div1 a.a1{background-color:yellow;} /* [0,0,2,1] */
div.div1 .a1{background-color:yellow;} /* [0,0,2,1] */
<style type="text/css">a{background-color:#d4d4d4;font-size:14px;font-weight:bold;}a:hover{background-color:red;} /* [0,0,1,1] */#divID .a1{background-color:yellow;} /* [0,1,1,0] */</style><div id="divID"> <a class="a1" href="#">A:hover bug</a></div>
[解决办法]
强烈支持
接分
[解决办法]
每天回复即可获得10分可用分
[解决办法]
相当好啊。谢谢
[解决办法]
<style type="text/css">a{background-color:#d4d4d4;font-size:14px;font-weight:bold;}a:hover{background-color:red;} /* [0,0,1,1] */.div1 .div2 .a1{background-color:yellow;} /* [0,0,3,0] */</style></head><body><div class="div1"><div class="div2"> <a class="a1" href="#">A:hover bug</a></div></div> </body>
[解决办法]
2. 当选择器没有明确指向A标签,特殊性b的值要大于选择器“*:hover”特殊性b的值时(当然a值要相等)