less 4.0 不执行括号外的除法,/ 被当作 css 字面量保留,导致如 width: 100px / 4 编译后无效;唯一有效写法是 (100px / 4) 或 100px ./ 4,math 配置已失效。

Less 4.0 不会执行括号外的除法,/ 在 CSS 中本就不是运算符,编译器直接保留字面量,浏览器解析失败 —— 这不是配置能绕开的,必须改写法。
为什么 100px / 4 编译后无效
Less 4.0 把所有未包裹在括号里的 / 当作 CSS 字面量处理,不参与计算。比如 width: 100px / 4; 会原样输出为 width: 100px / 4;,浏览器直接忽略该声明(CSS 语法错误),控制台无报错,DevTools 里能看到这条非法规则被静默丢弃。
-
line-height: 20px / 16px;→ 输出line-height: 20px / 16px;,行高不生效 -
@icon-size: 16px / 2;→ 变量值变成字符串"16px / 2",后续引用全崩 - VS Code 的 Easy Less 插件(1.7.0+)也遵循此规则,不会自动补括号
唯一有效的两种写法
必须显式选择其中一种,不能依赖配置“修复”:
-
width: (100px / 4);—— 推荐:语义清晰、单位兼容好、支持嵌套如(2rem / 2) -
width: 100px ./ 4;——./是 Less 特有触发符,注意前后必须有空格;100px./4或100px ./4都会报错 - 反例:
(100 / 4)px→ 报Operation on an invalid type;100 / 4px→ 单位位置错,结果不可预期
别再白配 math 参数
Less 4.0 已移除 math: "always"、math: "parens" 等字符串配置项,只认整数 math: 1 或 math: 2,且仅影响部分构建工具对旧语法的兼容兜底(比如 10px / 2 是否允许不报错),**完全不改变除法是否执行**。
-
lessc --math=always被静默忽略 - Vite 中写
css.preprocessorOptions.less.math = "always"无效 - Webpack
less-loader里传{ math: 'always' }等同于没写 -
strictMath控制的是无单位数值参与运算(如10px + 5),和除法行为无关
乘加减不用括号,但单位要匹配
加、减、乘法本身不要求括号,但单位混合仍会出错:
-
margin: 10px * 2;→ 正确,输出margin: 20px; -
height: 10px + 2em;→ 报错:单位不可加 -
font-size: 14px + 2;→ 若strictMath: false可能隐式转成14px + 2px,但不推荐依赖此行为 - 混合运算如
@a + @b / 2即使math: 1也建议加括号明确优先级:@a + (@b / 2)
漏掉一个括号,可能让整个组件高度塌陷,而构建过程不报错、控制台无提示——你得手动检查生成的 CSS 文件,或用工具扫描含 / 的声明行,确认是否被原样输出。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











