CSS中的animation-fill-mode属性详解
字数 2007 2025-12-13 21:01:26

CSS中的animation-fill-mode属性详解

一、属性描述
animation-fill-mode 是CSS动画的一个关键属性,它控制动画在执行之前之后如何将样式应用到目标元素。默认情况下,CSS动画在播放前不会影响元素样式,播放结束后会立即移除所有动画样式。animation-fill-mode 允许你改变这种默认行为,确保元素在动画延迟期间或动画结束后保持特定的状态。

二、属性值详解
该属性有四个可能的值:

  1. none(默认值)

    • 动画在执行不会将任何关键帧样式应用到元素。
    • 动画执行,元素会立即恢复到动画前的原始样式。
    • 元素仅在动画执行期间(从开始到结束的持续时间内)应用关键帧样式。
  2. forwards

    • 动画执行,元素将保持最后一个关键帧的样式(由animation-directionanimation-iteration-count决定具体是哪个关键帧)。
    • 动画执行,行为与none相同,不会应用初始关键帧样式。
  3. backwards

    • 动画执行,元素立即应用第一个关键帧的样式(由animation-direction决定),并在动画延迟期间保持此样式。
    • 动画执行,元素会立即恢复到动画前的原始样式。
  4. both

    • 结合了forwardsbackwards的效果。
    • 动画执行,应用第一个关键帧的样式(在延迟期间保持)。
    • 动画执行,保持最后一个关键帧的样式。

三、关键概念与注意事项

  1. “第一个”和“最后一个”关键帧的定义
    这取决于animation-direction属性:

    • animation-direction: normalalternate(且迭代次数为奇数)时,0%from是关键帧是第一个,100%to是关键帧是最后一个。
    • animation-direction: reversealternate-reverse(且迭代次数为奇数)时,100%是关键帧是第一个,0%是关键帧是最后一个。
    • alternate模式下,如果迭代次数是偶数,则“最后一个”关键帧是0%
  2. animation-delay的配合
    backwardsboth在延迟期间就应用第一关键帧样式,这对于实现“入场前准备”效果非常有用。

  3. animation-iteration-count: infinite的互动
    当动画设置为无限循环时,forwardsboth在逻辑上没有意义(因为动画永不结束),因此它们的行为将与none相同。但backwards在延迟期间的应用仍然有效。

四、实战示例与步骤解析

假设我们有一个简单的方形元素和一个淡入并右移的动画:

.box {
  width: 100px;
  height: 100px;
  background-color: blue;
  /* 初始状态:不透明,位置在左侧 */
  opacity: 1;
  transform: translateX(0);
  /* 定义动画:持续2秒,延迟1秒开始,只播放一次 */
  animation-name: slideAndFade;
  animation-duration: 2s;
  animation-delay: 1s;
  animation-iteration-count: 1;
}

@keyframes slideAndFade {
  0% {
    opacity: 0;
    transform: translateX(-50px);
  }
  100% {
    opacity: 1;
    transform: translateX(50px);
  }
}

步骤1:使用默认值 none

  • 动画前(延迟1秒期间):元素保持蓝色,位于原位(opacity: 1, transform: translateX(0))。
  • 动画中(第1-3秒):从完全透明且左移50px开始,逐渐变为不透明并右移50px。
  • 动画后(3秒后):元素立即跳回蓝色,位于原位。动画效果完全消失。

步骤2:使用 forwards

  • 动画前:同none,保持原始样式。
  • 动画中:同上。
  • 动画后:元素保持100%关键帧的样式:不透明(opacity: 1),且位于右移50px的位置。它不会跳回原位。

步骤3:使用 backwards

  • 动画前:在1秒延迟期间,元素立即应用0%关键帧的样式:完全透明(opacity: 0)且左移50px。视觉上元素“消失”并左移。
  • 动画中:从透明左移状态开始,动画到不透明右移状态。
  • 动画后:动画结束,元素立即跳回原始的蓝色原位。

步骤4:使用 both

  • 动画前:在延迟期间,应用0%关键帧样式(透明左移)。
  • 动画中:正常播放。
  • 动画后:保持100%关键帧样式(不透明右移)。这是最符合直觉的“淡入右移并停留”效果。

五、核心应用场景总结

  1. 保持动画结束状态 (forwards): 制作元素动画后停留在最终位置/状态的场景,如模态框弹出后保持显示。
  2. 预填充动画开始状态 (backwards): 实现动画开始前元素就处于“准备状态”,尤其在有延迟时避免元素“闪动”到初始位置。
  3. 无缝衔接状态 (both): 最常用的场景之一,确保动画在延迟前就有起始状态,结束后又保留最终状态,实现流畅的“状态切换”。

