我是否可以根据HTML元素上的类设置颜色变量?或者有其他方法来实现同样的目标吗?
html {
&.sunrise {
$accent: #37CCBD;
$base: #3E4653;
$flat: #eceef1;
}
&.moonlight {
$accent: #18c;
$base: #2a2a2a;
$flat: #f0f0f0;
}
}
我是否可以根据HTML元素上的类设置颜色变量?或者有其他方法来实现同样的目标吗?
html {
&.sunrise {
$accent: #37CCBD;
$base: #3E4653;
$flat: #eceef1;
}
&.moonlight {
$accent: #18c;
$base: #2a2a2a;
$flat: #f0f0f0;
}
}
这是基本的主题化。您可以使用mixin或include在单个CSS文件中进行多个主题。以下是使用include的方法:
_theme.scss
section.accent {
background: $accent;
}
.foo {
border: $base;
}
.bar {
color: $flat;
}
主要.scss
html {
&.sunrise {
$accent: #37CCBD;
$base: #3E4653;
$flat: #eceef1;
@import "theme";
}
&.moonlight {
$accent: #18c;
$base: #2a2a2a;
$flat: #f0f0f0;
@import "theme";
}
}
你可以很容易地创建一个 mixin,它接受 3 种颜色作为参数,并在 include 的位置使用它:
@mixin theme($accent, $base, $flat) {
// .. do stuff ..
}
不幸的是,Sass/Scss文件需要被编译成Css文件才能在你的浏览器中得到支持。
由于Css文件不支持变量,因此你只能在Scss模板中设置变量值,因为Sass编译器将使用给定值替换变量(在每个位置上使用变量)。
这意味着,根据在Html文件中包含了哪些类来改变变量的颜色并没有帮助,因为Css文件中不包含任何变量。
你唯一能够做到这件事的方法是:
<exampleTagg id="Target" class="Sunrise">...</exampleTagg>
var CurrentColor = document.getElementById("Target").className;
if (CurrentColor == "sunrise") {
document.exampleTagg.style.exampleProperty = "#37CCBD";
}
else if (CurrentColor == "moonlight") {
document.exampleTagg.style.exampleProperty = "#18c";
}
(第一行将声明一个变量,其中包含我们的exampleTagg元素的值(带有“Target” id),然后if语句将查找我们类的名称(sunrise或moonlight),最后,我们将更改我们的exampleTagg的背景色为我们喜欢的颜色)
要将此示例用于您自己的目的,请将exampleTagg替换为某个真实的标签,并将exampleProperty更改为有效的Css属性。
请注意,您不需要Scss来完成此工作(您仍可以使用它),因为JavaScript将访问您编译的Css文件。