【问题标题】:Webkit text flickers when using CSS transform (scale)使用 CSS 变换(缩放)时 Webkit 文本闪烁
【发布时间】:2012-08-30 00:06:42
【问题描述】:

这发生在 Mountain Lion 上的 Safari 6 和最新的 chrome 中。 (在 OSX 上确认,在 windows 中可能不会发生)

请参阅此页面以获取示例:

http://users.telenet.be/prullen/flicker2.html

在图像上快速移动鼠标并查看下面的文字。你会看到它闪烁/脉动。

相关的 CSS 如下。我无法对.out.in 类进行任何更改。仅限于物品类。

我尝试添加-webkit-backface-visibility:hidden;,因为我在某处读到应该可以修复它,但没有任何区别。

有人知道吗?

谢谢, 卫斯理

.out {                                      
   position:        relative;                                       
   display:        block;                                      
   margin:            0;                                      
   border:            0;
   padding:        0;                                      
   margin-left:    auto;                                       
   margin-right:    auto;                                      
   overflow:        hidden;    
 }
.in {                                   
   position:        relative;                                       
   display:        block;                                      
   margin:            0;                           
   padding:        0;                            
   border:            0;
   overflow:        hidden;
}
.item {
   margin: 60px;
   -webkit-transition: -webkit-transform .15s linear;
   -moz-transition: -moz-transform .15s linear;
   -o-transition: -o-transform .15s linear;
   transition: transform .15s linear;
   -webkit-transform-style: preserve-3d;
   -moz-transform-style: preserve-3d;
   -o-transform-style : preserve-3d;
   -ms-transform-style : preserve-3d;
}
.item:hover {
   -webkit-transform: scale(1.3) !important;
   -moz-transform: scale(1.3) !important;
   -o-transform: scale(1.3) !important;
   -ms-transform: scale(1.3) !important;
   transform: scale(1.3) !important;
}

【问题讨论】:

  • 在 Win7 上的 Chrome 中看起来不错,您是否尝试过使用其他浏览器?
  • 我刚刚通过 browserstack.com 进行了测试 - 它似乎只发生在 Mountain Lion (osx) 上
  • Mountain Lion 中的所有浏览器都会出现这种情况吗?还是只是 Safari / 所有基于 webkit 的?
  • 其实我是请人自己测试的,Lion 也是这样。可能只是 OSX。它不会发生在 Firefox 中。 Chrome/Safari。
  • 听起来像是 Webkit 中的硬件加速问题。将其用作测试用例并报告错误可能值得。

标签: html css browser safari


【解决方案1】:

我遇到了同样的问题:我想在悬停时缩放元素,这样做时页面上的每个文本都会闪烁。我还在使用最新的 Chrome (21.0.1180.89) 和 OSX Mountain Lion。

其实添加

-webkit-backface-visibility: hidden;
-moz-backface-visibility:    hidden;
-ms-backface-visibility:     hidden;

对受影响的元素是否解决问题。

您说过您不能更改 .in 和 .out 类,但也许您可以添加另一个(.no-flicker)并在受影响的元素上使用它。

注意: 这似乎确实有助于解决 Chrome 中的问题,但请注意,如果您的元素分层使用 z 定位 CSS 属性,它可能会在 Safari 中引起一些问题。例如,在我的网站上,它会导致 CSS 元素在我试图清理的动画幻灯片的幻灯片转换后面闪烁。

【讨论】:

  • 谢谢。每次在社区网络时代解决这种隐约出现的问题时,我都会感到惊讶(-我在 Google 上搜索了“chrome 过渡比例移动”-)。也向谷歌致敬。
【解决方案2】:

我有同样的问题,但要解决它。

只需将.no-flickr 类添加到项目中任何闪烁或闪烁的元素

.no-flickr {
  -webkit-transform: translateZ(0);
  -moz-transform: translateZ(0);
  -ms-transform: translateZ(0);
  -o-transform: translateZ(0);
  transform: translateZ(0);
}

【讨论】:

    【解决方案3】:

    我今天早上遇到了同样的问题,发现最好的解决方法是:

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

    我将这个添加到构成双面对象的的两个元素中。停止 Chrome 中的闪烁并修复 Safari 中显示的背面。

    【讨论】:

    • -webkit-transform-style:preserve-3d;隐藏我页面上的所有内容。 -webkit-backface-visibility:隐藏;确实有帮助-但那是以前的答案。我觉得你的回答令人困惑。
    • 实际上在我的上一个项目中,“preserve-3d”解决了 -webkit- 滚动条在我将鼠标悬停在具有 on:hover 缩放(放大)效果的 inline-block 元素上时跳动的问题里面的标题。我的猜测是,保留 3d 有助于保留元素的原始边界,尤其是当使用一个充满内联块项目单元格的网格时,所有单元格都彼此相邻......
    • 使用透视图和比例尺开始闪烁我所有的 div/li 的相对位置。将 preserve-3d 添加到父容器(变换和缩放所在的容器)停止了这种烦人的闪烁,ty
    • 谢谢,这是完美的解决方案!
    猜你喜欢
    • 2018-03-11
    • 2019-11-11
    • 2013-09-21
    • 1970-01-01
    • 2021-02-14
    • 2012-01-11
    • 2011-02-26
    • 2019-12-24
    • 2011-02-27
    相关资源
    最近更新 更多