详细 : http://www.ruanyifeng.com/blog/2014/02/css_transition_and_animation.html
第一部分:CSS Transition
transition的作用在于,指定状态变化所需要的时间。
img{
transition: 1s;
}
上面代码指定,图片放大的过程需要1秒,效果如下。
我们还可以指定transition适用的属性,比如只适用于height
img{
transition: 1s height;
}
这样一来,只有height的变化需要1秒实现,其他变化(主要是width)依然瞬间实现,
在同一行transition语句中,可以分别指定多个属性
img{ transition: 1s height, 1s width; } //这样一来,height和width的变化是同时进行的
我们希望,让height先发生变化,等结束以后,再让width发生变化。实现这一点很容易,就是为width指定一个delay参数。
img{ transition: 1s height, 1s 1s width; } // 让height先发生变化,等结束以后,再让width发生变化
- 动画效果
transition的状态变化速度(又称timing function),默认不是匀速的,而是逐渐放慢,这叫做ease。
除了ease以外,其他模式还包括
(1)linear:匀速 (2)ease-in:加速 (3)ease-out:减速 (4)cubic-bezier函数:自定义速度模式
-
transition的局限
transition的优点在于简单易用,但是它有几个很大的局限。
(1)transition需要事件触发,所以没法在网页加载时自动发生。
(2)transition是一次性的,不能重复发生,除非一再触发。
(3)transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。
(4)一条transition规则,只能定义一个属性的变化,不能涉及多个属性。
第二部分:CSS Animation
首先,CSS Animation需要指定动画一个周期持续的时间,以及动画效果的名称。
div:hover {
animation: 1s rainbow;
}
上面代码表示,当鼠标悬停在div元素上时,会产生名为rainbow的动画效果,持续时间为1秒。为此,我们还需要用keyframes关键字,定义rainbow效果
@keyframes rainbow { 0% { background: #c00; } 50% { background: orange; } 100% { background: yellowgreen; } }
默认情况下,动画只播放一次。加入infinite关键字,可以让动画无限次播放
div:hover {
animation: 1s rainbow infinite;
}
//也可以指定动画具体播放的次数,比如3次
div:hover {
animation: 1s rainbow 3;
}
2.2 animation-fill-mode 保持结束状态
动画结束以后,会立即从结束状态跳回到起始状态。如果想让动画保持在结束状态,需要使用animation-fill-mode属性。
div:hover {
animation: 1s rainbow forwards;
}
animation-fill-mode还可以使用下列值
(1)none:默认值,回到动画没开始时的状态。
(2)backwards:让动画回到第一帧的状态。
(3)both: 根据animation-direction(见后)轮流应用forwards和backwards规则。
2.4 animation的各项属性
div:hover { animation: 1s 1s rainbow linear 3 forwards normal; }
// 最后一项可以是 normal reserve 常见的两种,指定了东环播放的方向。
2.6 animation-play-state
有时,动画播放过程中,会突然停止。这时,默认行为是跳回到动画的开始状态
如果想让动画保持突然终止时的状态,就要使用animation-play-state属性
div { animation: spin 1s linear infinite; animation-play-state: paused; } div:hover { animation-play-state: running; }
上面的代码指定,没有鼠标没有悬停时,动画状态是暂停;一旦悬停,动画状态改为继续播放。效果如下。