less 4.x 中除法必须显式用 (100px / 4) 或 100px ./ 4,否则 / 被硬编码为 css 字面量,导致浏览器静默丢弃样式;@import 必须带 .less 后缀,嵌套中父级变量不可隐式访问。

直接升级 less 到 4.x 后编译失败或样式静默失效,不是配置没调对,而是 Less 4.x 底层解析规则变了——除法不加括号就原样输出、@import 必须带 .less 后缀、嵌套里父级变量不可访问,这些是硬编码行为,关掉 strictMath 都救不了。
除法必须显式括号或用 ./,否则 CSS 无效
Less 4.x 彻底移除了对裸 / 的数学解析能力。width: 100px / 4; 不再算出 25px,而是原样输出成非法 CSS,浏览器静默丢弃整条声明(DevTools 里显示为灰色划掉),且无构建报错。
-
(100px / 4)是推荐写法:语义清晰,单位混合安全 -
100px ./ 4也合法,但注意./前后必须有空格;100px./4或(100 / 4)px都会报错 - 变量定义同样受影响:
@gap: 1rem / 2;会变成字符串"1rem / 2",后续所有引用全失效 -
line-height: 20px / 16px;这类带单位除法必须改写为line-height: (20px / 16px);或更稳妥的无单位比值line-height: 1.25;
@import 路径必须显式带 .less 后缀
Less 4.x 默认关闭路径推测机制。@import "mixins"; 不再尝试匹配 mixins.less 或 mixins.css,而是严格按字面路径查找。漏掉后缀,导入失败,变量和 mixin 全部 undefined。
- 必须写成
@import "./variables.less";、@import "~antd/dist/antd.less"; - 用
~别名前,先确认node_modules/xxx下真实存在.less文件(如 Ant Design v5 已移除所有.less源码) - 第三方纯 CSS(如
antd.css)必须改用@import (inline) "antd.css";,否则会被尝试解析并炸掉 - 避免跨文件重复
@import "mixins/breakpoints":Less 4.x 不再自动去重,体积暴涨且热更新失效
嵌套中父级 @ 变量不可隐式访问
Less 4.x 强化块级作用域,嵌套选择器内部不再继承上层 @ 变量。.btn { @size: 12px; &-large { font-size: @size; } } 会直接报 Variable @size is undefined,后续所有基于该变量的运算全挂。
- 变量必须提至文件顶层,或在嵌套块内重新声明:
&-large { @size: 12px; font-size: @size; } - 不能依赖
&自动“穿透”访问父级变量,这是设计变更,不是 bug - 惰性求值会让问题更隐蔽:变量定义时没报错,直到某处实际使用才崩,比如传给
.mixin(@val)时触发Operation on an invalid type - 所有基础变量 / Mixin 收口到单个
base.less,其他文件只用@import (reference) "base.less",防止样式污染
颜色函数、单位混用、calc() 插值必须严格遵循新规则
Less 4.x 移除了隐式单位推断和宽松函数参数校验,很多旧写法直接报错或静默失败。
- 颜色函数第二参数必须是百分比:
lighten(@color, 10%)、fade(@primary, 20%);lighten(@color, 10)直接报错 - 参与加减的值单位必须一致:
10px + 1em报错,10px * 2合法,10px * 1rem非法 -
calc()是浏览器运行时计算,Less 编译期无法解析其内部表达式:calc(100% - @gap)报错;正确写法是calc(~"100% - @{gap}") - 不要把
calc()塞进运算链:@w: calc(100% - 20px); margin: @w + 10px中@w是字符串,加法会失败
真正容易被忽略的是:表面编译通过 ≠ 样式正确。Less 4.x 的单位推导逻辑变了,1em * 2 可能返回 2em(旧版是 2),而 10px + 1rem 直接报错而非静默转成 px——这些不会打断构建,但会让按钮尺寸、间距、响应式断点悄悄偏移。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











