less 4.0 中未加括号的 / 不再触发除法运算,必须写成 (100px / 4) 或 100px ./ 4 才能计算;math 配置已失效,strictmath 不影响除法,变量漏括号会导致字符串传递和后续崩溃。

Less 4.0 中 / 不再触发除法计算
直接写 width: 100px / 4,编译后就是 width: 100px / 4; —— 浏览器当它是非法 CSS 声明,静默丢弃,DevTools 里能看到该行被划掉,但控制台不报错。这不是配置漏了、插件没装对,而是 Less 4.0 的行为变更:所有未包裹在括号里的 / 都被当作字面量保留,不参与运算。
必须用 ( ) 或 ./ 显式声明除法意图
只有两种写法能真正触发计算,且二者语义和限制不同:
-
width: (100px / 4);—— 推荐。括号内单位兼容好,支持嵌套如(2rem / 2),也适配变量引用(@icon-size / 2) -
width: 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),和除法行为无关
变量定义和混合运算最容易踩坑
除法一旦漏括号,问题会层层传递,且构建过程不提示:
-
@icon-size: 16px / 2;→ 变量值变成字符串"16px / 2",后续所有引用都崩 -
@a + @b / 2即使math: 1也建议写成@a + (@b / 2),否则优先级混乱可能让组件高度塌陷 - 惰性求值机制下,
@gap: 2rem * 1.5;看似正常,但传入 mixin 后若未显式计算,仍可能报Operation on an invalid type
最隐蔽的问题是:你改了变量,却忘了检查所有引用它的地方是否加了括号——生成的 CSS 文件里搜 / 是最快定位手段。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











