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 |
|