autoprefixer比Sass @mixin更靠谱,因其基于Can I Use数据自动、精准、可配置地添加厂商前缀,避免手动维护成本高、易遗漏、不随浏览器演进等问题。
autoprefixer 为什么比 Sass @mixin 更靠谱
直接说结论:用
手动写厂商前缀(比如
)已经过时了,维护成本高、容易漏、不随浏览器演进自动更新。真正省心的方式是用
—— 它在 CSS 编译后阶段自动加前缀,规则来自 Can I Use 数据,精准且可配置。
常见错误现象:
里硬编码
和
,结果 Chrome 100+ 早就不需要这些了,反而让 CSS 变臃肿;更糟的是,新出的
或
根本没覆盖到。
使用场景:现代项目(Webpack/Vite/PostCSS 构建链)中,
应作为 PostCSS 插件运行,而非 Sass 层干预
参数差异:
配置决定加哪些前缀(如
),比手动
的
参数可靠得多
性能影响:Sass 编译时插前缀 → 每次
都重复生成相同代码;
一次扫描全文件,去重 + 智能裁剪
Sass @mixin 写前缀的典型翻车点
不是不能用,而是很容易掉坑里。比如写一个
,以为传个属性和时间就能搞定,实际漏掉 Safari 对
的老前缀,或 Edge 对
的特殊处理。
错误示例:
—— 这里
只加在第一个声明,第二个没前缀,IE/旧 Safari 直接失效。
立即学习
“
前端免费学习笔记(深入)
”;
兼容性影响:不同属性所需前缀完全不同(
要
+
,
只需
,
则基本不加)
维护成本:每次升级浏览器支持列表,都得手动改一堆
,而
只需更新
无法覆盖动态值:Sass 无法判断
最终是否为
,所以不敢乱加前缀;
是解析最终 CSS 字符串,准确率高
如果非要用 Sass @mixin,至少守住这三条线
有些遗留项目没法立刻切 PostCSS,那至少别让
成为技术债放大器。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
只封装明确已知需前缀的固定组合,比如
—— 不做泛化参数
所有前缀声明必须成对出现:每个标准属性前,都补全对应厂商版本,顺序按
→
→
→ 标准版排列
绝对不用
处理带函数的值,比如
或
—— 这些前缀规则复杂且浏览器差异大,交给
示例安全写法:
—— 这类纯布局 hack 不涉及厂商前缀,放心用。
构建流程里 autoprefixer 怎么塞进去
不是装个包就完事。关键看它是否真在 CSS 输出前执行,以及是否读取了正确的
。
常见错误:Vite 项目里只装了
,但没配
,结果
后的 CSS 依然没前缀;或者
写着
,导致连 iOS Safari 15 都被忽略。
检查点:运行
看当前生效的浏览器范围
Vite 用户:确保
中
包含
(Vite 4.0+ 默认内置,但可能被其他插件覆盖)
Webpack 用户:确认
配置里
包含
,且位置在
之前(否则压缩后才加前缀,无效)
真正麻烦的从来不是加前缀这件事本身,而是搞不清「谁在什么时候、依据什么规则」加的 —— 手动 mixin 让人猜,autoprefixer 让人查配置。
@mixinwebkit-transformautoprefixer@mixin flex-center-webkit-box-ms-flexboxgapaspect-ratioautoprefixerbrowserslist"> 1%, last 2 versions, not dead"@mixin$legacy: true@includeautoprefixer@mixin transitiontransformfilter@mixin transition($prop, $time) { transition: -webkit-#{$prop} #{$time}; transition: #{$prop} #{$time}; }-webkit-flex-webkit--ms-calc()-webkit-grid@mixinautoprefixerbrowserslist#{\$var}transformautoprefixer@mixin@mixin flexbox { display: -webkit-box; display: -ms-flexbox; display: flex; }-webkit--ms--moz-@mixinlinear-gradientclamp()autoprefixer@mixin clearfix { &::after { content: ""; display: table; clear: both; } }browserslistautoprefixerpostcss.config.jsbuild.browserslistrclast 1 versionnpx autoprefixer --infovite.config.jscss.postcss.pluginsrequire('autoprefixer')postcss-loaderpostcssOptions.pluginsautoprefixercssnano