LESS(同じスコープ内)の変数を上書きすることはできません。ドキュメントには具体的に次のように書かれています。
LESSの変数は、一度しか定義できないという点で実際には「定数」であることに注意してください。
あなたが望むもののために、あなたはミックスインをする必要があります:
LESSコードの例
.colorDefs(@c1: #222, @c2: #fff) {
@colorOne: @c1;
@colorTwo: @c2;
@darkGradientStart: lighten(@colorOne, 10%);
@darkGradientStop: lighten(@colorOne, 5%);
@lightGradientStart: @colorTwo;
@lightGradientStop: darken(@colorTwo, 7%);
}
.theme-blue {
//import color definitions
.colorDefs(blue, yellow);
// use them
color: @colorOne;
background-color: @colorTwo;
.gradient1 {
background-image: linear-gradient(top, @darkGradientStart, @darkGradientStop);
}
.gradient1 {
background-image: linear-gradient(top, @lightGradientStart, @lightGradientStop);
}
}
.theme-green {
//import different color definitions
.colorDefs(green, red);
// use them
color: @colorOne;
background-color: @colorTwo;
.gradient1 {
background-image: linear-gradient(top, @darkGradientStart, @darkGradientStop);
}
.gradient1 {
background-image: linear-gradient(top, @lightGradientStart, @lightGradientStop);
}
}
CSS出力の例
.theme-blue {
color: #0000ff;
background-color: #ffff00;
}
.theme-blue .gradient1 {
background-image: linear-gradient(top, #3333ff, #1a1aff);
}
.theme-blue .gradient1 {
background-image: linear-gradient(top, #ffff00, #dbdb00);
}
.theme-green {
color: #008000;
background-color: #ff0000;
}
.theme-green .gradient1 {
background-image: linear-gradient(top, #00b300, #009a00);
}
.theme-green .gradient1 {
background-image: linear-gradient(top, #ff0000, #db0000);
}
4K(つまり多くの)コード行を解く
ed1nh0は、色変数を使用して4K行のコードがあり、「それをミックスインに入れる」ことができないことについてコメントしました。それについていくつかコメントさせてください。
- 4K行のコードが色を定義するためにbodyクラスに依存している場合は、各色を独自のcssファイルに分割し、必要に応じてそのファイルのみをロードする(つまり、すべてのコード色を1つのファイルにグループ化しない)のがおそらく最善です。次に、これは、ボディクラスによって色を本当に制御したいかどうかに疑問を投げかけます。
- 1.で推奨されていることを実行するかどうかに関係なく、色を使用する4Kのラインでこれを処理できると思います。問題は、ミックスインを使用して色の値自体を定義することではなく(つまり、色変数定義の4K行ではなく)、色を使用している繰り返しが必要なプロパティやクラスなどの4K行にあると思います。しかし、その繰り返しは、すべてをミックスインでラップすることによっても同じように簡単に処理できます。したがって、上記の私の元の答えは、これにさらに抽象化することができます(これ
.colorDefs
は上記と同じであり、ここでは繰り返されないことに注意してください):
以下
.themeProperties() { // Imagine inside here the 4K lines of code
// use them
color: @colorOne;
background-color: @colorTwo;
.gradient1 {
background-image: linear-gradient(top, @darkGradientStart, @darkGradientStop);
}
.gradient1 {
background-image: linear-gradient(top, @lightGradientStart, @lightGradientStop);
}
}
.theme-blue {
//import color definitions
.colorDefs(blue, yellow);
.themeProperties(); //4K lines repeated here
}
.theme-green {
//import different color definitions
.colorDefs(green, red);
.themeProperties(); //4K lines repeated here
}
上記は、プロパティによる変数の使用方法に違いはなく、それらのプロパティの値が何であるかを前提としています。「違い」がある場合は、特定の状況でいくつかの微調整ミックスインを実行する必要があるかもしれませんが、その概念は引き続き有効です。