CSS 动画指的是 CSS3 的新特性 animation
, @keyframes
和 transition
。
如果发现动画不起作用注意加上浏览器前缀。
浏览器兼容性
Descktop:
- Chrome(-webkit)
- Firfox(-moz)(16.0 以上不需前缀)
- Internet Explorer(10)
- Opera(-o)(12.10 以上不需前缀)
- Safari(-webkit)
Mobile:
- Android(-webkit)
- Firfox(-moz)(16.0 以上不需前缀)
用法
先使用 @keyframes
定义动画,然后通过 animation
属性调用。
@keyframes
语法
1 | @keyframes <identifier> { |
其中 0%
可以替换为 from
,100%
可以替换为 to
:
1 | @keyframes animate { |
由于浏览器支持不一,所以需要添加浏览器前缀规则:
1 | @keyframes animate { |
百分比表示的动画发生的时间,所以可以使用多个百分比。
1 | @keyframes animate { |
你甚至可以只用一个百分比,因为浏览器会自动计算动画发生时间,但必须有一个百分比存在。
1 | @keyframes animate { |
同时你可以给每个阶段添加时间函数(具体查看下面 animation
)。
1 | @keyframes bounce { |
animation
接下来就是通过 animation
属性引用定义好的动画。
语法
1 | animation: <single-animation-name> || <time> || <timing-function> || <time> || <single-animation-iteration-count> || <single-animation-direction> || <single-animation-fill-mode> || <single-animation-play-state> |
animation-timing-function
包括:
linear
: 匀速ease
: 先加速后减速 (默认)ease-in
: 加速ease-out
: 减速cubic-bezier
: 自定义速度模式 (贝塞尔函数,制作可以使用这个)
1 | div:hover { |
使动画循环播放:
1 | div:hover { |
使动画有限次播放(3 次):
1 | div:hover { |
使动画保持在结束状态,使用 animation-fill-mode:
1 | div:hover { |
animation-fill-mode
值包括:
- none: 默认,回到动画没开始的状态
- backwards: 动画回到第一帧的状态
- both: 根据
animation-direction
轮流应用 forwards 和 backwards 规则
animation-direction
值包括:
- normal
- alternate
- reverse
- alternate-reverse
CSS Transition
指定动画过渡的时间。
语法
1 | transition: property duration timing-function delay|initial|inherit; |
分开来的属性:
- transition-property
- transition-duration
- transition-timing-function
- transition-dely
1 | #box:hover { |