CSS伪类:hover 在IE中使用及其BUG

  伪类:hover是我们在CSS设计中最常运用的伪类之一,许多绚丽效果的实现离不开伪类:hover,比如我们常见的纯CSS菜单、相册效果等等。
  或许用了这么久的伪类:hover,还有部分朋友还不完全了解hover的规则:
在CSS1中此伪类仅可用于a对象。且对于无href属性(特性)的a对象,此伪类不发生作用。
在CSS2中此伪类可以应用于任何对象。
  但目前IE5.5、IE6仅支持CSS1中的:hover,不过新出的IE7是支持CSS2中的:hover。
  当我们用伪类:hover做某些特殊效果时,依据CSS2很好完成,但为了现在占据主流浏览器的IE6,我们又不得不做很多工作,比如给添加a元素等来模拟完成最终的效果。
  或许这样讲太空洞,请看下面一个常见的触发显示的例子(仅选择IE6为例讲解)。
  我们先用CSS2的写法来实现:
XHTML部分:
<ul>
<li>鼠标移过来触发我吧!<a href="#" title="">哈哈,终于被你发现了!</a></li>
</ul>
CSS部分:
* {margin:0; padding:0;}
ul {list-style:none;margin:100px;}
li {height:100px; width:100px; background:#000; font-size:12px; color:#fff; position:relative;}
li a {display:none;}
li:hover a{display:block; text-decoration:none;width:100px; height:100px; background:#c00; position:absolute; top:50px; left:50px; color:#fff;}
查看效果:
Source Code to Run [www.fun52.com]
css
ul {list-style:none;}
li {height:100px; width:100px; background:#000; font-size:12px; color:#fff; position:relative;}
li a {display:none;}
li:hover a{display:block; text-decoration:none;width:100px; height:100px; background:#c00; position:absolute; top:50px; left:50px; color:#fff;}
使用CSS2做出的效果
鼠标移过来触发我吧!哈哈,终于被你发现了!

   [ 可先修改部分代码 再运行查看效果 ]
  大家可以测试发现在FF等对CSS2支持很好的浏览器中,可以显示我们所要达到的效果,但在IE6中却无法实现。

  下面让我们换一种思维,所用CSS1的写法来看看,这个时候由于无法支持li元素:hover的使用,我们只好把所有文字包含到a中,对a使用:hover,并且将要显示隐藏的部分放到span元素中,首先我们对XHTML进行部分调整,调整如下:
XHTML部分:
<ul>
<li><a href="#" title="">鼠标移过来触发我吧!<span>哈哈,终于被你发现</span></a></li>
</ul>
  CSS中我们将a的设置成块级元素,并使a的大小和宽度和li的相同,并设置a为相对位置,用a来模拟上例中的li;而用span来模拟上例中的a,设置span在默认情况下隐藏(display:none;),当a被触发时(:hover),则span显示(display:block;)
CSS部分:
* {margin:0; padding:0;}
ul {list-style:none;margin:100px;}
li {height:100px; width:100px; background:#000; font-size:12px; }
li a {display:block; height:100px; width:100px; position:relative; color:#fff; text-decoration:none;}
li span {display:none; }
li a:hover span {display:block; width:100px; height:100px; background:#c00; position:absolute; top:50px; left:50px; color:#fff; }
查看效果:
Source Code to Run [www.fun52.com]
css
ul {list-style:none;}
li {height:100px; width:100px; background:#000; font-size:12px; }
li a {display:block; height:100px; width:100px; position:relative; color:#fff; text-decoration:none;}
li span {display:none;}
li a:hover span {display:block; width:100px; height:100px; background:#c00; position:absolute; top:50px; left:50px; color:#fff; }
使用CSS1做出的效果(有BUG)
鼠标移过来触发我吧!哈哈,终于被你发现

   [ 可先修改部分代码 再运行查看效果 ]
  可我们发现上例中的效果,在IE6中依然无法显示,难道我们的代码写错了,可检查来检查去一点错误也没有(不信你找个高高手问问,他们依然会回答你,这代码完全正确),难道是标准中的说明是错的?还是IE6浏览器连CSS1也不支持?很多疑问从四面八方跑来了……

  那到底是什么问题呢?
  不是标准说明的错,也不是IE浏览器不支持CSS1,而是IE浏览器自身解析的问题,是IE5.5和IE6中伪类:hover的BUG。
  那又该如何解决这个问题呢?
  这个BUG可以通过在链接的属性中增加某些特殊的CSS属性声明来消除。
  下面我们对上面的第二个例子进行实验,究竟哪些属性可以帮我们来消除这些BUG。
  对CSS代码我们增加:
li a:hover {}
  对其属性我们仅设定width:100px;发现在IE6中依旧没有变化,我们尝试着更改width的value,比如使其width:99px,奇怪的事情发生了,在IE6中,隐藏的部分在触发的时候显示出来了。我们再对li a:hover的属性仅设定color来测试(初始值为#fff),更改 color值,发现在IE6下却也不能触发显示,奇怪,奇怪,真奇怪……是不是依旧是一头雾水……没关系,继续往下实验,或许归类了我们就能发现规律了!
  我们再用其他属性进行设置:width,positon,background,text-decoration,font-size,font- weight,font-family,border,float,display,font-style,margin,padding,text- align,overflow,text-transform,text-indent,z-index,vertical-align。
  我们发现除了text-decoration,color,z-index不能触发显示(对于不能触发显示的部分,可以还有某些遗漏的属性,欢迎朋友补充)外,其他属性均可以做为消除伪类:hover BUG的特定属性。
说明:
  1、对于dispaly不可以用本例来测试,可另外写个更简单的例子(去除ul/li,a和span中的position)。在实际应用中怿飞不建议改变display值来做为特定属性消除此BUG,而且在某些例子中此属性不一定能消除BUG。
  2、对于做为特定属性的border和background中的颜色我们还可用全写和简写来改变,如#fff和#ffffff在消除BUG中解析为2个不同的值。
最终效果:
Source Code to Run [www.fun52.com]
css
ul {list-style:none;}
li {height:100px; width:100px; background:#000; font-size:12px; }
li a {display:block; height:100px; width:100px; position:relative; color:#fff; text-decoration:none;}
li a:hover {background:#ccc;}
li span {display:none; }
li a:hover span {display:block; width:100px; height:100px; background:#c00; position:absolute; top:50px; left:50px; color:#fff; }
使用CSS1做出的效果(无BUG)

鼠标移过来触发我吧!哈哈,终于被你发现

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 CSS ,可以使用下列语法在 :hover 时控制子项的显示和不显示: 父元素:hover 子元素 { display: none/block/inline/inline-block; } 例如: <style> .parent:hover .child { display: none; } </style> <div class="parent"> <div class="child">子项文本</div> </div> 这将使得当鼠标悬停在父元素上时,子元素不会显示。 ### 回答2: 在CSS,可以使用:hover伪类选择器来控制鼠标悬停时子项的显示与隐藏。首先,需要选择要控制的父元素,然后使用:hover伪类选择器,接下来使用子选择器或后代选择器选择要显示或隐藏的子项。 例如,假设我们有一个列表,列表项是li元素,我们希望在鼠标悬停时显示子项。我们可以通过以下方式实现: HTML代码: ``` <ul class="list"> <li>列表项1 <ul class="sub-list"> <li>子项1</li> <li>子项2</li> <li>子项3</li> </ul> </li> <li>列表项2</li> <li>列表项3</li> </ul> ``` CSS代码: ``` .list .sub-list { display: none; // 初始状态下隐藏子项 } .list:hover .sub-list { display: block; // 鼠标悬停时显示子项 } ``` 在上述示例使用了.list .sub-list选择器来选择子项。在初始状态下,子项的display属性被设置为none,表示子项被隐藏。当鼠标悬停在列表上时,.list:hover .sub-list选择器将被激活,并将子项的display属性设置为block,以显示子项。 通过这种方式,我们可以在:hover时控制子项的显示和隐藏,提升用户体验和交互效果。 ### 回答3: 在CSS,我们可以使用:hover伪类选择器来控制子项的显示和不显示。 首先,我们需要给希望控制的父元素添加:hover伪类选择器。例如,如果我们希望当鼠标悬停在一个具有class为"parent"的元素上时,控制其子项的显示和不显示,我们可以使用以下代码: .parent:hover { /* 控制子项的显示 */ } 接下来,我们可以通过选择器来选择需要在:hover时显示或隐藏的子项。例如,如果我们希望控制class为"child"的子项在:hover时显示或隐藏,我们可以使用以下代码: .parent:hover .child { /* 显示子项 */ } 这样一来,当鼠标悬停在父元素上时,子项将显示出来。而当鼠标离开父元素时,子项将隐藏起来。 另外,我们也可以使用其他CSS属性来控制子项的显示和不显示,如display属性、visibility属性等。例如,如果我们希望子项在:hover时显示,我们可以使用以下代码: .parent:hover .child { display: block; } 而如果我们希望子项在:hover时隐藏,我们可以使用以下代码: .parent:hover .child { display: none; } 这样一来,当鼠标悬停在父元素上时,子项将显示出来。而当鼠标离开父元素时,子项将隐藏起来。 综上所述,我们可以通过使用:hover伪类选择器以及其他CSS属性来控制子项的显示和不显示,从而实现一些交互效果和动画效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值