CSS动画的两大组成部分:transition和animation。 CSS Transition

img{
    transition: 1s 1s height ease;
}

img{
    transition-property: height;
    transition-duration: 1s;
    transition-delay: 1s;
    transition-timing-function(变化速度): ease;
}
(1)linear:匀速;(2)ease-in:加速;(3)ease-out:减速;(4)cubic-bezier函数:自定义速度模式

CSS Animation 我们还需要用keyframes关键字,定义rainbow效果。我们还需要用keyframes关键字,定义rainbow效果。

@keyframes rainbow {
  0% { background: #c00; }
  50% { background: orange; }
  100% { background: yellowgreen; }
}

0%可以用from代表,100%可以用to代表,因此上面的代码等同于下面的形式。

@keyframes rainbow {
  from { background: #c00 }
  50% { background: orange }
  to { background: yellowgreen }
}

另外一点需要注意的是,浏览器从一个状态向另一个状态过渡,是平滑过渡。steps函数可以实现分步过渡。

div:hover {
  animation: 1s rainbow infinite steps(10);
}

animation-play-state:如果想让动画保持突然终止时的状态,就要使用animation-play-state属性。

div {
    animation: spin 1s linear infinite;
    animation-play-state: paused;
}

div:hover {
  animation-play-state: running;
}

animation的各种属性值简写:
div:hover {
  animation: 1s 1s rainbow linear 3 forwards normal;
}
可以分解成各个单独的属性。
 div:hover {
  animation-name: rainbow;
  animation-duration: 1s;
  animation-timing-function: linear;
  animation-delay: 1s;
  animation-fill-mode:forwards;
  animation-direction: normal;
  animation-iteration-count: 3 (infinite,可以让动画无限次播放);
}
animation-fill-mode还可以使用下列值。
(1)none:默认值,回到动画没开始时的状态;(2)backwards:让动画回到第一帧的状态;
(3)both: 根据animation-direction(见后)轮流应用forwards和backwards规则animation-fill-mode还可以使用下列值。

浏览器前缀 目前,IE 10和Firefox(>= 16)支持没有前缀的animation,而chrome不支持,所以必须使用webkit前缀。实际运用中,代码必须写成下面的样子。

div:hover {
  -webkit-animation: 1s rainbow;
  animation: 1s rainbow;  
}

@-webkit-keyframes rainbow {
  0% { background: #c00; }
  50% { background: orange; }
  100% { background: yellowgreen; }
}

@keyframes rainbow {
  0% { background: #c00; }
  50% { background: orange; }
  100% { background: yellowgreen; }
}