animation 动画
@keyframes 关键帧
@keyframes 用于创建关键帧动画序列,它允许控制 CSS 动画序列中的中间步骤。和 转换 transition 相比,关键帧 keyframes 可以控制动画序列的中间步骤。
@keyframes slidein {
from {
transform: translateX(0%);
}
to {
transform: translateX(100%);
}
}除了 from 和 to,你还可以使用百分比指定多个关键帧,以更精细地控制动画效果。其中 0% = from 和 100% = to
@keyframes pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.2);
}
100% {
transform: scale(1);
}
}JavaScript 可以通过 CSS 对象模型的 CSSKeyframesRule (en-US) 接口来访问 @keyframes。
如果在关键帧的样式中使用了不能用作动画的属性,那么这些属性会被忽略掉,支持动画的属性仍然是有效的,不受波及。
重复定义
如果多个关键帧使用同一个名称,以最后一次定义的为准。 @keyframes 不存在层叠样式 (cascade) 的情况,所以动画在一个时刻(阶段)只会使用一个的关键帧的数据。
如果一个 @keyframes 内的关键帧的百分比存在重复的情况,则 @keyframes 规则中该百分比的所有关键帧都将用于该帧。如果多个关键帧指定了相同的百分比值,则 @keyframes 规则内是可以使用层叠样式的。
属性个数不定
如果一个关键帧中没有出现其他关键帧中的属性,那么这个属性将使用插值(不能使用插值的属性除外,这些属性会被忽略掉)。
@keyframes identifier {
0% {
top: 0;
left: 0;
}
30% {
top: 50px;
}
68%,
72% {
left: 50px;
}
100% {
top: 100px;
left: 100%;
}
}以上例子中,top 属性分别出现在关键帧 0%、30% 和 100% 的中,而 left 属性分别出现在关键帧 0%、68%、72% 和 100% 中。
同一关键帧中的相同属性被重复定义
如果某一个关键帧出现了重复的定义,且重复的关键帧中的 CSS 属性值不同,则以最后一次定义的属性为准。
@keyframes identifier {
0% {
top: 0;
}
50% {
top: 30px;
left: 20px;
}
50% {
top: 10px;
}
100% {
top: 0;
}
}以上的例子中,50% 关键帧中分别最后设置的属性 top: 10px; 和 left: 20px; 是有效的,但是其他的属性会被忽略。
关键帧中的 !important
关键帧中出现的 !important 将会被忽略。
@keyframes important {
from {
margin-top: 50px;
}
50% {
margin-top: 150px !important; /* 忽略 */
}
to {
margin-top: 100px;
}
}animation 动画
animation 属性是一个简写属性,可以同时设置多个动画属性,多个动画使用逗号(,)分隔。
div {
/* @keyframes duration | easing-function | delay |
iteration-count | direction | fill-mode | play-state | name */
animation: 3s ease-in 1s 2 reverse both paused slidein;
/* @keyframes duration | easing-function | delay | name */
animation: 3s linear 1s slidein;
/* 多个动画 */
animation: 3s linear slidein, 3s ease-out 5s slideout;
}animation-name 动画名称
animation-name 属性指定一个或多个 @keyframes 的名称,这些名称描述了要应用于元素的动画。多个 @keyframes 以逗号分隔的名称列表的形式指定。如果指定的名称不匹配任何 @keyframes 则不会对任何属性进行动画处理。
div {
/* 单个动画 */
animation-name: none;
animation-name: test_05;
animation-name: -specific;
animation-name: sliding-vertically;
/* 多个动画 */
animation-name: test1, animation4;
animation-name: none, -moz-specific, sliding;
}animation-duration 动画时间
animation-duration 属性用于设置动画完成一个动画周期所需的时间。
div {
/* 单个动画 */
animation-duration: 6s;
animation-duration: 120ms;
/* 多个动画 */
animation-duration: 1.64s, 15.22s;
animation-duration: 10s, 35s, 230ms;
}animation-timing-function 时间曲线
animation-timing-function 属性用于设置动画在每个周期的持续时间内得动画时间曲线。
div {
/* 关键字值 */
animation-timing-function: ease;
animation-timing-function: ease-in;
animation-timing-function: ease-out;
animation-timing-function: ease-in-out;
animation-timing-function: linear;
animation-timing-function: step-start;
animation-timing-function: step-end;
/* 函数值 */
animation-timing-function: cubic-bezier(0.1, 0.7, 1, 0.1);
animation-timing-function: steps(4, end);
/* Steps 函数关键字 */
animation-timing-function: steps(4, jump-start);
animation-timing-function: steps(10, jump-end);
animation-timing-function: steps(20, jump-none);
animation-timing-function: steps(5, jump-both);
animation-timing-function: steps(6, start);
animation-timing-function: steps(8, end);
/* 多个动画 */
animation-timing-function: ease, step-start, cubic-bezier(0.1, 0.7, 1, 0.1);
}animation-delay 动画延时
animation-delay 属性用于指定从应用动画到元素开始执行动画之前等待的时间量。动画可以稍后开始、立即从开头开始或立即开始并在动画中途播放。
div {
/* 单个动画 */
animation-delay: 3s;
animation-delay: 0s;
animation-delay: -1500ms;
/* 多个动画 */
animation-delay: 2.1s, 480ms;
}animation-iteration-count 重复次数
animation-iteration-count 属性用于设置动画序列在停止前应播放的次数。
div {
/* 关键字值 */
animation-iteration-count: infinite; /* 无限循环播放动画 */
/* 数字值 */
animation-iteration-count: 3; /* 3 次 */
animation-iteration-count: 2.4; /* 2.4 次 */
/* 多个值 */
animation-iteration-count: 2, 0, infinite;
}animation-direction 动画方向
animation-direction 属性用于设置动画是应正向播放、反向播放还是在正向和反向之间交替播放。
div {
/* 单个动画 */
animation-direction: normal;
animation-direction: reverse;
animation-direction: alternate;
animation-direction: alternate-reverse;
/* 多个动画 */
animation-direction: normal, reverse;
animation-direction: alternate, reverse, normal;
}取值
normal: 动画在每个循环中正向播放。换句话说,每次动画循环时,动画将重置为起始状态并重新开始。这是默认值。reverse: 动画在每个循环中反向播放。换句话说,每次动画循环时,动画将重置为结束状态并重新开始。动画步骤将反向执行,并且时间函数也将被反转。例如,ease-in 时间函数变为 ease-out。alternate: 动画在每个循环中正反交替播放,第一次迭代是正向播放。确定循环是奇数还是偶数的计数从 1 开始。alternate-reverse: 动画在每个循环中正反交替播放,第一次迭代是反向播放。确定循环是奇数还是偶数的计数从 1 开始。
animation-fill-mode 动画填充模式
animation-fill-mode 属性用于设置 CSS 动画在执行之前和之后如何将样式应用于其目标。
div {
animation-fill-mode: none;
animation-fill-mode: forwards;
animation-fill-mode: backwards;
animation-fill-mode: both;
}none: 当动画未执行时,动画将不会将任何样式应用于目标,而是已经赋予给该元素的 CSS 规则来显示该元素。这是默认值。forwards: 目标将保留由执行期间遇到的最后一个关键帧 (en-US)计算值。backwards: 动画将在应用于目标时立即应用第一个关键帧中定义的值,并在 animation-delay 期间保留此值。both: 动画将遵循 forwards 和 backwards 的规则,从而在两个方向上扩展动画属性。
animation-play-state 动画播放状态
animation-play-state 属性用于设置动画是运行还是暂停。
div {
/* 单个动画 */
animation-play-state: running; /* 运行 */
animation-play-state: paused; /* 停止 */
/* 多个动画 */
animation-play-state: paused, running, running;
}