注:この回答は、既存の回答が正しくない、または廃止されていると言う目的で追加されたものではありません。すべての答えは有効であり、それでも機能します。これは、私の意見では少し複雑ですが、各引数をキーと値のペアとして言及する方法に関してもより柔軟な、異なる方法を提供するだけです。
この方法を使用する利点:この方法は、値に対して追加の操作を実行する必要がある場合(unit
asの追加、追加の数学操作の実行など) deg
、px
またはベンダープレフィックスを動的に追加する必要がある場合にさらに役立ち@property
ます。たとえばtransform
、入力プロパティとしてのみミックスインに渡したいが-webkit-transform
、-webkit-transition
やなど-moz-transform
に追加したい場合があります。-moz-transition
このメソッドでは、...
可変数の引数をミックスインに渡し、渡された各引数extract
、プロパティの名前、および追加のパラメーター(期間、回転の程度など)をループできる機能を利用します。次に、Lessが提供するマージ機能を使用して、プロパティに指定された値を連結します。
- プロパティ値をコンマで連結し、
+:
Lessv1.5.0で導入されました
- プロパティ値をスペースで連結し、
+_:
Lessv1.7.0で導入されました。
.transition(@args...){
.loop-args(@argCount) when (@argCount > 0) {
.loop-args(@argCount - 1);
@arg: extract(@args, @argCount);
@property: extract(@arg,1);
@duration: extract(@arg,2);
-webkit-transition+: @property @duration;
-moz-transition+: @property @duration;
-o-transition+: @property @duration;
transition+: @property @duration;
}
.loop-args(length(@args));
}
div{
.transition(background, 1s; border-color, 2s; color, 2s);
}
.transform(@args...){
.loop-args(@argCount) when (@argCount > 0) {
.loop-args(@argCount - 1);
@arg: extract(@args, @argCount);
@property: extract(@arg,1);
@param: extract(@arg,2);
-webkit-transform+_: ~"@{property}(@{param})";
-moz-transform+_: ~"@{property}(@{param})";
-o-transform+_: ~"@{property}(@{param})";
transform+_: ~"@{property}(@{param})";
}
.loop-args(length(@args));
}
div#div2{
.transform(rotate, 20deg; scale, 1.5; translateX, 10px);
}
上記のコードをコンパイルすると、次の出力が生成されます。
div {
-webkit-transition: background 1s, border-color 2s, color 2s;
-moz-transition: background 1s, border-color 2s, color 2s;
-o-transition: background 1s, border-color 2s, color 2s;
transition: background 1s, border-color 2s, color 2s;
}
div#div2 {
-webkit-transform: rotate(20deg) scale(1.5) translateX(10px);
-moz-transform: rotate(20deg) scale(1.5) translateX(10px);
-o-transform: rotate(20deg) scale(1.5) translateX(10px);
transform: rotate(20deg) scale(1.5) translateX(10px);
}
関連する回答: