構文エラーの理由は、&
許可されていない 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;
}
お気づきかもしれませんが、上記の出力である最終的なセレクターは.mainContainer a .link
and not.mainContainer a.link
です。後者を達成しようとしている場合、1 つのオプションは、ミックスインのコード自体に を追加すること&
です.formater
。
.formater(@className; @rules) {
&.@{className} {
@rules();
}
}
以下のオプションを使用することはあまりお勧めしませんが、.formater()
ミックスインで両方のバリエーションをサポートする必要がある場合は、変数をガード条件とともに使用し、必要に応じて使用できます。
.formater(@className; @rules; @parent-append: false) {
& when not (@parent-append = false) {
&.@{className} {
@rules();
}
}
& when (@parent-append = false) {
.@{className} {
@rules();
}
}
}
その後、ミックスインを次のように呼び出すことができます
.formater(link; {colour:red;}; true); /* if & should be appended */
また
.formater(link; {colour:red;};); /* if & need not be appended */