六、记忆技巧
可以这样理解:forwards是“向前看”,关注动画之后的状态;backwards是“向后看”,关注动画之前的状态;both是“前后都看”;none是“前后都不看”,只管播放期间。

CSS中的animation-fill-mode属性详解 一、属性描述 animation-fill-mode 是CSS动画的一个关键属性,它控制动画在执行 之前 和 之后 如何将样式应用到目标元素。默认情况下,CSS动画在播放前不会影响元素样式,播放结束后会立即移除所有动画样式。 animation-fill-mode 允许你改变这种默认行为,确保元素在动画延迟期间或动画结束后保持特定的状态。 二、属性值详解 该属性有四个可能的值: none (默认值) 动画在执行 前 不会将任何关键帧样式应用到元素。 动画执行 后 ,元素会立即恢复到动画前的原始样式。 元素仅在动画执行期间(从开始到结束的持续时间内)应用关键帧样式。 forwards 动画执行 后 ,元素将保持 最后一个关键帧 的样式(由 animation-direction 和 animation-iteration-count 决定具体是哪个关键帧)。 动画执行 前 ,行为与 none 相同,不会应用初始关键帧样式。 backwards 动画执行 前 ,元素立即应用 第一个关键帧 的样式(由 animation-direction 决定),并在动画延迟期间保持此样式。 动画执行 后 ,元素会立即恢复到动画前的原始样式。 both 结合了 forwards 和 backwards 的效果。 动画执行 前 ,应用第一个关键帧的样式(在延迟期间保持)。 动画执行 后 ,保持最后一个关键帧的样式。 三、关键概念与注意事项 “第一个”和“最后一个”关键帧的定义 这取决于 animation-direction 属性: 当 animation-direction: normal 或 alternate (且迭代次数为奇数)时, 0% 或 from 是关键帧是第一个, 100% 或 to 是关键帧是最后一个。 当 animation-direction: reverse 或 alternate-reverse (且迭代次数为奇数)时, 100% 是关键帧是第一个, 0% 是关键帧是最后一个。 在 alternate 模式下,如果迭代次数是偶数,则“最后一个”关键帧是 0% 。 与 animation-delay 的配合 backwards 和 both 在延迟期间就应用第一关键帧样式,这对于实现“入场前准备”效果非常有用。 与 animation-iteration-count: infinite 的互动 当动画设置为无限循环时, forwards 和 both 在逻辑上没有意义(因为动画永不结束),因此它们的行为将与 none 相同。但 backwards 在延迟期间的应用仍然有效。 四、实战示例与步骤解析 假设我们有一个简单的方形元素和一个淡入并右移的动画: 步骤1:使用默认值 none 动画前(延迟1秒期间) :元素保持蓝色,位于原位( opacity: 1, transform: translateX(0) )。 动画中(第1-3秒) :从完全透明且左移50px开始,逐渐变为不透明并右移50px。 动画后(3秒后) :元素立即跳回蓝色,位于原位。动画效果完全消失。 步骤2:使用 forwards 动画前 :同 none ,保持原始样式。 动画中 :同上。 动画后 :元素 保持 100% 关键帧的样式:不透明( opacity: 1 ),且位于右移50px的位置。它不会跳回原位。 步骤3:使用 backwards 动画前 :在1秒延迟期间,元素 立即应用 0% 关键帧的样式:完全透明( opacity: 0 )且左移50px。视觉上元素“消失”并左移。 动画中 :从透明左移状态开始,动画到不透明右移状态。 动画后 :动画结束,元素立即跳回原始的蓝色原位。 步骤4:使用 both 动画前 :在延迟期间,应用 0% 关键帧样式(透明左移)。 动画中 :正常播放。 动画后 :保持 100% 关键帧样式(不透明右移)。这是最符合直觉的“淡入右移并停留”效果。 五、核心应用场景总结 保持动画结束状态 ( forwards ): 制作元素动画后停留在最终位置/状态的场景,如模态框弹出后保持显示。 预填充动画开始状态 ( backwards ): 实现动画开始前元素就处于“准备状态”,尤其在有延迟时避免元素“闪动”到初始位置。 无缝衔接状态 ( both ): 最常用的场景之一,确保动画在延迟前就有起始状态,结束后又保留最终状态,实现流畅的“状态切换”。 六、记忆技巧 可以这样理解: forwards 是“向前看”,关注动画 之后 的状态; backwards 是“向后看”,关注动画 之前 的状态; both 是“前后都看”; none 是“前后都不看”,只管播放期间。