私はこの方法で何とかそれについて行きます:
.generateClasses (@index, @n, @in:"") when (@index > 0) {
@concatenate: "@{in} .repeatedClass";
@selector: ~".staticClass @{concatenate} > .finalStaticClass";
@{selector}{ height: unit(@n,px) };
.generateClasses((@index - 1), (unit(@n) + 10), @concatenate);
}
.generateClasses(0, @n, @in){};
.generateClasses(4, 10px);
連結された生成されたクラスを次のループに渡し、そのたびに別のクラスを追加します。は@index
ループのカウンターで、@n
増やしたい値です。
CSS 出力:
.staticClass .repeatedClass > .finalStaticClass {
height: 10px;
}
.staticClass .repeatedClass .repeatedClass > .finalStaticClass {
height: 20px;
}
.staticClass .repeatedClass .repeatedClass .repeatedClass > .finalStaticClass {
height: 30px;
}
.staticClass .repeatedClass .repeatedClass .repeatedClass .repeatedClass > .finalStaticClass {
height: 40px;
}
編集 - Less の古いバージョンの場合:
Less <= 1.3.3 では、個々の連結ループを別のロール (.test
以下の例で呼び出されます) に含めて、変数を制限する必要があります。次に、これをループして、次の行に沿って何かを実行できます。
.generateClasses (@index, @n, @in:"") when (@index > 0) {
@concatenate: "@{in} .repeatedClass";
@selector: ~".staticClass @{concatenate} > .finalStaticClass";
.generateClasses((@index - 1), (unit(@n) + 10), @concatenate);
}
.generateClasses(0, @n, @in){};
.test(@i, @ni){
.generateClasses(@i,@ni);
@{selector} {
height: @ni;
}
}
.printClasses(@i:1,@ni:10px) when (@i > 0) {
.test(@i,@ni*@i);
.printClasses(@i - 1,@ni);
}
.printClasses(4);
出力 CSS は次のようになります。
.staticClass .repeatedClass .repeatedClass .repeatedClass .repeatedClass > .finalStaticClass {
height: 40px;
}
.staticClass .repeatedClass .repeatedClass .repeatedClass > .finalStaticClass {
height: 30px;
}
.staticClass .repeatedClass .repeatedClass > .finalStaticClass {
height: 20px;
}
.staticClass .repeatedClass > .finalStaticClass {
height: 10px;
}
セレクターを一度に 1 つずつ生成する必要がある場合は、2 番目のループをスキップして、.test()
必要な場所で mixin を呼び出すことができます。