动画结束后元素消失是因为默认 animation-fill-mode: none,导致恢复原始样式;使用 animation-fill-mode: forwards 可保持最后一帧状态,需配合 keyframes 中明确的 100% 样式定义,并注意 display/visibility 等属性干扰。
动画结束后元素突然消失,通常是因为 CSS 动画默认不会保留最后一帧的样式。解决方法是用 animation-fill-mode 控制动画前后应用的样式,尤其是让结束状态“停留”住。
默认情况下,CSS 动画只在执行期间生效(animation-fill-mode: none)。一旦动画完成,元素会立刻恢复到动画开始前的原始样式——比如 opacity: 0、tran 或
sform: scale(0)display: none 等,看起来就像“消失了”。这不是 bug,而是默认行为。
animation-fill-mode: forwards 保持结束状态这是最常用也最直接的解法。它会让动画最后一帧的样式持续作用于元素,直到被其他样式覆盖或元素被移除。
@keyframes 中定义了明确的最终状态(例如 100% { opacity: 1; transform: translateX(100px); })animation-fill-mode: forwards;
animation 简写属性一起使用,避免被覆盖:animation: slideIn 0.4s ease-out forwards;
单独设 forwards 不一定总能“显形”,还需检查是否被其他样式干扰:
display 覆盖动画效果:如果动画前设置了 display: none,即使 opacity 变为 1,元素仍不可见。改用 visibility: hidden + opacity: 0 更安全opacity,但父容器有 visibility: hidden,子元素依然不可见animation-direction: alternate 意外回退:如需保持终态,请搭配 animation-iteration-count: 1 和 forwards
虽然 forwards 是主力,但了解其他值有助于调试:
backwards:动画开始前(延迟期间)就应用 0% 的样式both:等价于 backwards forwards,兼顾首尾帧none:默认值,不保留任何帧,动画一停就还原