will-change 参考

什么是 will-change?

will-change CSS 属性向浏览器提示哪些元素属性可能发生变化,使其提前进行优化准备,通常通过创建新的合成层来实现。

受益属性

属性受益程度说明
transform提升为合成层,启用 GPU 加速
opacity与 transform 相同,在合成线程处理
filter中高大多数浏览器支持 GPU 加速
clip-path可从层提升中受益
top/left/bottom/right会触发布局,改用 transform
width/height触发回流,无 GPU 收益
background-color绘制操作,收益微小
contents特殊提示将有较大变化,浏览器自选优化策略

应做 / 不应做

✓ 应该 在动画开始前通过 JS 应用
动画结束后移除
仅用于频繁动画的特定元素
用 DevTools 验证效果
✗ 不应该 对所有元素都使用——浪费内存
作为默认的性能修复方案
应用于 body 或 html 元素
动画很少时长期保留

代码示例

/* 静态 CSS — 仅用于持续动画的元素 */ .spinner { will-change: transform; animation: spin 1s linear infinite; } /* 动态(推荐)—— 动画前后添加/移除 */ .card:hover { will-change: transform; } .card { transition: transform 0.3s ease; }
// JS:动画前准备,完成后清理 element.style.willChange = 'transform, opacity'; element.addEventListener('transitionend', () => { element.style.willChange = 'auto'; }, { once: true });