Less 4.x 并非新增特性,而是通过强制显式语法提升可靠性:除法须括号或 ./、@import 必带 .less 后缀、颜色函数参数须带单位、嵌套中父级变量不可隐式访问。

Less 4.x 的编译行为不是“新增特性”,而是对已有语法的严格化——漏掉一个括号、少写一个单位,样式就静默失效,且构建不报错。
除法运算必须显式标记,否则不计算
Less 4.x 把 / 彻底降级为字面量分隔符,不再参与数学计算。旧写法 width: 100px / 4; 会原样输出为 width: 100px / 4;,浏览器直接忽略该声明。
- 正确写法一:
width: (100px / 4);(推荐,语义明确,支持混合单位) - 正确写法二:
width: 100px ./ 4;(注意./前后必须有空格) - 错误写法:
width: 100 / 4px;、line-height: 20px / 16px;、(100 / 4)px(单位后置非法)
这个变化由编译器底层硬编码决定,math 或 strictMath 配置项完全无效,也和构建工具无关。
@import 必须带 .less 后缀
v4 默认关闭路径推测机制,@import "mixins" 不再尝试匹配 mixins.less 或 mixins.css,而是严格按字面路径查找。
立即学习“前端免费学习笔记(深入)”;
- 必须显式写后缀:
@import "./variables.less";、@import "~antd/dist/antd.less"; - 用
~别名前,先确认node_modules/xxx下真实存在.less文件(例如 Ant Design v5 已移除所有.less源码) -
ReferenceError: variable is undefined很大概率是导入失败,而非变量本身未定义
颜色与数学函数参数必须带单位
v4 移除了隐式单位推断,lighten(@color, 10) 这类写法直接报错,因为 10 不是合法数值类型。
- 颜色函数第二参数必须是百分比:
lighten(@color, 10%)、fade(@primary, 20%) -
percentage(1/2)输出字符串"1/2",应写成percentage((1/2))或percentage(0.5) -
round(10.4px)输出10px(保留单位),但round(10.4)输出纯数字10
嵌套中父级 @ 变量不可隐式访问
v4 强化块级作用域,嵌套选择器内部不再继承上层 @ 变量:
- 以下写法会报错:
.btn { @size: 12px; &-large { font-size: @size; } }→Variable @size is undefined - 解决方式一:把变量提至文件顶层或全局作用域
- 解决方式二:在嵌套块内重新声明,如
&-large { @size: 12px; font-size: @size; } - 不能依赖
&自动“穿透”访问父级变量,这是设计变更,不是 bug
真正容易被忽略的是:这些规则没有例外,也没有开关;它们是编译器强制执行的语法契约,而不是可配置的行为选项。


















