直接修改transition-duration值可提速过渡动画,本质是降低持续时间;需注意单位(s/ms)、避免简写遗漏、检查CSS优先级与JS覆盖、搭配缓动函数及选用硬件加速属性。
transition-duration 值就能提速过渡动画慢,本质是默认或当前设的持续时间太长。CSS 中控制快慢的核心就是 transition-duration,单位用 s(秒)或 ms(毫秒),数值越小越快。
常见误区是只调 transition 简写属性却漏掉时长,或者写了但单位写错(比如写成 0.3 没带单位,浏览器会忽略)。
transition-duration: 0.1s —— 适合微动效,如按钮 hover 的边框变化transition-duration: 200ms —— 和 0.2s 等价,更直观,推荐用 ms 避免小数点误差transition: all 0.3,缺单位 = 无效声明color 和 transform),要确保目标属性对应的 duration 明确匹配,否则会回退到默认值 0s
transition-duration 还没变快?优先级和覆盖关系常被忽略。即使你写了新 duration,也可能被其他规则盖掉:
.btn:hover 里写的 duration 被 .btn.active:hover 里的重置了)element.style.transitionDuration = '0.5s' 动态覆盖了 CSS 规则transition-duration 值,不是 Styles 面板里“划掉”的那行transition: background-color 0.4s, transform 0.2s 这种多属性写法,单独改某一个 duration 必须重写整条 transition,不能只改简写中的某个值transition-timing-function 让快感更自然光缩小时长不一定够——生硬的线性加速(linear)反而显得卡顿。合理选缓动函数能让“快”更舒服:
ease-out:开头快、结尾慢,适合鼠标移出时收尾柔和(如菜单收起)ease-in:开头慢、结尾快,适合强调“弹出感”(如 tooltip 出现)cubic-bezier(0.2, 0.8, 0.4, 1):自定义曲线,比 ease 更轻快,适合现代 UIlinear,除非做精确时间控制(如进度条)button {
transition: background-color 150ms ease-out, transform 120ms cubic-bezier(0.2, 0.8, 0.4, 1);
}
再小的 transition-duration,如果触发动画的属性引发 layout(重排),比如改 width、height、top,实际帧率可能暴跌,看起来还是慢。
transform(translate / scale / rotate)、opacity
margin、padding、left 做 transition,哪怕 duration 设成 50ms 也卡will-change: transform 可提前提示浏览器优化,但别滥用(会增加内存开销)
lashing”,看动画过程是否有意外重绘