标准答案

  1. transition 和 animation 都能做 CSS 动画,但触发方式和表达能力不同。
  2. transition 是两个状态之间的过渡,必须有属性值变化触发,比如 hover、class 切换或媒体查询变化。
  3. animation 基于 @keyframes,可以定义多个关键帧、循环次数、方向、延迟、暂停和填充模式,也可以页面加载后自动运行。
  4. 简单状态变化用 transition,比如按钮 hover、弹窗显隐、菜单展开;复杂时间轴或循环动画用 animation,比如 loading、骨架屏闪烁。
  5. 无论用哪种,都优先动画 transform 和 opacity,谨慎动画 width、height、top、left、box-shadow。

题目解析

transition 关注“两个状态之间怎么过渡”,animation 关注“按时间轴怎么播放”。

如果动画需要暂停、循环、反向、多关键帧,animation 更合适;如果只是 class 切换后的平滑过渡,transition 更简单。

代码示例

按钮 hover 用 transition,加载点用 animation。

CSS
.button {
  transition: background-color 160ms ease, transform 160ms ease;
}

.button:hover {
  transform: translateY(-1px);
}

@keyframes pulse {
  0%, 100% { opacity: 0.4; }
  50% { opacity: 1; }
}

.loading-dot {
  animation: pulse 1s infinite;
}

常见误区

  • 用 animation 处理简单 hover,代码复杂且不易维护。
  • 用 transition 处理循环 loading,触发条件不自然。
  • 动画 width、height 导致每帧布局变化。

作者信息