Less 4 默认 strictMath=true,数学运算必须用括号包裹,否则解析器直接报错;如 width: (100% / 2); 正确,width: 100% / 2; 错误;嵌套运算和 @import 链中亦须严格遵循。

Less 4 默认 strictMath=true,不加括号的数学表达式直接被拒绝解析,不是语法错误,而是编译器主动拦截
strictMath=true 是硬开关,不是警告模式
Less 4.x 把 strictMath 默认值从 false 改为 true,意味着所有数学运算(+、-、*、/)必须显式用括号包裹,否则解析器在词法阶段就终止处理,抛出 SyntaxError: expected 1 selector or at-rule, was "10px / 2"。
- 这不是 CSS 语法问题,浏览器根本没机会看到输出;是 Less 编译器自己卡在了源码解析环节
-
width: 100% / 2;和height: 64px - 16px;都会失败,哪怕单位一致、逻辑合理 - 启用
--strict-math=off可临时绕过,但这是倒退——Less 4 已移除javascriptEnabled,无法退回旧行为
加括号不是“写法建议”,而是解析通路的唯一入口
只有括号能告诉 Less:“这段是数学表达式,请进入计算流程”。没有它,/ 和 - 会被当作分隔符或非法 token 处理。
- 正确:
width: (100% / 2);、margin: (64px - 16px);、font-size: (16px * 1.25); - 错误:
width: 100% / 2;(空格+运算符 → 解析器误判为规则分隔)、line-height: 1.5 * 16px;(乘号前无括号 → 直接报错) - 嵌套运算也必须层层括起:
padding: ((@base * 2) + 8px);,漏一层括号就会中断
和 calc() 混用时,括号位置极易踩坑
Less 运算和 CSS calc() 完全不同层:前者在编译期执行,后者在浏览器运行时执行。两者括号不能互相替代。
-
width: calc(100% - (20px * 2));❌ ——calc()内的括号对 Less 无效,20px * 2仍会触发 strictMath 报错 -
width: calc(~"100% - @{gap} * 2");✅ —— 用~""跳过 Less 计算,括号只留给浏览器 -
width: (100% / 3);是 Less 输出静态值,width: ~"calc(100% / 3)";是交给浏览器动态算,目的不同,括号归属也不同
最容易被忽略的是:strictMath 规则对 @import 链内所有文件生效,哪怕某个 _mixins.less 里有一行没括号的除法,整个编译就停摆——它不区分“核心逻辑”还是“边角配置”,只要遇到就拒绝。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











