Less 4.0 中未加括号的除法(如 100px / 4)被当作 CSS 字面量分隔符原样输出,导致声明无效且静默丢弃;唯一有效写法是 (100px / 4) 或 100px ./ 4(需空格),math 配置已失效,strictMath 不影响 / 行为。

Less 4.0 中除法不加括号直接失效
Less 4.0 不会把 100px / 4 当作运算,而是原样输出为 100px / 4,浏览器解析时判定为非法 CSS,整条声明被静默丢弃——DevTools 里该行显示为灰色划掉,控制台无报错,构建也不中断。
这不是插件或配置问题,是编译器硬编码行为:所有未包裹在括号里的 / 都被当作 CSS 字面量分隔符处理,不是“忘了算”,而是明确不参与计算。
-
width: 100px / 4;→ 输出width: 100px / 4;(无效) -
@size: 16px / 2;→@size值变成字符串"16px / 2",后续引用全崩 -
line-height: 20px / 16px;→ 行高不生效,且无任何提示
必须用的两种有效写法
只有以下两种写法能真正触发计算,其他形式均不可靠:
-
width: (100px / 4);—— 推荐。语义清晰,支持嵌套如(2rem / 2),单位兼容稳定 -
width: 100px ./ 4;——./是 Less 特有触发符,但前后必须有空格:100px ./ 4✅,100px./ 4❌,100px ./4❌
反例:(100 / 4)px 报 Operation on an invalid type;100 / 4px 单位位置错,结果不可预期。
立即学习“前端免费学习笔记(深入)”;
math 配置已完全失效,别再白配
math: "always"、math: "parens" 等字符串配置在 Less 4.0+ 已移除,只认整数 math: 1 或 math: 2,且仅影响构建工具对旧语法的兜底兼容,完全不改变除法是否执行。
- Vite 中写
css.preprocessorOptions.less.math = "always"→ 无效 - Webpack 的
less-loader传{ math: 'always' }→ 等同于没写 -
strictMath控制的是无单位数值运算(如10px + 5),和/行为无关
容易被忽略的静默失效点
漏一个括号,可能让整个组件高度塌陷,而构建不报错、控制台无提示。你得手动检查生成的 CSS 文件,或用 grep 扫描含 / 的声明行,确认是否被原样输出。
特别注意:repeat(@n, 1fr) 失效往往不是 Grid 语法问题,而是 @n 定义里用了未括号的除法(如 @n: @cols / 2;),Less 在解析变量时就卡住,整条规则不会生成。


















