質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Less

LessはCSSをシンプルかつ効率よく書くための、 CSSメタ言語の1つです。 lessで変数宣言を行う場合、@から宣言します。

Q&A

0回答

1250閲覧

Less、2次元の再帰について

cisdur

総合スコア46

Less

LessはCSSをシンプルかつ効率よく書くための、 CSSメタ言語の1つです。 lessで変数宣言を行う場合、@から宣言します。

0グッド

0クリップ

投稿2016/07/07 22:30

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);

上記のコードも同じ結果です。

原因に心当たりはありますでしょうか?改善策も合わせてご教授くださるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問