これは本質的に@sherbrowの答えと同じですが、もう少し簡潔でエラーはありません。これは、彼の正しい答えを裏付ける長い説明コメントだと考えてください。コメントに収まりきらないほどです。
このようなLESS ループmixin を中間ヘルパーとして使用し、生成するクラスの数を指定して呼び出します。.column-1
、.column-2
、およびを行う方法は次のとおり.column-3
です。4 列まで移動したい場合: [9 行目].columns(4)
の代わりに実行します。.columns(3)
5 列まで移動するには、 を実行します.columns(5)
。
1 // we'll call this if we want to build columns
2 .columns(@i) when (@i > 0) {
3 .column-@{i} {
4 .col(@i)
5 }
6 .columns(@i - 1)
7 }
8 // for example, here we build columns 1-3
9 .columns(3);
の結果にコンパイルされます
.column-1 {.col(1)}
.column-2 {.col(2)}
.column-3 {.col(3)}
(あなたの質問は既に mixin.col(@x)
があると仮定しているので、私もそれを仮定しています。その余分なステップをスキップする方法については、4を参照してください。)
何が起こっているかは次のとおりです。
- 最初のチャンク全体 [1 ~ 7 行目] は、呼び出されるまでそのままです。
.columns(3)
[9 行目] は.columns(@i)
mixin [2 行目] に送信し、変数@i
に valueを割り当てます3
。
@i
(3) は 0 より大きい [2 行目] ため、ガードを満たし、[ 2行目]を通過でき{
ます。
.column-@{i} {...}
[3-5 行目] は、この mixin が出力するものです。
@i
は 3 なので、出力は次のようになります。.column-3 {.col(3)}
- 構文
@{i}
は、変数の値を文字列として挿入するために使用されます
- 他の場所で使用する必要がない場合は
.col(@x)
、ここにスタイルを直接ドロップすることもできます (例: @sherbrow)。.column-@{i} {width: @i * 10px}
- そして、ループ: 3 行目から 5 行目をコンパイルした後、この mixin を再度呼び出しますが、値は異なります [6 行目]:
.columns(@i - 1)
==> .columns(3 - 1)
==> .columns(2)
。
- トップに戻る [行 2]:
@i
、現在 2 は 0 よりも大きいため、入力が許可されてい.column-2 {.col(2)}
ます。.col(2)
.column-2 { the.col(2)styles }
@i
そして、 が 0 より大きくなくなるまで出力とループを続けます (つまり、 の後に停止し.columns(1)
ます)。