Less 4 中 math 配置完全无效,因解析器硬编码除法行为:仅 (100px / 4) 或 100px ./ 4 可触发计算,其余 / 原样输出;单位混合运算需严格匹配,否则报错或静默失效。

Less 4 中根本不存在可配置的 math 选项,所有试图通过 math: "always" 或 math: 1 让除法自动执行的做法都会失效——编译器不会报错,但样式也不生效。
为什么math配置在Less 4中完全无效
Less 自 4.0.0 起已硬编码除法行为:只有显式用小括号包裹或使用 ./ 运算符时,才会执行数学除法;其余情况(如 100px / 4)原样输出为 CSS 字面量,浏览器直接忽略整条声明。
-
vite.config.ts中写css.preprocessorOptions.less.math = "always"→ 完全被忽略 -
webpack+less-loader传{ math: 'always' }→ 等同于没写 -
strictMath控制的是无单位数值参与加减时是否报错(如10px + 5),和除法是否计算无关 - 构建工具参数无法覆盖该规则,底层是 Less 解析器的语法层硬限制
必须手动写的两种合法除法写法
所有涉及 / 的地方,必须二选一,且不能省略任何符号细节:
-
width: (100px / 4);—— 推荐:语义清晰、支持嵌套(如(2rem / 2))、单位兼容性好 -
width: 100px ./ 4;——./是 Less 特有触发符,但左右必须有空格;100px./4或100px ./4(少空格)会直接报错 - 反例:
(100 / 4)px→ 报Operation on an invalid type;100px / 4px→ 单位不可约,同样报错
单位混合运算的常见踩坑点
加减乘虽不强制括号,但单位不匹配仍会导致编译失败或静默失效:
立即学习“前端免费学习笔记(深入)”;
-
10px + 1rem→ 编译报错Operation on an invalid type,Less 不做运行时换算 -
margin: @gap * 2;若@gap: 8;(无单位),结果是纯数字16,后续用于margin会塌陷 -
calc(100% - @gap)→ Less 会尝试提前计算,单位冲突导致输出非法 CSS;必须写成~"calc(100% - @{gap})" -
unit(20px, rem)结果是1.25rem(按默认 16px=1rem 换算),不是20rem;若要自定义基准,得用unit(20px, rem, 10px)
最容易被忽略的是:漏掉一个括号,生成的 CSS 就是灰色划掉的非法规则,DevTools 里看不到报错,布局却莫名塌陷——你得主动检查输出 CSS 中所有含 / 的行,确认是否被计算成了数值。


















