less 4.x 中除法必须用(100px / 4)或100px ./ 4,裸露/被原样输出导致样式失效;math和strictmath配置对除法无影响。

Less 4.x 中根本没有“全新除法语法”,只有两种明确、强制的写法:括号包裹或 ./。这不是风格选择,而是编译器硬编码规则——漏掉一个括号,样式就静默失效。
为什么100px / 4编译后不生效
Less 4.x 把所有裸露的 / 当作 CSS 字面量原样输出,不参与计算。浏览器收到 width: 100px / 4; 会直接忽略该声明,DevTools 里显示为灰色无效样式,且构建过程零报错。
-
line-height: 20px / 16px;→ 输出仍是line-height: 20px / 16px;,行高不生效 -
@size: 16px / 2;→ 变量值变成字符串"16px / 2",后续引用全崩 - VS Code 的 Easy Less 插件(1.7.0+)也遵循此规则,不会自动补括号
必须用的两种写法:(100px / 4) 或 100px ./ 4
二者语义等价,但细节影响可维护性:
-
(100px / 4)是首选:支持嵌套单位(如(2rem / 2)),可读性强,和calc()风格一致 -
100px ./ 4是 Less 特有语法:./必须与左右操作数各有一个空格;100px./4或100px . / 4都会解析失败 - 反例:
(100 / 4)px报Operation on an invalid type;100 / 4px单位位置错,结果不可预期
math 和 strictMath 配置完全不管除法
别再配 math: "always" 或 strictMath: true 来“修复”除法——它们对 / 是否执行计算毫无影响:
-
math: 1或math: 2仅在构建层起提示作用,不改变底层行为;math: "always"在 4.x 中被静默忽略 -
strictMath只控制无单位数值能否参与加减(如10px + 5),对100px / 4完全无效 - Vite 中写
css.preprocessorOptions.less.math = "always"无效;Webpackless-loader传{ math: 'always' }等同于没写
真正容易被忽略的是:这个规则由 Less 4.x 编译器底层硬编码,不经过任何配置项,也不随构建工具变化。你得手动检查生成的 CSS 文件,或用工具扫描含 / 的声明行,确认是否被原样输出——否则某个组件高度塌陷,可能一整天都查不出原因。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











