CSS 过渡不适用于 chrome 45 中的 scale(0) + 硬件加速?

Posted

技术标签:

【中文标题】CSS 过渡不适用于 chrome 45 中的 scale(0) + 硬件加速?【英文标题】:CSS transition not working with scale(0) + hardware acceleration in chrome 45? 【发布时间】:2015-12-11 20:29:38 【问题描述】:

当硬件加速被激活(通过will-changetranslateZ(0))并且您在 chrome 45 中与scale(0) 之间进行动画时,CSS 过渡不起作用。(版本 45.0.2454.85(64 位) )

(Firefox 40 适用于will-change,但不适用于translateZ(0)

演示:http://codepen.io/zapdev/pen/ojbdVb (启用硬件加速和隐藏动画停止工作)

我目前的解决方法:

.hide 
    transform: scale(0.0002);
    opcacity: 0;
    transition: transform 400ms, opacity 0ms 400ms;
    pointer-events: none;

编辑: 我在 MacOS X 上,我的 WebGL 渲染器是 "Intel Iris Pro OpenGL Engine"

另外:Chrome 47.0.2511.0 canary (64-bit)will-change 一起工作(如 Firefox 40),但不适用于translateZ(0)。看起来will-change 通常是硬件加速的方式。

【问题讨论】:

发布了一个新版本 45.0.2454.93 m。尝试更新您的浏览器。我已经打开了您的代码笔,在上述版本中一切看起来都很好(启用了硬件加速)。希望这会有所帮助,干杯 仍然无法在 45.0.2454.93 上为我工作(我最后没有 m)。顺便说一句,我在 Mac 上。 很抱歉听到这个消息...我已经在 win7 64 位上进行了测试。假设你的代码写得很好,如果你还没有这样做,请尝试在chromium.org 报告错误部分打开一张票。 在 Windows 7 上的 Google Chrome 45.0.2454.99 m 上测试;它有效! 【参考方案1】:

浏览器不知道如何读取转换覆盖。 当你使用 transform:translateZ('value');你覆盖了比例。

为了让它工作,你需要用 scale 和 translateZ 初始化所有 div,这样它就可以在所有方面工作。

VIEW DEMO

div
  transition: transform 400ms;
  transform:scale(1) translateZ(0);


div:hover
  transform: scale(1.4) translateZ(0);


div.hide
  transform: scale(0) translateZ(0);
 

【讨论】:

您的示例有效,但问题不在于比例被覆盖。 (如果这是问题,悬停过渡也会失败。)问题是它不能插值,因为矩阵插值不能反转 scale(0) 关键帧。更多信息:code.google.com/p/chromium/issues/detail?id=535094#c6

以上是关于CSS 过渡不适用于 chrome 45 中的 scale(0) + 硬件加速?的主要内容,如果未能解决你的问题,请参考以下文章

SVG CSS过渡不适用于`use`元素(Chrome)

CSS 过渡:不透明度和可见性过渡不适用于 Firefox(适用于 Chrome / Safari)

Safari css 宽度过渡不适用于不同的单位测量

CSS过渡动画不适用于减小图像的大小

css 过渡动画不适用于 svg 路径的“d”属性更改

Css 过渡不适用于 React 中的条件渲染