此问题在 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 上进行测试。
这是一个使问题非常明显的小提琴。如果您有一台运行 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 2011 年中)上的 Safari 版本 6.0.2 (7536.26.17) 不受此错误的影响