语法错误的原因是因为您要附加&
到不允许的 mixin 调用。&
只能附加到选择器。如果您&
在 mixin 调用之前删除 from ,那么您的代码将编译得很好。
.formater(@className; @rules){
.@{className}{
@rules();
}
}
.formater(mainContainer; {
display:block;
line-height:2em;
& a{
colour: blue;
.formater(link; {
colour:red;
});
}
});
上面的 Less 代码在编译时会产生以下 CSS:
.mainContainer {
display: block;
line-height: 2em;
}
.mainContainer a {
colour: blue;
}
.mainContainer a .link {
colour: red;
}
如您所见,上面输出的最终选择器 is.mainContainer a .link
和 not .mainContainer a.link
。如果您试图实现后者,那么一个选项是您&
在.formater
mixin 的代码本身中添加。
.formater(@className; @rules) {
&.@{className} {
@rules();
}
}
我真的不建议使用以下选项,但如果您需要.formater()
mixin 来支持这两种变体,那么您可以使用变量以及保护条件并酌情使用。
.formater(@className; @rules; @parent-append: false) {
& when not (@parent-append = false) {
&.@{className} {
@rules();
}
}
& when (@parent-append = false) {
.@{className} {
@rules();
}
}
}
然后,您可以将 mixin 称为
.formater(link; {colour:red;}; true); /* if & should be appended */
或者
.formater(link; {colour:red;};); /* if & need not be appended */