Less参数必须显式设默认值,否则编译报错;所有参数需统一设或不设,默认值应选设计基线值并配合Guard避免无效CSS输出,变量文件须优先@import以确保作用域正确。

参数默认值不设会直接报错 @variable is undefined
Less 不做运行时兜底,调用时漏传且没设默认值,编译器立刻抛出 variable @color is undefined。这不是警告,是中断编译的错误。
- 必须为每个参数显式赋默认值,哪怕只是
@color: @color-primary或@padding: 12px - 别写
@radius: 4这种无单位数值——调用时传8px就和4单位冲突,编译失败或生成非法 CSS - 颜色参数优先绑定变量,如
@bg: @color-surface,而不是@bg: #f8f9fa,否则主题切换时无效
.button(@variant: default, @size: medium) 为什么不能写成 .button(@variant, @size: medium)
Less 参数按位置匹配,不支持“跳过中间参数”。如果只设后一个默认值,前面的 @variant 没默认值,调用 .button(medium) 时,medium 会被当 @variant 值,@size 反而变成 undefined。
- 所有参数都需设默认值,或全部不设;混用会导致调用逻辑混乱
- 语义化命名比顺序更重要:用
@variant而非@bg-color,后续加ghost或outline变体无需改调用方式 - 设默认值时,选设计系统基线值(如
@size: medium对应 32px 高度),不是随意挑个数字
Guard 条件怎么配合默认值避免 box-shadow: false 这种无效输出
直接写 @shadow: false 作默认值,会导致编译出 box-shadow: false,浏览器忽略且难排查。要用 Guard 把“关”和“开”逻辑隔开。
- 正确写法:
.card(@shadow: false) when (@shadow = true) { box-shadow: 0 2px 8px rgba(0,0,0,0.1); } - 这样
.card()不生成任何 box-shadow,.card(true)才触发规则,语义清晰、输出干净 - 别在 Guard 里做复杂判断,比如
when (@size = small) and (@state = hover),分支一多就失控,拆成多个 mixin 更可控
@import 顺序错了,默认值就“失效”
Less 变量作用域是“最后定义生效”,但 mixin 调用时读的是**调用时刻**的变量值,不是定义时的。如果 @color-primary 在 mixin 定义之后才被覆盖(比如主题文件 import 在后面),那所有已定义的 mixin 仍用旧值。
立即学习“前端免费学习笔记(深入)”;
- 全局变量文件(
variables.less)必须在所有 mixin 文件之前@import - 组件级 mixin 文件里别重复声明
@color-primary,否则会屏蔽外层变量 - 调试时可临时加
// debug: @color-primary = @{color-primary}查看实际取到的值


















