原文地址:http://topic.csdn.net/u/20100701/11/ed9815fc-a684-4de7-b3dd-0f84323fb9e0.html?75618
向作者致敬!
昨天在 【分享】<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”的优先级是否真的无法超越?请看如下代码:
HTML code
<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>
观察代码,选择器“a:hover”的特殊性为“[0,0,1,1]”,选择器“div.div1 a”的特殊性为“[0,0,1,2]”,很明显选择器“div.div1 a”中的背景色(yellow)应该覆盖选择器“a:hover”中的背景色(red),然而从上表得到的测试结果来看,在 IE6(S)(Q)/IE7(Q)/IE8(Q)下却无法覆盖。难道真如传说中所言IE6(S)(Q)/IE7(Q)/IE8(Q)下“A:hover” 无法超越!
修改选择器“div.div1 a”为“.div1 a.a1”,如下:
HTML code
.div1 a.a1{background-color:yellow;} /* [0,0,2,1] */
此时,选择器“.div1 a.a1”的特殊性为“[0,0,2,1]”。经过在各浏览器中的测试结果表明,IE6(S)(Q)/IE7(Q)/IE8(Q) 中的 “:hover” 终于被覆盖。这次竟然超越了!
继续,修改选择器“.div1 a.a1”为“div.div1 .a1”,如下:
HTML code
div.div1 .a1{background-color:yellow;} /* [0,0,2,1] */
此时,选择器“div.div1 .a1”的特殊性也为“[0,0,2,1]”。经过测试,IE6(S) (Q)/IE7(Q)/IE8(Q)下 的 “:hover” 竟然起死回生了。竟然无法超越,没道理啊,明明特殊性的值更上面测试中的值的相同,Why :?IE总是给人“惊喜”,好无奈!!
可见,只是在[0,0,c,d]上大于 a:hover 样式的特殊性,并不能保证能够超越 a:hover 的特殊性。
再次调整代码,给div设置一个ID,代码调整后如下:
HTML code
<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>
此时,选择器“#divID .a1”的特殊性为“[0,1,1,0]”。经测试,IE6(S)(Q)/IE7(Q) /IE8(Q) 终于顶不住了,”:hover”回归正常。
经反复测试,我们得出结论:IE6(S) (Q)/IE7(Q)/IE8(Q)“*:hover”的特殊性没有特定的规律可循,只有特殊性b的值大于选择器“*:hover”特殊性b的值时(当然 a值要相等),IE6(S) (Q)/IE7(Q)/IE8(Q)下“A:hover”优先级才能保证被超越!
总之,想要在 IE6(S) (Q)/IE7(Q)/IE8(Q) 得到正常的 ‘:hover’,有一个比较保险的办法:选择器特殊性b的值要大于选择器“*:hover”特殊性b的值时(当然a值要相等)
希望从此以后,各位童鞋可以轻松的收拾在 IE 中不大听话的 ‘a:hover’
分享到:
相关推荐
在早期的网页设计中,Internet Explorer 6 (简称IE6) 是一个常见的浏览器,但它存在很多兼容性问题,其中就包括对CSS:hover伪类的不完全支持。在本篇文章中,我们将深入探讨这个问题,并提供一系列解决方案,帮助你...
`hover`伪类在现代浏览器中广泛用于实现鼠标悬停时的样式变化,但在IE6中,`hover`仅适用于`<a>`元素,这对于创建响应式和交互性较强的网站设计构成了挑战。然而,通过一些技巧和解决方案,我们确实可以“完美”地...
标题中的“CSS a:hover伪类在IE6下的问题”指的是在Internet Explorer 6浏览器中,CSS的`:hover`伪类存在一些不兼容性的问题。`:hover`伪类通常用于定义鼠标悬停时元素的样式,它在现代浏览器中广泛应用于链接、按钮...
文章继续讨论了IE6中:hover伪类的具体BUG,并提供了一种特殊的CSS声明方法来绕过这个BUG。这种方法涉及尝试改变元素的不同属性,以触发BUG的解决。在尝试过程中,作者发现了只有text-decoration、color和z-index这三...
在这个主题中,我们将深入探讨CSS(层叠样式表)如何利用hover伪类来创建一个多级下拉菜单的结构,并了解其背后的原理。 首先,让我们理解什么是hover伪类。在CSS中,`:hover`是一个伪类选择器,它用于当鼠标指针...
在IE6这个古老的浏览器中,开发者常常会遇到一些与现代浏览器不同的兼容性问题,其中之一就是关于伪类`:hover`的失效问题。`:hover`伪类通常用于为元素添加鼠标悬停时的样式变化,比如链接在鼠标经过时改变颜色。在...
在互联网的早期,Internet Explorer 6 (IE6) 是一个广泛应用的浏览器,但它存在许多局限性,其中之一就是不完全支持CSS(层叠样式表)的一些高级特性,包括伪类选择器`hover`。`hover`伪类在现代浏览器中被广泛用于...
在IE6浏览器中,由于其对CSS标准的不完全支持,`hover`伪类仅限于`<a>`标签使用,这给开发者带来了很大的不便,尤其是在实现鼠标悬停效果时。为了解决这个问题,我们可以利用HTC(HTML Component)文件,这是一种...
在探讨IE6中伪类:hover的使用及BUG说明时,我们首先需要了解什么是CSS伪类以及:hover伪类的作用。CSS伪类是一种用于定义元素的特殊状态的特殊选择器,比如链接在用户未进行交互前后的状态。伪类:hover用于定义当用户...
虽然现代浏览器已经不再支持IE6,但是仍有一部分老旧系统或者特殊需求场景中需要支持IE6,因此了解如何解决IE6中a标签:hover属性失效的问题是有其必要性的。 要解决IE6中a标签:hover属性失效的问题,首先需要理解为...
在IE6浏览器环境下,许多HTML元素默认不支持CSS中的:hover伪类效果,除了`<a>`标签。这个限制对于网页设计师和前端开发者来说,会导致无法实现丰富的用户交互效果,因为:hover伪类常用于实现鼠标悬停时的样式变化。 ...
`:hover`伪类在CSS中被用来指定元素在鼠标悬停时的样式,它是CSS选择器的一种,可以与各种元素类型结合使用,如`<a>`、`<li>`等。在这个特定的例子中,我们将`:hover`应用于`<ul>`和`<li>`元素来创建多级下拉菜单。 ...
在早期的网页开发中,Internet Explorer 6 (IE6) 是一个常见的浏览器版本,但它存在很多兼容性问题,其中就包括对CSS伪类选择器`:hover`的支持不足。`:hover`伪类通常用于为鼠标悬停状态的元素添加样式,但IE6并不...
"让IE6支持HOVER的HTC"这个主题就是针对这样一个问题:如何在IE6中实现CSS中的`:hover`伪类效果。 `:hover`伪类是CSS2的一部分,它允许我们为鼠标悬停在元素上时应用特定的样式。在大部分现代浏览器中,`:hover`...
可解决在IE6中不支持hover的方法!
在标签"**IE6 hover**"中,我们可以明确这是关于IE6浏览器和`:hover`伪类的问题。`:hover`伪类主要用于定义鼠标指针在某个元素上方时的样式,常见于导航菜单、链接和其他交互元素上。 根据压缩包内的文件名,"**...
运用以上的代码可以使ie6支持li:hover的使用