深入理解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动画效果抖动解决方法
Sep 03 HTML / CSS
CSS3 绘制BMW logo实的现代码
Apr 25 HTML / CSS
CSS3实现全景图特效示例代码
Mar 26 HTML / CSS
使用HTML5的链接预取功能(link prefetching)给网站提速
Dec 13 HTML / CSS
HTML5新增的8类INPUT输入类型介绍
Jul 06 HTML / CSS
HTML5标签使用方法详解
Nov 27 HTML / CSS
用HTML5的canvas实现一个炫酷时钟效果
May 20 HTML / CSS
html5使用canvas实现弹幕功能示例
Sep 11 HTML / CSS
webView加载html图片遇到的问题解决
Oct 08 HTML / CSS
html5中使用hotcss.js实现手机端自适配的方法
Apr 23 HTML / CSS
详解CSS中的特指度和层叠问题
Jul 15 HTML / CSS
css中:last-child不生效的解决方法
Aug 05 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获取远程图片并把它保存到本地的代码
2008/04/07 PHP
php输出xml格式字符串(用的这个)
2012/07/12 PHP
PHP比你想象的好得多
2014/11/27 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
php实现微信企业转账功能
2018/10/02 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
实例代码详解jquery.slides.js
2015/11/16 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
jQuery元素属性操作实例(设置、获取及删除元素属性)
2016/09/08 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
python中requests模块的使用方法
2015/04/08 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
python入门教程 python入门神图一张
2018/03/05 Python
Django框架模板用法入门教程
2019/11/04 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
迪士尼法国在线商店:shopDisney FR
2020/12/03 全球购物
基层工作经历证明
2014/01/13 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
租房协议书
2014/04/10 职场文书
道德之星事迹材料
2014/05/03 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
优秀团支部申报材料
2014/12/26 职场文书
Python基础之变量的相关知识总结
2021/06/23 Python
《我的美好婚事》动画化决定纪念插画与先导PV公开
2022/04/06 日漫
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技