opacity 动画会导致重排吗?怎么优化才不卡顿?
我给一个 div 加了 opacity 从 0 到 1 的过渡动画,但页面明显卡顿,是不是触发了重排?
查资料说 opacity 只触发合成,不会重排,但我用 Chrome DevTools 的 Performance 面板看,还是有大量 Paint 和 Composite 操作。我试过加 will-change: opacity,但没改善。
我的代码是这样的:
.fade-in {
opacity: 0;
transition: opacity 0.3s ease;
}
.fade-in.active {
opacity: 1;
}
问题可能出在这几个地方:
1. 你的div可能包含文字或子元素,浏览器在合成层变化时可能还是会触发部分repaint。试试给div加个空背景色:
2. 检查下父元素有没有奇怪的布局属性,比如flex/grid有时候会影响合成层行为
3. will-change不是万能药,用错位置反而更卡。试试改成这样:
另外建议用DevTools的Layers面板看下这个元素是否真的被提升到单独图层了,有时候浏览器优化策略会抽风。
如果还是卡,可能要考虑换用transform的scale动画来模拟淡入效果,那个性能更好些。