less 4.x 中 math: 0 已彻底移除,仅支持 math: 1(兼容无括号除法)和 math: 2(强制括号),默认 fallback 至 math: 2;配置须在编译器启动时显式传入,如 webpack 的 less-loader options 或 vite 的 css.preprocessoroptions.less 下。

math 配置项在 Less 4.x 中不能“关闭”严格数学模式,它已被重定义为三档可选策略,且 math: 0(即旧版的宽松除法)彻底移除,不是禁用,是不存在了。
你看到的“报错 SyntaxError: expected 1 selector or at-rule, was "10px / 2"”,不是因为 strictMath 没关掉,而是编译器已强制进入 math: 2 模式——这是默认 fallback,且无法回退到 math: 0。
math 配置必须显式声明,且只接受 1 或 2
-
math: 1允许无括号除法(如10px / 2),兼容 Less 3 写法,但语义模糊(width: 100px / 2 + 10px是(100px / 2) + 10px还是100px / (2 + 10px)?Less 不保证) -
math: 2强制所有运算加括号(如(10px / 2)或10px ./ 2),空格和点号是关键,./表示“安全除法”,避免歧义
math 必须在编译器启动时传入,不是 Less 文件里写 @math: 1 就能生效:
- Webpack(
less-loader)中要写在options里:loader: 'less-loader', options: { math: 1 } - Vite 中必须嵌套在
css.preprocessorOptions.less下:css: { preprocessorOptions: { less: { math: 1 } } }
为什么 math: 0 不再可用
- 它曾对应
parens-division模式,但实际导致大量隐式解析错误(比如10px / 2px被当作单位除法,而10px / 2却被当作数值除法) - Less 团队明确将其标记为“已废弃”,v4 中静默忽略,不报错也不生效,直接 fallback 到
math: 2 - 所以你改了配置却没效果,大概率是误写了
math: 0,或漏了配置层级
旧代码迁移建议优先级
- ✅ 短期救急:设
math: 1,快速通过编译,但需同步排查所有除法表达式是否真有歧义 - ⚠️ 中期清理:把
@size: 10px / 2改成@size: (10px / 2),或更稳妥地用unit(10px / 2, px)显式声明单位 - ❌ 不要依赖
javascriptEnabled:它已在 v4 彻底移除,任何含~`...或@{var}动态拼接 JS 表达式的写法都会失效
真正容易被忽略的是:即使你设了 math: 1,@import 路径、函数参数单位、变量作用域这些 v4 的其他严格规则仍全部生效——数学模式只是冰山一角。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











