Less本身不提供自动补全私有属性能力,所谓“自动补全”必须由PostCSS Autoprefixer在CSS输出阶段完成;在Less层用Mixin手动模拟前缀是过时且高风险的做法。
Less 本身不提供“自动补全私有属性”的能力,所谓“自动补全”必须交由 PostCSS Autoprefixer 在 CSS 输出阶段完成;在 Less 层用 Mixin 手动模拟前缀,是过时且高风险的做法。
.flex-center() 这类带参数的 Mixin 容易翻车常见错误现象:display: flex 被输出为 display: -webkit-flex; display: -ms-flexbox; display: flex,但在 Chrome 102+ 中后两条前缀完全冗余,还可能干扰调试;更严重的是,gap 被加了 -webkit-gap,反而导致 Safari 15.6+ 拒绝解析。
@supports 也进不了编译逻辑-ms-)会和 IE10/11 的旧 flexbox 语法混淆,Autoprefixer 明确不转换这套语法.flex-center(@legacy: false) 就以为“已兼容”,实际 place-items 在 Safari 14.1 才支持,而对应前缀早已废弃postcss.config.js 配置错一条,autoprefixer 就等于没开Webpack 或 Vite 项目中,前缀是否生效,只取决于 PostCSS 流水线是否完整接通、配置是否精准匹配真实用户环境。
postcss-loader 必须紧接在 less-loader 之后、css-loader 之前,顺序错则 CSS 永远不会进 Autoprefixerbrowserslist 字符串不能混用逻辑,比如 "last 2 versions, not dead":前者含 IE11,后者又排除它,结果不可预测package.json 里就以为全局生效——Vite 只读 postcss.config.js,Webpack 需显式 requirenpx autoprefixer -b "> 1%, not dead" 的 -b 参数缺不得,否则默认只覆盖 IE10+@supports 降级兜底不是补前缀,而是对现代语法失效时提供可退可关的视觉 fallback。例如 clip-path 在 Android Browser 4.4 上完全不认,但加前缀也没用,只能换方案。
立即学习“前端免费学习笔记(深入)”;
@supports (clip-path: polygon(0 0)) 包裹标准写法,把 SVG clipPath 或 JS 降级逻辑留给运行时.grid-auto-fit() 示例里没加任何前缀,因为 grid-template-columns 的前缀早在 Safari 10.1 就被移除.flex-legacy(@ie11: true),并在注释里写明仅用于 target: "IE 11"
browserslist 同步更新——如果已放弃 IE11,@ie11-support 变量就得设为 false
最容易被忽略的一点:你写的 Mixin 是否还在被调用?很多项目保留着十年前的 .clearfix() 和 .inline-block(),它们不仅冗余,还会在现代浏览器里注入无意义的 zoom: 1 或 *display: inline。