深入理解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 相关文章推荐
HTML+CSS3 模仿Windows7 桌面效果
Jun 17 HTML / CSS
多重CSS背景动画实现方法示例
Apr 04 HTML / CSS
css3中transition属性详解
Sep 02 HTML / CSS
初探CSS3中的calc()功能
Jul 14 HTML / CSS
CSS3 animation实现逐帧动画效果
Jun 02 HTML / CSS
html5 标签
Jul 16 HTML / CSS
通过HTML5 Canvas API绘制弧线和圆形的教程
Mar 14 HTML / CSS
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
Mar 15 HTML / CSS
常用的HTML5列表标签
Jun 20 HTML / CSS
基于html5 canvas做批改作业的小插件
May 20 HTML / CSS
CSS实现fullpage.js全屏滚动效果的示例代码
Mar 24 HTML / CSS
使用CSS3实现按钮悬停闪烁动态特效代码
Aug 30 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 array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
PHP将整数数字转换为罗马数字实例分享
2019/03/17 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
JS中 用户登录系统的解决办法
2013/04/15 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
jstree的简单实例
2016/12/01 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
python实现内存监控系统
2021/03/07 Python
Python3爬虫学习入门教程
2018/12/11 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
Marc O’Polo俄罗斯官方在线商店:德国高端时尚品牌
2019/12/26 全球购物
网络维护管理员的自我评价分享
2013/11/11 职场文书
超市开店计划书
2014/04/26 职场文书
花坛标语大全
2014/06/30 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
2014年信用社工作总结
2014/11/25 职场文书
惊天动地观后感
2015/06/10 职场文书
运动会通讯稿50字
2015/07/20 职场文书
Golang入门之计时器
2022/05/04 Golang