如何让 div 在悬停时消失而不会在鼠标移动时闪烁?

Posted

技术标签:

【中文标题】如何让 div 在悬停时消失而不会在鼠标移动时闪烁?【英文标题】:How to make a div disappear on hover without it flickering when the mouse moves? 【发布时间】:2011-08-16 05:19:40 【问题描述】:

我在:hover css 上看到了建议display:none 的答案。但这会使 div 在鼠标移动时闪烁。

编辑:添加jsfiddle

【问题讨论】:

请发布给你这个问题的确切的 html 和 css,最好把它放在jsfiddle.net 你可以使用 jQuery 吗? 这是一个例子:jsfiddle.net/userdude/VvsG2 谢谢 Jared,我也加了一个。 【参考方案1】:

display:none 会将元素从渲染树中取出,因此它会立即失去:hover 状态,然后重新出现并再次获得:hover,然后消失、重新出现等等......

你需要的是:

#elem  opacity:0; filter:alpha(opacity=0); 

它将使该位置为空,因此不会出现闪烁。 (Demo yours updated)

【讨论】:

所有三个示例(可见性、显示、不透明度):jsfiddle.net/userdude/VvsG2/4【参考方案2】:

当鼠标悬停在对象上时,使用 javascript 在对象上设置一个类(例如不可见)。然后在对象具有该不可见类时使用 css 显示:无。由于它不再存在,您将不得不检查鼠标坐标(或使用另一个元素鼠标悬停事件)来删除该类并重置不可见的类。

【讨论】:

【参考方案3】:

如果你有这样的事情:

div:hover

  display:none;

那么你没有办法避免闪烁。 On :hover 元素变得不可见,因此它不再悬停并再次出现。 一旦它出现,它就会 :hover again and ...

On :hover 元素变得不可见,因此它不再悬停并再次出现。 一旦它出现,它就会 :hover again and ...

On :hover 元素变得不可见,因此它不再悬停并再次出现。 一旦它出现,它就会 :hover again and ...

On :hover 元素变得不可见,因此它不再悬停并再次出现。 一旦它出现,它就会 :hover again and ...

On :hover 元素变得不可见,因此它不再悬停并再次出现。 一旦它出现,它就会 :hover again and ...

... 它闪烁短。 更好的选择是使用不透明度,如下所示:

div:hover

  opacity:0;

【讨论】:

【参考方案4】:

可选择使用 CSS3,但仅适用于最新的浏览器(不包括 IE)。 编辑:这是一个使用 jquery 和 CSS3 的示例 @jsfiddle。

<html>
<head>
    <title>CSS3 hover</title>
<style type="text/css">
#hover
     width:100px;
     height:100px;
     background-color:#000000;
    -webkit-transition:opacity 0.2s ease;
    -moz-transition:opacity 0.2s ease;
    -o-transition:opacity 0.2s ease;

#hover:hover
    // Red(0-255), Blue(0-255), Green(0-255), Alpha (0-1)
    background-color:rgba(100,100,100,0); 
    opacity:0;

</style>
</head>
<body>
    <div id="hover"></div>
</body>
</html>

【讨论】:

哦,是的,我没有提到 JS 方法可以跨浏览器工作,CSS3 不能在 IE 上工作 ;)

以上是关于如何让 div 在悬停时消失而不会在鼠标移动时闪烁?的主要内容,如果未能解决你的问题,请参考以下文章

如何让带有 z-index 的 div 在悬停时覆盖另一个 div

悬停时jQuery图像闪烁

CSS @keyframes 光标动画在悬停时闪烁

悬停在文本上时,悬停效果消失

鼠标快速移动时不会触发jQuery mouseleave函数

鼠标经过一个div时 , 如何让另一个div以过渡效果高度增加