css属性的取舍对动画片品质的影响
分类:前端技术

css属性的选择对动画性能的影响

2016/03/06 · CSS · 1 评论 · 动画

原文出处: 携程设计委员会   

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

快速进入主题,大家先来看个demo。我分别使用了left和transform在2秒内向右平移了500px的位移。代码如下:

<style> .box-ps,.box-tf{position:absolute;top:0;left:0;width:100px;height:100px;background-color:red;} .box-ps{-webkit-animation:box-ps 2s linear;} .box-tf{-webkit-animation:box-tf 2s linear;} @-webkit-keyframes box-ps{ 0%{ left:0; }100%{ left:500px; } } @-webkit-keyframes box-tf{ 0%{ -webkit-transform:translate(0,0); }100%{ -webkit-transform:translate(500px,0); } } </style> <body> <div class="box-ps"></div> <div class="box-tf"></div> </body>

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

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

图片 1

图片 2

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

图片 3

图片 4

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

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

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

 

2 赞 3 收藏 1 评论

图片 5

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

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

<style>
.box-ps,.box-tf{position:absolute;top:0;left:0;width:100px;height:100px;background-color:red;}
.box-ps{-webkit-animation:box-ps 2s linear;}
.box-tf{-webkit-animation:box-tf 2s linear;}

@-webkit-keyframes box-ps{
0%{
left:0;
}100%{
left:500px;
}
}

@-webkit-keyframes box-tf{
0%{
-webkit-transform:translate(0,0);
}100%{
-webkit-transform:translate(500px,0);
}
}
</style>

<body>
<div class="box-ps"></div>
<div class="box-tf"></div>
</body>

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

图片 6

transform的截图

图片 7

 

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

图片 8

transform的截图

图片 9

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

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

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

转载请注明来自:携程设计委员会

本文由pc28.am发布于前端技术,转载请注明出处:css属性的取舍对动画片品质的影响

上一篇:浅谈Hybrid技术的设计与实现第三弹,浅谈Hybrid技 下一篇:没有了
猜你喜欢
热门排行
精彩图文
  • 资源大全,开发资源
    资源大全,开发资源
    CSS 资源大全 2015/12/25 · CSS · 1评论 ·CSS 本文由 伯乐在线 -iLeo翻译,艾凌风校稿。未经许可,禁止转载! 英文出处:github.com。欢迎加入翻译组。 sotayamash
  • 为您写的网页,前端高质量总括之二
    为您写的网页,前端高质量总括之二
    前端高质量总计之一:WebWorkers 2017/10/21 · HTML5 ·WebWorkers 初藳出处: magicly    近几来做三个品类,里面涉及到在前端做多量测算,直接用js跑了一晃,差相
  • JavaScript深化教程,NGUI显示器适配
    JavaScript深化教程,NGUI显示器适配
    H5 游戏支付:横屏适配 2017/10/31 · HTML5 · 1评论 ·横屏,游戏 原来的作品出处:坑坑洼洼实验室    对于移动端的轻量级 HTML5 互动小游戏(简称为 H5轻互动
  • Web前端开发常用的技术,Web应用设计浅谈
    Web前端开发常用的技术,Web应用设计浅谈
    Web应用设计浅谈 2011/08/19 · HTML5 ·HTML5 注: 正文转发自一叶苦雨 HTML5技艺的强势发展,为网络带来的最大退换正是:web从“已死”的断言中回过头来给Nat
  • 的黑法力,浓郁探索javascript计时器
    的黑法力,浓郁探索javascript计时器
    setTimeout 的黑法力 2016/05/03 · JavaScript· 1 评论 ·settimeout 初藳出处:李三思    setTimeout,前端技术员必定会打交道的二个函数.它看起来极度的简单,朴实.有着