less 4.0+ 中未加括号的 / 不参与计算,必须写为 (100px / 4) 或 100px ./ 4;calc() 需用 ~"100% - 44px" 转义,math/strictmath 配置对除法无效。

Less 4.0+ 中所有未加括号的 / 都不会计算,这是编译器硬编码行为,不是配置能改的——必须手动加括号或改用 ./。
为什么 100px / 4 编译后还是原样?
Less 4.x 彻底移除了“宽松除法”逻辑,/ 在属性值中一律视为 CSS 字面量分隔符,不是运算符。比如:
-
width: 100px / 4;→ 输出width: 100px / 4;,浏览器解析失败,DevTools 里该行被划掉(静默丢弃) -
@size: 16px / 2;→@size值变成字符串"16px / 2",后续引用全错 - VS Code 的 Easy Less 插件(1.7.0+)也遵循此规则,不会自动补括号
必须用的两种除法写法
只有这两种写法能真正触发计算,其他都无效:
-
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() 被提前计算怎么修?
Less 会把 calc(100% - 44px) 当作表达式直接算成 calc(56%),根本没传给浏览器。必须用转义:
-
height: calc(~"100% - 44px");—— 运算符两侧必须有空格,~"100%-44px"❌ - 带变量时:
calc(~"100% - @{extra}");或calc(~"100% - "(@extra)); -
math和strictMath配置对calc()完全无效,别白配
哪些配置根本不管用?
所有声称能“开启除法”的配置在 Less 4.x 中都已失效:
-
math: "always"、math: 0等字符串/旧数值会被静默忽略,等价于没配 - Vite 中
css.preprocessorOptions.less.math = "always"→ 无效 - Webpack
less-loader传{ math: 'always' }→ 等同于没写 -
strictMath只控制无单位数值参与运算(如10px + 5),和/行为零关系
漏一个括号,可能让整个组件高度塌陷,而构建不报错、控制台无提示——你得手动检查生成的 CSS 文件,或用 grep 扫描含 / 的声明行,确认是否被原样输出。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











