深入理解css属性的选择对动画性能的影响


Posted in HTML / CSS onApril 20, 2016

现在手机的占比越来越高,各种酷炫页面层出不穷,这些特效都离不开css动画。说到css动画,主流的情况也就无非这两大类:位移和形变。而我们在写一个动画特效的过程中,如何去提升它的性能呢?当然首先我们需要去了解一下基本的概念,比如浏览器渲染的工作原理等,这些我也在读了几位大牛写的相关文章后才有了一定的了解,这边我也不细说了,有兴趣的同学可以去了解一下。本次的目的简单粗暴地讲,其实就是我们应该使用什么css属性去进行动画的绘制时,能够有效的提高浏览器在渲染和绘制过程中的性能。

分别使用了left和transform在2秒内向右平移了500px的位移。代码如下:

JavaScript Code复制内容到剪贴板
  1. <style>   
  2. .box-ps,.box-tf{position:absolute;top:0;left:0;width:100px;height:100px;background-color:red;}   
  3. .box-ps{-webkit-animation:box-ps 2s linear;}   
  4. .box-tf{-webkit-animation:box-tf 2s linear;}   
  5.   
  6. @-webkit-keyframes box-ps{   
  7. 0%{   
  8. left:0;   
  9. }100%{   
  10. left:500px;   
  11. }   
  12. }   
  13.   
  14. @-webkit-keyframes box-tf{   
  15. 0%{   
  16. -webkit-transform:translate(0,0);   
  17. }100%{   
  18. -webkit-transform:translate(500px,0);   
  19. }   
  20. }   
  21. </style>   
  22.   
  23. <body>   
  24. <div class="box-ps"></div>   
  25. <div class="box-tf"></div>   
  26. </body>  

然后在chrome下得到了如下的结果,第一张为使用left的截图,第二张为使用transform的截图:

深入理解css属性的选择对动画性能的影响

transform的截图

深入理解css属性的选择对动画性能的影响

 

显而易见,我们在帧模式这里可以看到left比transform帧数要低,而且在渲染和绘制这边的耗时,left要远远的大于transform。看到这里,相信大家心里已经有结论了。
我们再利用chrome的show paint rectangles来观察一下两者在动画过程中,渲染和绘制的区域有何差异,第一张为使用left的截图,第二张为使用transform的截图:

深入理解css属性的选择对动画性能的影响

transform的截图

深入理解css属性的选择对动画性能的影响

我们可以看到,使用left写的整个动画过程中,浏览器一直在进行绘制处理。而相对而言,使用transform时,仅仅是在动画开始和结束是进行了绘制。因此,对于动画的性能上,transform要更为出色。至于原因,这里就要引入一个触发重新布局的概念:

我们在改变一些属性时,如果是跟layout相关的属性,则会触发重新布局,导致渲染和绘制所需要的时间将会更长。因此,我们在写动画的时候因该规避这些属性:width, height, margin, padding, border, display, top, right, bottom ,left, position, float, overflow等。
不会出发重新布局的属性有:transform(其中的translate, rotate, scale), color, background等。

所以,我们平时在写css动画时,应该优先使用不触发重新布局的属性,这样可以使我们所展示动画效果的更加流畅。

以上这篇深入理解css属性的选择对动画性能的影响就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

原文地址:http://www.cnblogs.com/dehua-chen/archive/2016/04/20/5411728.html

HTML / CSS 相关文章推荐
检测用户浏览器是否支持CSS3的方法
Aug 29 HTML / CSS
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
Sep 02 HTML / CSS
CSS3中的opacity属性使用教程
Aug 19 HTML / CSS
可自定义箭头样式的CSS3气泡提示框
Mar 16 HTML / CSS
浅谈css3中的前缀
Jul 20 HTML / CSS
HTML5 对各个标签的定义与规定:body的介绍
Jun 21 HTML / CSS
在HTML5 Canvas中放入图片和保存为图片的方法
May 03 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
Apr 23 HTML / CSS
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
Jul 22 HTML / CSS
CSS3实现列表无限滚动/轮播效果
Jun 23 HTML / CSS
table不让td文字溢出操作方法
Dec 24 HTML / CSS
HTML 里 img 元素的 src 和 srcset 属性的区别详解
May 21 HTML / CSS
CSS中越界问题的经典解决方案【推荐】
Apr 19 #HTML / CSS
css3 中的新特性加强记忆详解
Apr 16 #HTML / CSS
前端隐藏出边界内容的实现方法
Apr 14 #HTML / CSS
使用CSS3编写类似iOS中的复选框及带开关的按钮
Apr 11 #HTML / CSS
基础的CSS3弹性盒Flexbox布局使用实例
Apr 08 #HTML / CSS
CSS3的Flexbox布局的简明入门指南
Apr 08 #HTML / CSS
使用CSS3设计地图上的雷达定位提示效果
Apr 05 #HTML / CSS
You might like
PHP代码审核的详细介绍
2013/06/13 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
JavaScript 的方法重载效果
2009/08/07 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
浅析offsetLeft,Left,clientLeft之间的区别
2013/11/30 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
DOM事件探秘篇
2017/02/15 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
Vuex的初探与实战小结
2018/11/26 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
nuxt 自定义 auth 中间件实现令牌的持久化操作
2020/11/05 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
pandas 时间格式转换的实现
2019/07/06 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
贯彻学习两会心得体会范文
2014/03/17 职场文书
小学教育见习总结
2015/06/23 职场文书
Redis实战高并发之扣减库存项目
2022/04/14 Redis