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
上的color
和background-color
。
但事实certificate,您可以针对多个规则进行转换,因此您无需诉诸all
设置。
.nav a { transition: color .2s, text-shadow .2s; }