さまざまなdiv
要素のbackground-color
を制御するif文を探しています。
私は以下を試しましたが、コンパイルしません
@debug: true;
header {
background-color: (yellow) when (@debug = true);
#title {
background-color: (orange) when (@debug = true);
}
}
article {
background-color: (red) when (@debug = true);
}
LESSには、個々の属性ではなく、ミックスインに対して ガード式 があります。
したがって、次のようなmixinを作成します。
.debug(@debug) when (@debug = true) {
header {
background-color: yellow;
#title {
background-color: orange;
}
}
article {
background-color: red;
}
}
.debug(true);
または.debug(false)
を呼び出して(またはまったく呼び出さないで)、オンまたはオフにします。
個々の(または複数の)属性にガードを使用する方法があります。
@debug: true;
header {
/* guard for attribute */
& when (@debug = true) {
background-color: yellow;
}
/* guard for nested class */
#title when (@debug = true) {
background-color: orange;
}
}
/* guard for class */
article when (@debug = true) {
background-color: red;
}
/* and when debug is off: */
article when not (@debug = true) {
background-color: green;
}
...そして1.7未満で;コンパイル先:
header {
background-color: yellow;
}
header #title {
background-color: orange;
}
article {
background-color: red;
}
私は同じ質問につまずいて、解決策を見つけました。
まず、少なくともLESS 1.6にアップグレードしてください。その場合、npm
を使用できます。
これで、次のミックスインを使用できます。
.if (@condition, @property, @value) when (@condition = true){
@{property}: @value;
}
LESS 1.6以降では、PropertyNameをMixinにも渡すことができます。たとえば、次のように使用できます。
.myHeadline {
.if(@include-lineHeight, line-height, '35px');
}
@ include-lineheightがtrueに解決される場合、LESSはline-height: 35px
を出力し、@ include-lineheightがtrueでない場合はmixinをスキップします。
私はいくつかの構文糖のミックスインを書きました;)
たぶん誰かは、guardsを使用するよりもif-then-elseを書く方がこの方法を好むでしょう
less 1.7.0に依存
https://github.com/pixelass/more-or-less/blob/master/less/fn/_if.less
.if(isnumber(2), {
.-then(){
log {
isnumber: true;
}
}
.-else(){
log {
isnumber: false;
}
}
});
.if(lightness(#fff) gt (20% * 2), {
.-then(){
log {
is-light: true;
}
}
});
上記の例を使用して
.if(@debug, {
.-then(){
header {
background-color: yellow;
#title {
background-color: orange;
}
}
article {
background-color: red;
}
}
});