Less 4.x 移除裸除法解析,100px / 4 不再计算而原样输出致 CSS 无效;须用 (100px / 4) 或 100px ./ 4,单位混用、作用域、calc() 插值及颜色运算均需严格遵循新规则。

Less除法不加括号导致编译失效
Less 4.x 起彻底移除了对裸 / 的数学解析能力,100px / 4 不再算出 25px,而是原样输出成非法 CSS —— 浏览器直接静默丢弃整条声明,DevTools 里显示为灰色划掉,且无任何报错。
- 必须写成
(100px / 4)或100px ./ 4(注意./前后都要有空格) -
line-height: 20px / 16px这类带单位除法会崩,应改用line-height: (20px / 16px)或更稳妥的无单位比值line-height: 1.25 - 变量定义也受影响:
@gap: 1rem / 2会变成字符串"1rem / 2",后续所有引用都失效
单位混用引发编译报错或静默失败
Less 要求参与加减的值单位必须一致;乘除允许一个无单位数作系数,但两个不同单位值(如 10px + 1em)直接报错,而 10px * 2 合法、10px * 1rem 非法。
- 响应式计算中常见陷阱:
@columns: 12; flex-basis: 100% / @columns看似合理,但100%是百分比单位,@columns是无单位数,Less 4.x 默认不推断,需显式写成(100% / @columns) - 用
unit()剥离单位做逻辑判断时,要先确认原始值真有该单位,否则unit(@val, px)会报错 - 避免小数渲染模糊:关键尺寸建议套
round(),比如height: round(42.6px)→43px
calc() 和 Less 运算链冲突
calc() 是浏览器运行时计算,Less 编译期无法解析其内部表达式。你写的 calc(100% - @gap) 会报错,因为 calc() 不认 Less 变量;而 width: calc(100% - 50px) 又会被 Less 当作数学表达式提前算成 -50% 或其他错误值。
- 正确写法是用波浪号转义:
width: calc(~"100% - @{gap}"),其中@{gap}会被插值,其余字符串原样输出 - 不要把
calc()塞进运算链:@w: calc(100% - 20px); margin: @w + 10px——@w是字符串,加法会失败 - 真要自动计算宽度,优先用 Less 内置函数:
width: (100% - unit(@gap, px))或width: percentage(3/4)
嵌套作用域中断变量继承导致运算中断
Less 4.x 强化块级作用域,嵌套选择器内无法访问父级 @ 变量,.btn { @size: 12px; &-large { font-size: @size; } } 直接报 Variable is undefined,后续所有基于该变量的运算全挂。
立即学习“前端免费学习笔记(深入)”;
- 变量必须提至文件顶层,或在嵌套块内重新声明
- 惰性求值会让问题更隐蔽:变量定义时没报错,直到某处实际使用才崩,比如传给
.mixin(@val)时触发Operation on an invalid type - 颜色运算不能裸写
@red + @blue,必须用mix()、lighten()等函数,且参数必须带单位或百分比(lighten(@c, 10%)合法,lighten(@c, 10)报错)
真正卡住人的,往往不是语法不会写,而是那些不报错、不中断构建、却让样式在用户侧静默消失的地方:漏一个括号、少一个单位、错一层作用域——CI 跑过,上线后才发现按钮宽度塌了、行高没了、颜色变灰。


















