贝利信息

css animation 属性详解_控制动画的持续时间与延迟

日期:2026-01-12 00:00 / 作者:P粉602998670
animation-duration 控制动画总时长,值越小越快,0s 直接跳终点;animation-delay 控制启动延迟,支持负值实现中途切入;二者在 animation 简写中须严格按序书写,且需注意 fill-mode、属性触发重排等实际影响。

animation-duration 控制动画跑多快

这个属性决定整个动画从开始到结束要花多少秒或毫秒,值越小动画越快,设为 0s 会直接跳到终点(不触发过渡)。

常见误区是把它和 transition-duration 混用——后者只作用于状态变化的瞬间,而 animation-duration 是绑定在 @keyframes 上的完整周期时长。

animation-delay 控制动画什么时候开始

animation-delay 是动画启动前的等待时间,可以是正值(延迟播放)、零值(立即开始),也能是负值(从动画中间某帧切入)。

负延迟不是“倒放”,而是让动画从第 -delay × 帧率 对应的位置开始。例如 animation-duration: 2sanimation-delay: -0.5s,就相当于跳过前 25% 的动画直接播放。

把 duration 和 delay 放进 animation 简写里要注意顺序

animation 是复合属性,语法顺序固定:animation: [name] [duration] [timing-function] [delay] [iteration-count] [direction] [fill-mode] [play-state];

漏掉中间某项会导致后续值被错位解析。比如写了 animation: slide 2s 1s;,浏览器会把 1s 当作 animation-timing-function(非法值),然后把 1s 再当一次 animation-delay,结果不可控。

动画未按预期延迟或卡顿的几个实际原因

即使 animation-delayanimation-duration 写对了,仍可能看起来“没延迟”或“卡一下才动”,这往往不是属性本身的问题。

典型诱因包括:

/* 推荐用 transform + opacity 做高性能动画 */
@keyframes fadeSlide {
  0% {
    opacity: 0;
    transform: translateY(20px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

真正难调的不是怎么写 duration 和 delay,而是判断该用哪个时机触发、要不要加 fill-mode、以及是否动到了会触发重排的属性。这些细节不看渲染原理,光靠查文档很难绕过去。