不需要了。截至2026年,transition在所有主流浏览器中已完全标准化,仅Safari ≤12.1需-webkit-transition,而当前用户基本使用Safari 15+,可安全省略前缀。

transition 是否还需要写 -webkit-、-moz- 等前缀?
不需要了。截至 2026 年,transition 在所有主流浏览器(Chrome、Firefox、Safari、Edge、Opera)中已完全标准化,无需任何厂商前缀。
唯一例外是 Safari ≤ 12.1(发布于 2019 年初),它仍要求 -webkit-transition;但 Safari 13+(2019 年 9 月起)已原生支持标准语法。当前 macOS 和 iOS 用户基本都已升级到 Safari 15+ 或更高版本,可安全省略前缀。
哪些 transition 相关属性曾需要前缀?
历史上,以下属性在旧版浏览器中需加前缀:
-
-webkit-transition:Chrome ≤ 25、Safari ≤ 12.1、iOS Safari ≤ 12.1 -
-moz-transition:Firefox ≤ 15(2012 年后即废弃) -
-o-transition:Opera ≤ 12.1(Presto 内核时代,2013 年后转为 Blink) -
-ms-transition:IE 10–11 支持标准transition,但 IE 9 及更早版本根本不支持该特性,加前缀也无效
现在写 transition 即可,连 -webkit- 都不必再配 —— 除非你明确要兼容 2019 年前的 iOS 设备或极少数未更新的旧系统。
立即学习“前端免费学习笔记(深入)”;
为什么有人还在写 -webkit-transition?
常见原因有三个:
- 沿用老项目遗留代码,没人清理
- 用自动化工具(如 Autoprefixer)配置了过宽的目标浏览器范围(例如仍包含
ios_saf ) - 误以为“加了更保险”,但实际会增加 CSS 体积、干扰开发者阅读,且现代浏览器会忽略不认识的前缀属性
Autoprefixer 默认目标(defaults 或 last 2 versions)已不生成 -webkit-transition;若看到它被自动注入,说明配置里写了类似 ios_saf 12 这样的旧版本。
transition 简写时容易漏掉的坑
即使不写前缀,transition 本身也常因书写不当失效:
- 把
transition写在:hover选择器里:移出时无过渡,因为初始状态没定义transition - 省略时间单位:如
transition: opacity 300;❌,必须写300ms或0.3s - 用
all做transition-property:可能意外触发布局抖动(如width+height同时变),建议显式列出要过渡的属性 - 延迟值为负数(
transition-delay: -0.2s):合法但难调试,慎用
真正要关心的不是前缀,而是 transition 的触发时机、属性粒度和性能影响 —— 这些比加不加 -webkit- 关键得多。


















