OSX 上 Safari 6 中的 CSS3 闪烁(但这不是闪烁到白色的问题!)

Posted

技术标签:

【中文标题】OSX 上 Safari 6 中的 CSS3 闪烁(但这不是闪烁到白色的问题!)【英文标题】:CSS3 Flickering in Safari 6 on OSX (but this is not the flickering-to-white issue!) 【发布时间】:2013-02-01 14:32:03 【问题描述】:

此问题在 ios 或 Chrome 上不存在,因此它不是与 Webkit 相关的问题。它似乎特定于 OS X 10.8.2 上的最新 Safari 6.0.2(并且未由 Safari 6.0.3 附带的 10.8.3 预览版本 12D65 修复)。我将很快在 Safari 6.0.2 上测试 Lion 10.7.5,并且还将在预览版本 12D68 上进行测试。

http://jsfiddle.net/zrr2b/

这是一个使问题非常明显的小提琴。如果您有一台运行 ML 的 Mac,您应该会看到 Chrome 和 Safari 之间的显着差异,当您移动鼠标时,Safari 会闪烁 很多

基本上问题是Safari会间歇性地为单帧绘制从JS设置的目标变换,然后继续过渡动画。这会导致闪烁,但前提是过渡正在从某个地方开始。因此,对于大多数(非密集使用)CSS3 过渡,该错误不会抬起丑陋的头,但如果功能或视觉效果依赖于它来平滑地插入到目标(就像我当前的项目一样),这种闪烁是不愉快的。

我查看了与闪烁相关的类似主题,并应用了几乎所有样式组合来抵消闪烁,例如-webkit-backface-visibility: hidden,强制各种父元素获得硬件加速,-webkit-transform-style: preserve-3d-webkit-perspective: 1000,没有不幸的是,他们中的一些人做了任何事情来解决这个 Safari 特有的闪烁问题,也就是说,闪烁不是白色或空白,而是闪烁单个帧的目标变换

在此分支中,您可以看到我设置了一堆有助于“定期闪烁”但对我没有效果的样式。 http://jsfiddle.net/zrr2b/1/

由于这不是特定于 webkit 的问题,我不确定在哪里发布错误报告。在 10.8.3 版本之前获得它会特别好,因为我认为这是一个相当大的问题。请记住,这是我们依靠 html5 做好的事情,以便它真正杀死 Flash。

更新:

Mountain Lion 10.8.3 12D68(Retina Macbook Pro 15.4")上的 Safari 版本 6.0.3 (8536.28.10) 仍然存在此问题 Windows (5.1.7) 上的 Safari 不受此错误的影响 Lion 10.7.5(Macbook Air Mid 2011)上的 Safari 版本 6.0.2 (7536.26.17) 没有此错误

【问题讨论】:

投了赞成票!看起来我不是唯一一个看到这个问题的人。谢谢。我确实在 bugreport.apple.com 提交了一个错误。 不过,现在在 OS X Mavericks 上的 Safar 9.0.2 上存在一个错误 我使用的是 OS X El Capitan,Safari 9.0.2。不再重现。很有趣。 真的吗?您是否尝试过在 jsfiddle 中快速移动鼠标。我所说的非常快是指在动画完成之前。 (等等,愚蠢的问题,你是问题的作者) 是的,iirc 的不良行为是看到块来回弯曲。预期行为是平滑滞后的位置动画。我想我也把我妈妈的 MBA 升级到了 El Cap :-/ 【参考方案1】:

有几种不同的方法可以尝试减少闪烁。然而,最大的问题是它们似乎是“命中注定”。所以你必须尝试一些,看看哪一个有助于解决问题。

但它们围绕着相同的几件事:

-webkit-transform: translateZ(0);  /* triggers GPU, sometimes fixes the issue */
transform: translateZ(0);  /* non-webkit specific */

如果这还不能解决问题,请尝试:

-webkit-backface-visibility: hidden;
backface-visibility: hidden;
-webkit-perspective: 1000;
perspective: 1000;

如果这也失败了,试试这个:

-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);

您可以通过 W3C 了解它们中的每一个。但是它们都在不同的情况下为我工作,没有流畅的动画,还有闪烁的动画,包括一些非常奇怪的动画,比你的小提琴更跳跃。

他们会进入被动画的 div。

【讨论】:

以上是关于OSX 上 Safari 6 中的 CSS3 闪烁(但这不是闪烁到白色的问题!)的主要内容,如果未能解决你的问题,请参考以下文章

CSS3 转换影响其他元素与 chrome/safari

safari 中的 css3 过渡不顺畅

当触发 iOS Safari 中的虚拟键盘时,它会使我的 CSS 过渡闪烁。如何解决这个问题?

如何消除此 JQuery/CSS3 动画中的闪烁

速记中的 CSS3 动画播放状态在 IE 和 Safari 中不起作用

Facebook Safari OSX Youtube wmode 错误