深入理解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实现图片抽屉式效果的示例代码
Nov 06 HTML / CSS
CSS实现半透明边框与多重边框的场景分析
Nov 13 HTML / CSS
html5 Canvas画图教程(8)—canvas里画曲线之bezierCurveTo方法
Jan 09 HTML / CSS
基于HTML5 Canvas:字符串,路径,背景,图片的详解
May 09 HTML / CSS
html5通过canvas实现刮刮卡效果示例分享
Jan 27 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
Mar 25 HTML / CSS
html5 初试 indexedDB(推荐)
Jul 21 HTML / CSS
详解html5 canvas 微信海报分享(个人爬坑)
Jan 12 HTML / CSS
使用Html5中的cavas画一面国旗
Sep 25 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
Oct 19 HTML / CSS
使用layui实现左侧菜单栏及动态操作tab项的方法
Nov 10 HTML / CSS
CSS3 天气图标动画效果
Apr 06 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 - Html Transfer Code
2006/10/09 PHP
php mail to 配置详解
2014/01/16 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
php压缩文件夹最新版
2018/07/18 PHP
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
js实现计算器功能
2020/08/10 Javascript
Python判断文本中消息重复次数的方法
2016/04/27 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
python 获取图片分辨率的方法
2019/01/08 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
大学生饮食配送创业计划书
2014/01/04 职场文书
结对共建工作方案
2014/06/02 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
七年级上册生物的课件
2019/08/07 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python