悬停+闪烁时的CSS +不透明度变化

Posted

技术标签:

【中文标题】悬停+闪烁时的CSS +不透明度变化【英文标题】:CSS + Opacity change on Hover + Flickering 【发布时间】:2011-11-26 19:25:00 【问题描述】:

我正在尝试实现一个非常简单的事情:在悬停时更改表格行的不透明度。

不幸的是,它的效果不是很好,因为如果我快速进出鼠标,有时不透明度变化太慢,颜色似乎在闪烁。当我盘旋进出有点慢时,这种闪烁不会发生。

我举了一个例子,所以你知道我的意思:

http://jsfiddle.net/yfhTW/2/

这种行为是浏览器错误还是我的代码有问题?它可以以某种方式修复吗?我尝试使用 Jquery 脚本而不是通过 CSS 进行不透明度更改,但结果是相同的:/

【问题讨论】:

问题似乎是特定于 Firefox 的。我刚刚将我的 Chrome 更新到最新版本,那里的闪烁消失了。但是在 Firefox 6.0.2 中它仍然存在。我什至没有看 IE,因为它有一些不透明的问题。 附注您是否也看到了 Firefox 6.0.2 的闪烁,或者它可能只是我的配置的问题,而我是唯一看到闪烁的人? 我在 Firefox 6.0.2 中看到了相同的行为。它似乎与<td> 具有的默认display: table-cell 有关。当我更改为display: block 时,问题就消失了,但是表格布局当然是搞砸了。由于您的不透明度更改只是更改颜色,您可以在 :hover 上更改颜色吗? 嗨帕特,您的意思是改变文本颜色和背景颜色以达到几乎相同的结果吗?我想我能做到。好主意!但它看起来与改变不透明度相同,或者?如果我找不到其他工作,我可能会继续这样做。谢谢! 【参考方案1】:

哈,这几乎是 webkit 有时遇到的问题。所以,我尝试模拟 webkit 的修复(带有-webkit-transform: translateZ(0) 的那个),但是使用了 2D 变换,它成功了!

因此,似乎只需将-moz-transform: rotate(0); 添加到受闪烁影响的元素即可解决问题:http://jsfiddle.net/kizu/yfhTW/4/

【讨论】:

哇!它似乎确实有效。你太棒了! :) 但是我想知道,如果 some1 可以解释我为什么会这样,但是非常感谢! 看起来现代浏览器对受 CSS3 转换影响的块应用略有不同的渲染/重排规则。所以,当出现问题时,它只是另一件事。就像 IE 的zoom:1 :) 很高兴知道。我要保存那个 sn-p,所以当我再次遇到一些 css3 效果问题时,我可以尝试一下。我想我自己永远无法解决这个问题 - 所以再次感谢:) 但请注意与***.com/a/10814448/5159481相关的不良行为 谢谢!这次没有为我修好,但***.com/questions/10134935/… 修好了【参考方案2】:

这对我不起作用,所以我想我会提到什么。我不得不添加溢出:隐藏到所有周围的元素。

【讨论】:

【参考方案3】:

尝试将border: 1px solid transparent; 添加到元素(而不是:hover 伪类)。它对我有用。

【讨论】:

这适用于您拥有不透明图像的情况,例如图像包含阴影效果【参考方案4】:

对于来这里的人,如果图像的不透明度不是 1,并且有类似的闪烁,请确保在图像上设置 background-color:white;!我知道这并不能解决手头的问题,但这是一个类似的问题。

.post img  opacity:.8; background-color:white; 
.post:hover img  opacity:1; 

【讨论】:

【参考方案5】:

在尝试了上述建议后,向应用悬停效果的项目添加 z-index 解决了我的问题。

【讨论】:

您能否发布一个分叉的小提琴或代码块来改进您的答案。【参考方案6】:

如果受影响的元素已被翻译(因此,fix by kizu 不适用)请确保设置-webkit-backface-visiblity

-webkit-transform-style: preserve-3d;
-webkit-backface-visibility: hidden;

【讨论】:

这为我修好了!这很奇怪,因为我只能在某些显示器上注意到这个问题。

以上是关于悬停+闪烁时的CSS +不透明度变化的主要内容,如果未能解决你的问题,请参考以下文章

使用 CSS3 悬停时的背景图像不透明度过渡

悬停时的 CSS 菜单问题

悬停时的CSS波纹效果?

CSS:圆角 + 不透明度 = 图像在 Firefox 19 中消失

不悬停时的CSS动画

悬停时的不透明度变化会导致图像偏移或失真