CSS3过渡:“transition:all”比“transition:x”慢吗?

我有一个关于css3转换属性的渲染速度的问题。

假设我有一些元素:

div, span, a {transition: all} div {margin: 2px} span {opacity: .5} a:hover {background-position: left top} div:hover {margin: -100px} span:hover {opacity: 1} a:hover {background-position: -5px top} 

使用一个声明div, span, a {transition: all}来定位所有这些元素的所有转换,会更有效率。 但是我的问题是:在animation渲染的平滑性和快速性方面,它会以“更快”的方式来针对每个元素的特定转换属性吗? 例如:

 div {margin: 2px; transition: margin .2s ease-in} span {opacity: .5; transition: opacity .2s ease-in} a {background-position: left top; transition: background .2s ease-in} div:hover {margin: -100px} span:hover {opacity: 1} a:hover {background-position: -5px top} 

我问这个问题的逻辑是,如果CSS“引擎”必须search“所有”转换属性,即使一个元素只有一个属性,它可能会减慢速度。

有谁知道如果是这样的话? 谢谢!

是的,使用transition: all可能会导致性能的重大缺陷。 在浏览器看起来是否需要转换的情况下,即使用户看不到它,比如颜色的变化,尺寸的变化等,也可能有很多情况。

我能想到的最简单的例子是: http : //dabblet.com/gist/1657661 – 尝试改变缩放级别或字体的大小,你会发现一切都变成了animation。当然,不可能有一个很多这样的用户交互,但可能会有一些接口更改,可能会导致一些块中的回stream和重新绘制,这可能会告诉浏览器尝试和animation这些更改。

所以,一般来说,build议您不要使用transition: all ,而是使用直接转换。

还有一些其他的东西可能会出现all转换错误,比如页面加载时的animation飞溅,它首先渲染块的初始样式,然后用animation应用样式。 在很多情况下,它不会是你想要的东西:)

我一直在使用all的情况下,我需要animation多个规则。 例如,如果我想更改:hover上的colorbackground-color

但事实certificate,您可以针对多个规则进行转换,因此您无需诉诸all设置。

 .nav a { transition: color .2s, text-shadow .2s; }