当前位置: 首页 > 面试题库 >

CSS3过渡:“过渡:全部”是否比“过渡:x”慢?

许沛
2023-03-14
问题内容

我对css3 transition属性的渲染速度有疑问。

假设我有许多要素:

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}。但是我的问题是:针对每个元素的特定过渡属性,在动画渲染的平滑度和快速度方面是否“更快”?例如:

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的“引擎”是否必须搜索“所有”过渡属性,也可能会减慢速度。

有谁知道是这样吗?谢谢!


问题答案:

是的,使用transition: all可能会导致性能上的重大缺陷。在很多情况下,浏览器会查看是否需要进行过渡,即使用户看不到它,例如颜色变化,尺寸变化等。

我能想到的最简单的示例是:-尝试更改缩放级别或字体的大小,您会看到所有内容都变成动画了。很多此类用户交互,但是可能会发生一些界面更改,从而导致某些块中的重排和重新绘制,这可能会告诉浏览器尝试对这些更改进行动画处理。

因此,一般而言,建议您不要使用,transition: all而应使用直接转换。

all过渡还有其他问题,例如页面加载时的动画飞溅,首先是渲染块的初始样式,然后将样式应用于动画。在很多情况下,这不是您想要的东西:)



 类似资料:
  • .animated_div { width:60px; height:40px; background:#92B901; color:#ffffff; position:absolute; font-weight:bold; font-size:15px; padding:10px; float:left; margin:5px; -webkit-transition:-webkit-transf

  • 问题内容: 元素是否触发了任何事件来检查css3转换是否已开始或结束? 问题答案: W3C CSS过渡草案 CSS Transition的完成将生成相应的DOM事件。将为每个经历过渡的属性触发一个事件。这使内容开发人员可以执行与转换完成同步的操作。 要确定转换何时完成,请为在转换结束时发送的DOM事件设置一个JavaScript事件监听器函数。该事件是WebKitTransitionEvent的实

  • 关于过渡 在 Glide 中,Transitions(直译为”过渡”) 允许你定义 Glide 如何从占位符到新加载的图片,或从缩略图到全尺寸图像过渡。Transition 在单一请求的上下文中工作,而不会跨多个请求。因此,Transitions 并不能让你定义从一个请求到另一个请求的动画(比如,交叉淡入效果)。 默认过渡 不同于 Glide v3,Glide v4 将不会默认应用交叉淡入或任何其

  • Wiki ▸ [[API--中文手册]] ▸ [[核心函数]] ▸ 过渡 过渡是一种特殊类型的选择器([[selection|选择器]]),这种操作符的应用随时间平滑而不是瞬间变换。你可以使用过渡[[transition()|选择器#transition]] 操作符从选择得到一个过渡。但是,过渡通常支持和选择器(例如attr和style)一样的操作符,不是所有的操作符都支持。例如,你必须在过渡开始

  • 在视图中,过渡效果是常见的场景。平滑的过渡动画能够给用户更好的感官体验。san 提供了基础的过渡机制,你可以基于此开发丰富的过渡效果。 版本:>= 3.3.0 s-transition 在元素上通过 s-transition 指令,可以声明过渡动画控制器。 <button s-transition="opacityTransition">click</button> 这个对象是元素 owner

  • 定义 基于animejs封装的React组件。 图片展示 代码演示 import Anime from 'pile/dist/components/anime' const {CssTransform} = Anime let moveAlone = { targets: '.anime-move-demo-alone', left: '240px', backgroundColo