要素が後者の mixin を持つ要素の子である場合にのみ前者が呼び出されるように、LESS で別の mixin 内にネストされた mixin を持つことは可能でしょうか?
私は知っています、紛らわしいです、ここに簡単な例があります(動作コードではなく、単なる概念です):
以下
.foo(@x) {
width: @x;
.foo(@y) {
width: @y/@x;
}
}
.a {
.foo(20px);
.b {
.foo(2);
}
}
出力CSS
.a {
width: 20px;
}
.a .b {
width: 10px;
}
これを行うと、.foo(2)
on.b
を呼び出すと にコンパイルされwidth: 2
ます。
これは設計上このようになっているはずですか、それとも構文に何か問題がありますか? また、私は完全に間違った角度から問題に取り組んでいますか?おそらく、私が考えていないもっと簡単な解決策がありますか?
編集
どうやらそれは LESS の最新バージョンで修正されたようですが、私が達成しようとしているのは、上記の最小限の例よりも少し複雑です。
基本的に私がやりたいことは、ミックスインを.foo
持つ別の要素の子であるすべて.foo
が計算のために親変数を取ることです。
以下
.foo(@x) {
width: @x;
.foo(@y) {
width: (@x/@y);
}
}
.a {
.foo(100px);
.b {
.foo(2px);
.c {
.foo(5px);
/* ...and so on */
}
}
}
出力CSS
.a {
width: 100px;
}
.a .b {
width: 50px;
}
.a .b .c {
width: 10px;
}
代わりに、次のようになります。
.a .b .c {
width: 50px;
}
LESS を次のように変更しようとしました。
.foo(@x) {
width: @x;
.foo(@y) {
@x: (@x/@y)
width: (@x);
}
}
しかし、再帰変数定義の構文エラーが発生します。どうやら LESS は次のような定義を許可していません:
@a: 1;
@a: (@a+1);