网页设计中,CSS动画让元素动起来变得轻而易举。比如一个按钮悬停时放大,或者一段文字淡入出现。但有时候,我们希望动画不仅能正着放,还能倒着播——比如鼠标移出时,不是直接跳回原状,而是平滑地“撤回去”。这种效果,其实靠CSS就能实现。
用 animation-direction 控制播放方向
CSS 提供了一个属性叫 animation-direction,专门用来控制动画的播放方向。它的值不止有默认的 normal,还有 reverse、alternate 和 alternate-reverse。
比如你想让一个元素的动画从头到尾再倒回来,可以这样写:
.box {
animation-name: slide;
animation-duration: 2s;
animation-iteration-count: infinite;
animation-direction: alternate;
}
@keyframes slide {
from { transform: translateX(0); }
to { transform: translateX(100px); }
}
这里的 alternate 就是关键:第一次正向播放,第二次就逆向播放,来回交替。如果你只想单纯倒着播一次,把 animation-direction 设成 reverse 就行。
实际场景:菜单收起动画
假设你做了一个侧边栏,鼠标移入时从左边滑出,移出时你想让它原路滑回去,而不是突然消失。这时候就可以利用逆向播放的思路。
给元素设置两个状态:
.sidebar {
transform: translateX(-200px);
transition: transform 0.3s ease-in-out;
}
.sidebar:hover {
transform: translateX(0);
}
虽然这里用了 transition,但原理类似:移入时正向动画,移出时自动反向执行,视觉上就是“倒带”效果。如果换成 @keyframes 动画,配合 animation-direction: reverse,也能手动控制某个时刻倒着播。
注意触发机制
纯 CSS 动画本身不会“自动倒放”,除非你改变类名或状态。比如点击按钮添加一个 .animate-back 类,然后定义另一个使用 reverse 方向的动画:
.element {
animation: fade 1s;
}
.element.animate-back {
animation-direction: reverse;
}
@keyframes fade {
from { opacity: 0; }
to { opacity: 1; }
}
这样一来,通过 JavaScript 切换类名,就能实现“正播→倒播”的完整流程。
所以,CSS动画不仅能逆向播放,而且方式灵活,关键是理解 animation-direction 的作用和如何结合交互状态来触发不同方向的动画。