应统一在初始态定义 opacity 和 transform 的 transition,共用相同 easing 函数与时间值,避免 layout 触发、父级截断合成层,并合理使用 will-change 提示 GPU 加速。
当同时对 opacity 和 transform(如 scale)设置 transition 时出现卡顿、不连贯,通常不是因为属性冲突,而是浏览器渲染机制和过渡触发条件没配好。
分开写或写在不同状态(比如 hover 和初始态)中容易导致过渡链断裂:
transition: opacity 0.3s,hover 里再加 transitio
n: transform 0.3s
示例:
.box {
opacity: 1;
transform: scale(1);
transition: opacity 0.3s ease, transform 0.3s ease;
}
.box:hover {
opacity: 0.6;
transform: scale(0.95);
}
transform 和 opacity 本可走合成层(compositor layer),但若元素受其他属性影响(如 width、height、top/left 等),可能强制回退到主线程重排,导致掉帧。
transform 和 left/top 或盒模型属性will-change: transform, opacity 提前提示合成(仅用于复杂动画,勿滥用)即使都写 0.3s,若一个用 ease、一个用 linear,视觉上会感觉“不同步”。尤其缩放和透明度变化速率不匹配时更明显。
cubic-bezier(0.25, 0.46, 0.45, 0.94)
300ms 和 0.3s 混用(虽等价,但可读性和一致性差)父容器若设置了 overflow: hidden 或 transform: translateZ(0) 等,可能截断子元素的合成层提升,导致 opacity + transform 动画降级为软件渲染。
overflow 或 transform 测试是否改善transform: translateZ(0) 强制新建合成层(注意不要过度嵌套)