← CSS Transition · 状态间的隐式动画 / transition vs animation:什么时候用哪个 待审核 6 / 6
transition vs animation · 选型

transition vs animation:什么时候用哪个

两者都在做补间,边界其实很清楚。transition = 两状态之间、由状态变化触发、隐式、天生可逆;@keyframes animation = 多关键帧、可自动播放 / 循环 / 编排、显式。一句话:需要「响应交互、来回切换」用 transition;需要「自己动起来、循环或多步序列」用 animation。

1 · 同一个「放大」效果,两种写法

左:transition——只在你触发(按钮 / hover)时放大,放开就回去,不会自己动。右:animation——挂上去就自动循环脉冲,不需要任何触发。

2 · 对照表

维度 transition @keyframes animation
触发方式 属性值因状态改变而触发 挂上即按 animation-* 自动开始
关键帧 只有「旧值 → 新值」两端 任意多关键帧 + offset
循环 / 自动播放 不能 可 (infinite / 自动)
半路打断 天生平滑反向 撤销即跳回 / 重启
入场 / 出场 @starting-style + allow-discrete @keyframes + forwards 直接定义
典型场景 hover / focus / 展开收起 / 主题切换 loading / 循环装饰 / 入场序列编排

选型口诀:「两状态、要可逆、跟交互走」→ transition;「自己动、要循环、多步编排」→ animation。二者不互斥,常同页共用(交互反馈用 transition、循环装饰用 animation)。@keyframes 的八个 animation-* 子属性、scroll-driven、@starting-style 等完整能力见 CSS Animation 系列;两者底层都是「时间 → 值」的补间,把这套从零讲解的是 动画引擎原理系列

回到 transition 本身:它的可过渡性边界见可过渡性,曲线塑形见timing-function,进出场见入场与出场,可逆性见可打断