less 4.x 中 / 不计算是编译器硬编码行为,必须用 (100px / 4) 或 100px ./ 4 才触发运算;math 配置已失效,strictmath 与除法无关,漏括号会导致静默失效。

Less 4.x 中 / 不计算是编译器硬编码行为,不是配置能绕开的
Less 4.x 把所有未包裹在括号里的 / 当作 CSS 字面量处理,不是“忘了算”,而是明确设计为:除非写成 (100px / 4) 或 100px ./ 4,否则 / 就是分隔符,不参与运算。你写 width: 100px / 4;,它就原样输出 width: 100px / 4;,浏览器直接静默丢弃——DevTools 里该行会显示为灰色划掉,控制台无报错。
常见错误现象:
-
line-height: 20px / 16px;→ 行高失效,页面布局塌陷 -
@gap: 1rem / 2;→ 变量值变成字符串"1rem / 2",后续所有引用全错 -
grid-gap: @gap / 2;→ 编译直接报Operation on an invalid type
math 配置在 Less 4.x 中已失效,别白配
math: "always"、math: "parens" 等字符串值在 Less 4.x 中被完全移除,只认整数 math: 1 或 math: 2,且仅影响构建工具对旧语法的兼容兜底,**完全不改变除法是否执行**。
实操建议:
- Vite 中写
css.preprocessorOptions.less.math = "always"→ 无效 - Webpack 的
less-loader传{ math: 'always' }→ 等同于没写 -
strictMath控制的是无单位数值能否参与加减(如10px + 5),和/行为零关系
真正有效的两种写法,必须二选一
只有以下两种写法能触发计算,其他都无效:
-
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→ 单位位置错,结果不可预期 -
calc(100% - 44px)→ Less 会提前解析-,必须转义:calc(~"100% - 44px")
最容易被忽略的静默失效点
漏一个括号,可能让整个组件高度塌陷,而构建不报错、控制台无提示。VS Code 插件、CI 日志、lessc 命令行都不会警告你——你得手动检查生成的 CSS 文件,或用 grep 扫描含 / 的声明行,确认是否被原样输出。
乘、加、减本身不要求括号,但单位混合仍会出错:
-
margin: 10px * 2;→ 正确,输出margin: 20px; -
height: 10px + 2em;→ 报错:单位不可加 -
font-size: 14px + 2;→ 若strictMath: false可能隐式转成14px + 2px,但不推荐依赖此行为
混合运算如 @a + @b / 2,即使 math: 1 也建议加括号明确优先级:@a + (@b / 2)。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











