less 4.1 默认不执行除法计算,因编译器硬编码将所有未加括号的 / 视为 css 字面量;唯一有效写法是 (100px / 4) 或 100px ./ 4,math 配置被静默忽略。

Less 4.1 默认不执行除法计算,不是配置漏了、也不是构建工具没配对,而是编译器硬编码行为:所有未加括号的 / 都原样输出为 CSS 字面量,浏览器静默丢弃整条声明。
为什么 100px / 4 编译后还是 100px / 4
Less 4.1 彻底移除了“宽松除法”解析逻辑。它不再尝试判断这个 / 是运算符还是 CSS 分隔符(比如 font: 12px/1.5 中的斜杠),而是统一当作字面量处理。
-
width: 100px / 4;→ 输出width: 100px / 4;,浏览器忽略该行 -
line-height: 20px / 16px;→ 同样失效,不会变成1.25 -
@gap: 1rem / 2;→@gap变成字符串"1rem / 2",后续所有引用都崩
唯一有效的两种写法
必须显式告诉编译器“这里要算”,只有以下两种语法被识别为数学运算:
-
(100px / 4)—— 推荐,语义清晰,单位兼容好,支持嵌套如(2rem / 2) -
100px ./ 4—— 注意./前后**必须有空格**;100px./4或100px ./4都会报错
反例:(100 / 4)px 报 Operation on an invalid type;100 / 4px 单位位置错,结果不可预期。
math 配置在 Less 4.1 中基本失效
你搜到的 math: "always"、math: "parens"、math: 0 全部被静默忽略,等价于没配,最终走默认 math: 2(严格模式)。
- 真正只认整数
math: 1或math: 2,但它们**不控制是否计算**,只影响“是否允许无括号除法被解析为表达式” -
math: 1:接受100px / 4是合法表达式,但依然不计算,输出仍是字面量 -
math: 2:强制100px / 4报错,倒逼你改写为(100px / 4)或100px ./ 4 - Vite 中必须写成
css.preprocessorOptions.less.math = 1;Webpackless-loader要放在options.math下;命令行用lessc --math=1
容易被忽略的静默陷阱
VS Code Easy Less 插件(1.7.0+)、CI 日志、甚至本地 lessc 命令行,都不会警告你漏了括号——编译成功、无报错、无 warning,但生成的 CSS 里满是非法 /。
- 只能靠检查最终 CSS 文件,或用 CSS 验证工具扫出
/出现在width、margin、background等非font属性里 - UI 框架(如 view-ui-plus)样式异常,90% 是因为源码里存在未加括号的除法,而非配置没写对
-
calc()里的表达式仍会被 Less 当作数学式提前吃掉,必须用~"calc(100% - @{gap})"转义
所有除法都必须手动加括号或写 ./,没有例外。这个规则由 Less 4.1 编译器底层硬编码决定,不经过任何配置层,也不随构建工具变化。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











