CSS 属性animation-fill-mode 确定在执行之前和之后如何将样式应用于 CSS 动画的目标。
使用简写一次设置所有动画设置属性animation通常很方便。
属性值
CSS属性animation-fill-mode可以具有以下值之一:
none: 当动画未执行时,它不会将任何样式应用于目标。相反,该元素将根据任何其他现有的 CSS 规则显示。此行为代表默认设置。
forwards: 执行期间检测到的最终关键帧设置的计算值将保留在目标上。 animation-direction 和animation-iteration-count 的值决定最终的关键帧:
动画方向 | 动画迭代计数 | 遇到的最后一个关键帧 |
---|---|---|
normal | 偶数或奇数 | 100% 或 |
reverse | 偶数或奇数 | 0% 或从 |
alternate | 偶数 | 0% 或从 |
alternate | 奇数 | 100 % 或至 |
alternate-reverse | 偶数 | 100% 或至 |
alternate-reverse | 奇数 | 0% 或从 |
backwards : 一旦动画应用于目标时,它将应用第一个适当关键帧中指定的值,并在动画延迟期间保持这些值。动画方向值确定第一个适当的关键帧:
动画方向 | 第一个相关关键帧 |
---|---|
normal 或 alternate | 0% 或从 |
reverse 或 alternate-reverse | 100% 或至 |
both: 动画将遵循向前和向后方向的规则,有效地在两个方向上扩展动画属性。
注意:当在animation-*属性上指定多个逗号分隔值时,这些值将按照动画名称出现的顺序应用于动画。
语法
animation-fill-mode = <single-animation-fill-mode>#
<single-animation-fill-mode> = none | forwards | backwards | both;
适用范围
所有 HTML 元素,::before 和 ::after 伪元素。
CSS animation-fill-mode: backwards
以下示例演示animation-fill-mode。
在给定的 CSS 示例中,animation-fill-mode 属性设置为backwards .
当 .animation-demo 元素悬停在上方时,会触发生长动画。
它会放大圆圈超过1秒。 animation-fill-mode:backwards 属性确保当悬停状态结束时,元素在动画开始之前保留其初始状态。
<html>
<head>
<style>
.animation-demo {
width: 200px;
height: 200px;
margin-left: 150px;
margin-top: 150px;
background-color: #2799db;
border-radius: 50%;
display: flex;
justify-content: center;
align-items: center;
color: white;
font-size: 20px;
transition: all 1s ease;
}
@keyframes grow {
0% {
transform: scale(1);
}
100% {
transform: scale(1.5);
}
}
.animation-demo:hover {
animation-name: grow;
animation-duration: 1s;
animation-fill-mode: backwards;
}
</style>
</head>
<body>
<div class="animation-demo">鼠标放上去看效果!</div>
</body>
</html>
CSS animation-fill-mode: forwards
以下示例演示animation-fill-mode。
在此示例中,animation-fill-mode:forwards;应用于初始动画,以确保动画完成后元素保留其最终状态(完全可见)。
当鼠标指针悬停在元素上时,由于在使用animation-fill-mode:forwards;悬停时分配了单独的动画,动画会反转,从而保持最终状态,以便即使在悬停动画完成后,元素仍保持在其最终位置。
此属性保留元素的视觉状态,无论是在动画之后还是在悬停动画之后,使事物看起来相同,而不会回到之前的状态。
<html>
<head>
<style>
@keyframes slidein {
from {
margin-left: 100%;
width: 300%;
}
to {
margin-left: 0%;
width: 100%;
}
}
@keyframes slideback {
from {
margin-left: 0%;
width: 100%;
}
to {
margin-left: 100%;
width: 300%;
}
}
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation-name: slidein;
animation-duration: 6s;
animation-fill-mode: forwards;
font-size: 20px;
color: white;
}
div:hover {
animation-name: slideback;
animation-duration: 6s;
animation-fill-mode: forwards;
}
</style>
</head>
<body>
<div>鼠标放上去看效果!</div>
</body>
</html>