CSS 特效 词条目录
前端Wiki/CSS 特效/基础/关键帧动画

动画性能优化

动画做多了页面会卡。秘诀是只动画“合成属性”:transform 和 opacity——它们在 GPU 合成层处理,不触发布局重排;而动画 width、top、box-shadow 会触发重排/重绘,掉帧明显。

另一个性能手段是 will-change: transform,提前告诉浏览器“这个元素要变形”,浏览器会为它开独立合成层。但也别滥用:层太多反而占显存。手机上还要尊重用户的“减少动态”偏好。

  • 只动 transform / opacity,不动 width/top/left
  • box-shadow 动画昂贵:可用伪元素 opacity 切换模拟
  • 用 @media (prefers-reduced-motion: reduce) 关闭动画照顾敏感用户
  • will-change 是“预告”,用完(动画结束)应移除
HTML
<style>
/* 反面:动 width -> 重排,卡 */
.bad { width: 100px; height: 40px; background: #e5534b;
       transition: width 1s; }
.bad:hover { width: 300px; }

/* 正面:动 transform -> 合成层,流畅 */
.good { width: 100px; height: 40px; background: #4a9eff;
        transition: transform 1s; will-change: transform; }
.good:hover { transform: scaleX(3); transform-origin: left; }

_wrap { display: flex; flex-direction: column; gap: 12px; padding: 24px; }

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}
</style>
<div class="_wrap">
  <div class="bad"></div>
  <div class="good"></div>
</div>
本节要点只动 transform/opacity(GPU 合成);box-shadow/top/width 触发重排;照顾 prefers-reduced-motion。