Less:在when条件语句中设置变量编译报错,求解决方法
解决Less Mixin守卫语法错误的问题
这个报错是因为你写错了Less中守卫(guard)的语法位置,有两种正确的写法可以实现你的需求,我给你分别说明:
写法1:将守卫作为Mixin定义的一部分
把when条件直接跟在Mixin的参数列表后面,用来限定这个Mixin仅当参数满足条件时生效:
#make-grid(@columns) when (@columns = 10) { @a: 1; } // 调用示例 .demo { #make-grid(10); // 只有传入10时,@a才会被设置 result: @a; // 编译后为 result: 1; }
如果需要多分支匹配不同的@columns值,可以定义多个带不同守卫的同名Mixin:
#make-grid(@columns) when (@columns = 10) { @a: 1; } #make-grid(@columns) when (@columns = 12) { @a: 2; }
写法2:Mixin内部嵌套守卫(适合多条件分支)
如果你想在同一个Mixin内部根据不同参数值设置变量,需要用& when的语法(&代表当前Mixin的作用域),这才是Less支持的嵌套守卫写法:
#make-grid(@columns) { & when (@columns = 10) { @a: 1; } & when (@columns = 15) { @a: 3; } }
你原来代码的错误原因
你把when条件块直接写在了Mixin的大括号里却没有加&,这不符合Less的语法规则,Less无法识别这种写法,因此抛出了"unrecognised input"的错误。加上&或者把守卫移到Mixin参数后,就能正常编译了。
内容的提问来源于stack exchange,提问作者Raphael Jeger
相关产品推荐
相关产品推荐

