 
  | animation | transition | 
|---|---|
| 多个元素共享 | 当前元素 | 
| 多个状态 | 两个状态 | 
| 常规、步进、时间轴 | 常规、步进 | 
| 关键字、百分比 | 属性 | 
@keyframes ani_name {
    from {
      /* 开始状态/第一个关键帧 */
    }
    to {
      /* 结束状态/最后一个关键帧 */
    }
}
        
@keyframes ani_name {
    0% {  
      /* 开始状态/第一个关键帧 */    
    }
    50% {    
      /* 中间状态/中间关键帧 */  
    }
    100% {  
      /* 结束状态/最后一个关键帧 */    
    }
}
      .可以使用复合属性语法;也可以使用单独属性语法
animation: name duration timing-function delay iteration-count direction fill-mode;
animation-name: animation-duration: animation-timing-function: animation-delay: animation-iteration-count: animation-direction: animation-fill-mode:
| 类别 | 说明 | 
|---|---|
| name | 动画名称 | 
| duration | 动画持续时间 - length of time that an animation takes to complete one cycle 单位秒 s 或毫秒 ms 必须是正值或0 - must be positive or zero 必须指定单位 - unit is required | 
| timing-function | 动画方式;见下表 | 
| delay | 动画延迟时间,必须是第2个时间参数 正值 positive value:推迟 负值 negative value:提前 | 
| iteration-count | 动画播放次数 数值:默认1 infinite:无穷;重复播放 | 
| direction | 动画方向 alternate: reverse:反向播放 alternate-reverse:先反向播放,再正向播放 | 
| fill-mode | 动画开始和结束时如何应用状态/样式 - applies styles to its target before and after its execution none:不指定任何样式;从元素初始状态开始,结束后返回初始状态;默认值 backwards:动画开始时,从第一个关键帧开始;如果有延迟,将始终保持在当前状态 forwards:动画结束时,保持在最后一个关键帧 - retain the computed values set by the last keyframe;特别适合多个有延迟的动画 both:从第一个关键帧开始,结束时保持在最后一个关键帧;不会返回初始状态 | 
| animation-play-state | 动画状态 - whether an animation is running or paused paused:暂停状态 - currently paused running:播放状态 - currently playing 可以通过 :hover 或 JavaScript 来控制动画的播放状态 | 
| animation-timeline | 动画时间线 | 
| 类别 | 说明 | 
|---|---|
| ease | 默认。动画以低速开始,然后加快,在结束前变慢 | 
| linear | 动画从头到尾的速度是相同的 | 
| ease-in | 动画以低速开始 | 
| ease-out | 动画以低速结束 | 
| ease-in-out | 动画以低速开始和结束 | 
| cubic-bezier(n,n,n,n) | 使用 cubic-bezier 函数定义过程 | 
| steps() | 步进动画方式;见后续内容 | 
.tmp {
    width: 100px;
    height: 100px;
    background-color: #fff;/* 初始状态 */
}
.tmp:hover {
    animation: --color 1s;
}
@keyframes --color {
    from {
        background-color: #f40;/* 开始状态 */
    }
    to {
        background-color: #0a0;/* 结束状态 */
    }
}
      
.tmp {
    width: 100px;
    height: 100px;
    background-color: #fff;/* 初始状态 */
}
.tmp:hover {
    animation: --color 1s forwards;/* forwards*/
}
@keyframes --color {
    from {
        background-color: #f40;/* 开始状态 */
    }
    to {
        background-color: #0a0;/* 结束状态 */
    }
}
      
.tmp {
    width: 100px;
    height: 100px;
    background-color: #fff;/* 初始状态;也是开始状态 */
}
.tmp:hover {
    animation: --color 1s;
}
@keyframes --color {
    to {
        background-color: #0a0;/* 结束状态 */
    }
}
      
.tmp {
    width: 100px;
    height: 100px;
    background-color: #fff;/* 初始状态;也是结束状态 */
}
.tmp:hover {
    animation: --color 1s;
}
@keyframes --color {
    from {
        background-color: #f40;/* 开始状态 */
    }
}
      
.tmp {
    width: 100px;
    height: 100px;
    background-color: #fff;/* 初始状态 */
}
  
.tmp:hover {
    animation: --color 1s backwards;
}
@keyframes --color {
    from {
        background-color: #f40;
    }
    to {
        background-color: #0a0;
    }
}
    
animation: 
    roll 2s ease,
    zoom 2s 2s ease infinite alternate;
      
animation: 
    roll 2s ease infinite alternate,
    zoom 2s 2s ease;