我想创建类似于主题选择器的东西。我使用LESS.css。
LESS.css有一个包含主要颜色的变量:
@colorOne: #222;
@colorTwo: #fff;
@darkGradientStart: lighten(@colorOne, 10%);
@darkGradientStop: lighten(@colorOne, 5%);
@lightGradientStart: @colorTwo;
@lightradientStop: darken(@colorTwo, 7%);
如果标签具有如下颜色类,我想更改它们:
<body class='theme-blue'>
然后我在我的less.css中写了这个(在默认变量之后)
.theme-blue{
@colorOne: blue;
}
但它仍然使用默认的#222。它没有被覆盖。
我该如何解决这个问题?
由于
答案 0 :(得分:7)
您无法覆盖LESS中的变量(在同一范围内)。 The documentation具体说:
请注意,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);
}
ed1nh0 评论了使用颜色变量获得4K行代码,而无法“将其置于混合中”。让我就此发表一些意见:
.colorDefs
与上面相同,此处不再重复):<强> LESS 强>
.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
}
以上确实假设属性使用变量的方式没有差异,只是这些属性的值是什么。如果存在任何“差异”,那么在某些情况下可能需要进行一些调整混合,但这个概念应该仍然存在。
答案 1 :(得分:0)
你正在做的事情将在css中编译如下:
.theme-blue{
#222: blue;
}
了解为什么它现在不起作用? :)
如果你试图覆盖颜色样式,你应该采用通常的css方式:
.theme-blue{
color: blue;
}
答案 2 :(得分:0)
@blue:#0000FF;
@green:#00FF00;
.theme-blue {
color:@blue;
}
.theme-green {
color:@green;
}