less 4.x 中除法必须加括号或写 ./,否则原样输出导致浏览器静默丢弃;math 配置失效,仅 math: 1/2 影响语法校验;升级时需重点修复变量、属性值、混入中的除法,统一用 (@value / 2) 兼容 3.x 和 4.x。

Less 4.x 中除法必须加括号或写 ./,否则直接失效
Less 4.x 把所有未包裹在括号里的 / 当作 CSS 字面量原样输出,width: 100px / 4 编译后仍是 width: 100px / 4;,浏览器静默丢弃该声明——控制台无报错、DevTools 里能看到这条非法规则被划掉。这不是配置能绕开的,是编译器硬编码行为。
唯一两种有效写法:
-
(100px / 4)—— 推荐,语义清晰,单位兼容好,支持嵌套如(2rem / 2) -
100px ./ 4—— 注意./前后都必须有空格;100px./4或100px ./4都会报错
反例:(100 / 4)px 报 Operation on an invalid type;100 / 4px 单位位置错,结果不可预期。
math 配置在 Less 4.x 中已基本失效
math: "always"、math: 0、math: "parens" 这些旧值在 Less 4.x 中会被静默忽略,等价于没配。真正只认整数 math: 1 或 math: 2,但它们不控制“是否执行除法”,只影响构建层是否允许解析无括号除法表达式:
-
math: 1:接受100px / 4是合法表达式,但依然不会计算,最终还是输出字面量 -
math: 2:强制报错100px / 4,倒逼你改写为(100px / 4)或100px ./ 4
Vite 中写 css.preprocessorOptions.less.math = "always" 无效;Webpack less-loader 传 { math: 'always' } 等同于没写。
Less 3 项目升级到 4.x 时最易漏掉的三类除法
升级时别只改变量和混入,重点扫以下三类写法,它们在 Less 3 下正常,在 4.x 下全崩:
- 变量定义:
@icon-size: 16px / 2;→ 变成字符串"16px / 2",后续引用全失效 - 属性值中带单位除法:
line-height: 20px / 16px;→ 输出line-height: 20px / 16px;,行高不生效 - 混合参数里用除法:
.btn(@size) { font-size: @size / 2; }→ 若调用时传入带单位值,结果变成字符串或报错
加减乘不受影响,但单位要匹配:10px + 2em 报错,10px * 2 正常;混合运算如 @a + @b / 2 即使 math: 1 也建议写成 @a + (@b / 2) 明确优先级。
如何让同一份 Less 代码同时跑在 Less 3 和 4.x 上
做不到完全兼容,但可最小化改造成本:
- 所有除法统一改用括号写法:
(@value / 2),它在 Less 3 和 4.x 下都生效 - 禁用
./写法——Less 3 不认识./,会直接报错 - 避免依赖
strictMath控制除法行为,它和除法无关,只管无单位数值参与运算(如10px + 5) - CI 或本地构建后,用脚本扫描生成的 CSS 文件,grep 含
/的行,确认没有出现在font、background之外的属性里
漏掉一个括号,可能让整个组件高度塌陷,而构建过程不报错、控制台无提示——你得手动检查生成的 CSS,或靠工具扫出异常 /。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











