実際に複合名を割り当てることにより、LESS CSS で変数を動的に定義する mixin を作成しようとしています。
単純化されたユースケース (実際のものではありません):
.define(@var){
@foo{var}: 0;
}
次に、ミックスインを次のように呼び出します。
.define('Bar'){
@fooBar: 0;
}
この種の文字列補間はセレクター名を使用しているときに可能であるため、変数名でも同じことが可能かどうか疑問に思っていました。これまでのところ、試したさまざまな構文でうまくいきませんでした(上記以外に、エスケープ、引用、~
接頭辞の使用などを試しました)。
編集
もう1つ試してみたところ、近いかもしれないと感じています。しかし、私は LESS 構文の奇妙な点を経験しています。これを書くと:
.define(@var){
#namespace {
@foo: @var;
}
}
そして、次のように呼び出します。
.define(0)
次に@foo
、通常の名前空間の方法で使用できます。
.test {
#namespace;
property: @foo; /* returns 0 */
}
ただし、文字列補間セレクタの場合は同じではありません。
.define(@var, @ns){
#@{ns} {
@foo: @var;
}
}
.define(0, namespace);
.test {
#namespace;
property: @foo;
}
上記のコードでは、次のエラーが表示されます。
名前エラー: #namespace が定義されていません
ただし、文字列補間は成功し、有効でした。実際のところ、その.test
部分を取り除いてテスト プロパティを出力するように上記を変更すると、CSS が正しく解析されていることがわかります。つまり:
.define(@var, @ns){
#@{ns} {
@foo: @var;
prop: @foo;
}
}
.define(0, namespace);
次の CSS を出力します。
#namespace {
prop: 0;
}