你有用过animation-fill-mode属性吗?它有什么应用场景?

animation-fill-mode 属性详解及应用场景

animation-fill-mode 是 CSS 动画中一个非常有用的属性,用于控制动画结束后,元素的最终状态。默认情况下,当 CSS 动画执行完毕后,元素会返回到其原始状态,而 animation-fill-mode 允许你改变这一行为,使得动画结束时元素保持某一特定状态,或者更准确地说,是根据不同的值,控制动画的前后状态。

animation-fill-mode 属性值

animation-fill-mode 有四个可选的值:

  • none (默认值)
  • forwards
  • backwards
  • both

1. none

这是 animation-fill-mode 的默认值。当动画执行完毕后,元素会恢复到它在动画开始前的状态。换句话说,动画结束后,元素不受影响。

css 复制代码
@keyframes example {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

.element {
  animation: example 2s;
}

在这个例子中,.element 的透明度会在动画执行时从 0 变为 1,但动画结束后它会恢复到透明度为 0 的状态。

2. forwards

forwards 使得元素在动画结束后,保持动画结束时的状态,即元素会保持动画结束时的样式。

css 复制代码
@keyframes example {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

.element {
  animation: example 2s forwards;
}

在这个例子中,.element 会从透明变为不透明,并且在动画结束后会保持不透明的状态,而不会恢复到透明状态。

3. backwards

backwards 让元素在动画开始前立即应用动画的初始状态,甚至在动画开始之前。通常配合延时动画使用,可以在动画开始前就表现出某种状态。

css 复制代码
@keyframes example {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

.element {
  animation: example 2s backwards;
}

在这个例子中,即使动画尚未开始,.element 在页面加载时会立即变为透明,直到动画开始。它会在动画开始后逐渐变得不透明。

4. both

bothforwardsbackwards 的组合,意味着元素会在动画开始前立即应用动画的初始状态,并在动画结束后保持动画结束时的状态。

css 复制代码
@keyframes example {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

.element {
  animation: example 2s both;
}

在这个例子中,.element 会在动画开始前变为透明,然后在动画结束后保持不透明的状态。

animation-fill-mode 的实际应用场景

1. 创建过渡效果

当需要在动画结束时保持某种样式时,animation-fill-mode: forwards 是非常有用的。例如,想要在页面加载时显示一个淡入效果,动画完成后保持显示的状态。

css 复制代码
@keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

.element {
  animation: fadeIn 2s forwards;
}

此时,元素会渐渐变得不透明,且保持该状态,而不会恢复到最初的透明状态。

2. 持久化动画效果

在许多场景中,动画不仅仅是为了让用户注意到某个元素,还希望元素在动画结束后持续某种效果。例如,当一个按钮点击后,它变得不可点击,可以通过 animation-fill-mode: forwards 来实现,确保动画结束后,元素仍然保持禁用状态。

css 复制代码
@keyframes disableButton {
  from {
    background-color: blue;
  }
  to {
    background-color: gray;
  }
}

button:disabled {
  animation: disableButton 0.5s forwards;
}

此时按钮变为灰色并且保持该状态,用户将无法再次点击。

3. 页面加载时的延迟效果

有时你可能希望元素在页面加载时立即显示动画的初始状态,再等待一定的延迟后开始执行动画。animation-fill-mode: backwards 可以很方便地实现这种效果。

css 复制代码
@keyframes slideIn {
  from {
    transform: translateX(-100%);
  }
  to {
    transform: translateX(0);
  }
}

.element {
  animation: slideIn 2s backwards;
  animation-delay: 1s;
}

在这个例子中,元素在页面加载时会立即位移到屏幕外,等待 1 秒后再进行动画,最后回到正常位置。

4. 触发交互动画效果

animation-fill-mode: both 可以用于交互式动画,例如当用户触发某个事件时,元素可能会有一个过渡效果,并在动画结束后保持某个状态。例如,点击一个按钮时,按钮的背景色改变,并保持该状态,直到页面被刷新或用户进行其他操作。

css 复制代码
@keyframes clickEffect {
  from {
    background-color: red;
  }
  to {
    background-color: green;
  }
}

button:active {
  animation: clickEffect 0.3s both;
}

通过 animation-fill-mode: both,按钮点击后,背景色会变化并保持绿色,直到用户的下一次交互。

总结

animation-fill-mode 是控制 CSS 动画的一个强大工具,通过控制动画结束后元素的样式,可以帮助开发者实现更加流畅和细致的动画效果。无论是保持动画结束后的状态,还是在动画开始前立即应用某种状态,animation-fill-mode 都为 CSS 动画提供了更高的灵活性。正确使用该属性,可以让前端动画效果更具交互性和表现力,提升用户体验。

相关推荐
再学一点就睡2 分钟前
多端单点登录(SSO)实战:从架构设计到代码实现
前端·架构
繁依Fanyi3 分钟前
思维脑图转时间轴线
前端
发愤图强的羔羊6 分钟前
Chartdb 解析数据库 DDL:从 SQL 脚本到可视化数据模型的实现之道
前端
摸着石头过河的石头10 分钟前
控制反转 (IoC) 是什么?用代码例子轻松理解
前端·javascript·设计模式
携欢1 小时前
PortSwigger靶场之Stored XSS into HTML context with nothing encoded通关秘籍
前端·xss
和雍1 小时前
webpack5 创建一个 模块需要几步?
javascript·面试·webpack
百锦再1 小时前
每天两小时学习three.js
开发语言·javascript·学习·3d·three·2d·gbl
小桥风满袖1 小时前
极简三分钟ES6 - const声明
前端·javascript
小小前端记录日常1 小时前
vue3 excelExport 导出封装
前端
南北是北北1 小时前
Flow 的 emit 与 tryEmit :它们出现在哪些类型、背压/缓存语义、何时用谁、常见坑
前端·面试