Lessで、再帰を用いて色相、明度を指定できるクラスを大量に作ろうとしているのですが、うまくいきません。最初に私が書いたコードは、以下のようなものでした。
.iterateH(@i) when (@i < 12) { .iterateL(@j) when (@j < 11) { .color-@{i}-@{j} { background-color: hsl(@i * 30, 100%, @j * 10%); } .iterateL(@j + 1); } .iterateH(@i + 1); } .iterateH(0); .iterateL(0);
これをCSSにコンパイルしてみると、いつまで経っても終わらず、なんとメモリリーク。はてと思い、(@i < 12
、(@j < 11)
の部分を試しに(@i < 2
、(@j < 2)
としてやってみたところ、不思議な結果が得られました。
CSS
1.color-0-0 {background-color: #000000;} 2.color-0-1 {background-color: #330000;} 3.color-1-1 {background-color: #331a00;} 4.color-1-0 {background-color: #000000;} 5.color-1-1 {background-color: #331a00;}
…….color-1-1が2つある!
@i、@jの範囲を変えながら実験してみると、範囲が大きくなるごとに、かぶって出力されるものが増えていました。最終的な行数は@iと@jの最大値の積の2乗に比例する勢いで増加します(もしかしたら指数関数的かも。実験範囲が小さいのでよくわかりません)。
.iterate(@i, @j) when (@i < 2) and (@j < 2) { .color-@{i}-@{j} { background-color: hsl(@i * 30, 100%, @j * 10%); } .iterate(@i, @j + 1); .iterate(@i + 1, @j); } .iterate(0, 0);
上記のコードも同じ結果です。
原因に心当たりはありますでしょうか?改善策も合わせてご教授くださるとありがたいです。
あなたの回答
tips
プレビュー