css动画
大部分页面都使用静态元素来显示动态内容(例如文字、图片),但如何让页面上的元素动起来?可以使用CSS 动画来让页面元素动起来。
1. 使用 transition 属性
如果你只是想要一些简单的动画或过渡效果,使用 transition 属性会是一个很好的办法。 transition 属性是 transition-property、 transition-duration、 transition-delay 和 transition-timing-function 属性的简写属性。
transition-property:transition-property属性的值设定了应用过渡在哪个 CSS 属性上。举个例子 ,如果我们想把过渡效果应用在字体大小改变时,那就应该设置transition-property: font-size;。transition-duration:transition-duration属性的值以秒或毫秒为单位设定了过渡动画所需的时间。默认值为0s,表示不出现过渡动画。transition-delay:transition-delay属性的值设定了在过渡效果开始之前所需要等待的时间。transition-timing-function:transition-timing-function属性的值设定了如何计算因受到过渡效果影响的 CSS 属性产生的中间值是如何计算。最常见的值有linear(动画从开始到结束是匀速的)、ease(默认值,动画有一个缓慢的开始,然后变快,最后缓慢结束)、ease-in(动画有一个缓慢的开始)、ease-out(动画有一个缓慢的结束)和ease-in-out(动画有一个缓慢的开始和结束)。
1  |  | 
1  |  | 

2. 使用 @keyframes 和 animation 属性
如果想要实现一些更复杂的动画效果,可以尝试定义动画中的一些关键帧,使用 @keyframes 和 animation 属性来实现。
2.1 The @keyframes @规则
CSS 的 @keyframes @规则通过在动画序列中定义关键帧的样式来控制 CSS 动画序列中的中间步骤。
定义一系列的关键帧需要:
动画名称。
一个或多个关键帧,每个关键帧包含:
from、to或一个百分值,定义了动画序列中出发关键帧的时间点。- 关键帧的 CSS 样式。
 
2.2 animation 属性
animation 属性指定了一组或多组动画,每组之间用逗号相隔。它是 animation-name、 animation-duration、 animation-timing-function、 aniamtion-delay、 animation-iteration-count、 animation-direction、 animation-fill-mode 和 animation-play-state 属性的简写属性。
animation-name:animation-name属性的值指定应用的一系列动画,每个名称代表一个由@keyframes定义的动画序列。animation-duration:animation-duration属性的值指定了一个动画周期的时长。animation-iteration-count:animation-iteration-count属性的值定义了动画在结束前运行的次数,可以使任何非负数或是infinite(无限循环)。animation-direction:animation-direction属性的值规定了动画是否反向播放。它的值可以是normal(每个循环内动画向前循环) 、alternate(动画交替反向运行)、reverse(反向运行动画)或alternate-reverse(动画第一次开始时是返乡的,然后反相交替进行)。animatino-delay:animation-delay属性的值定义了动画效果开始前需要的等待时间。animation-fill-mode:animation-fill-mode属性定义了动画在执行之前和之后如何将样式应用于其目标。它的值可以是none(当动画为执行前,动画将不会将任何掩饰应用于目标)、forwards(目标将保留由执行期间遇到的最后一个关键帧计算值)、backwards(动画将在与用语目标是立即应用第一个关键帧的计算值)或是both( 动画将遵循forwards和backwards的规则)。animation-play-state:animation-play-state属性的值将定义一个动画是否运行(running)或者暂停(paused)。animation-timing-function:animation-timing-function属性的值定义了每一个动画周期中执行的节奏。最常见的值有linear、ease、ease-in、ease-out和ease-in-out。
2.3 把 @keyframes 和 animation 属性组合起来制作动画
现在,让我们把 @keyframes 和 animation 结合起来吧!
1  |  | 
1  |  | 

3. 如何优化 CSS 动画?
因为
transform支持硬件加速,所以使用transform属性来替代width、height、margin、padding等属性。使用 3D 变形来开启 GPU 加速。使用
transform属性的translate3d()函数会让动画流畅度优于使用left、right、top和bottom属性。
1  |  | 
1  |  | 
减少使用高消耗的属性(例如
box-shadow、gradients、background-attachment: fixed;等)。尽可能使用
position:fixed;或position:absolute;来让动画元素脱离文档流。如果动画过程中出现闪烁(一般出现在动画开始时),尝试使用:
1  |  | 
