Css 动态Sass变量
有没有办法根据html元素上的类设置颜色变量?或者用其他方法来实现同样的目标Css 动态Sass变量,css,sass,Css,Sass,有没有办法根据html元素上的类设置颜色变量?或者用其他方法来实现同样的目标 html { &.sunrise { $accent: #37CCBD; $base: #3E4653; $flat: #eceef1; } &.moonlight { $accent: #18c; $base: #2a2a2a; $flat: #f0f0f0; } } 不幸的是,Sass/Scss文件需要编译成Css文件,以便在w
html {
&.sunrise {
$accent: #37CCBD;
$base: #3E4653;
$flat: #eceef1;
}
&.moonlight {
$accent: #18c;
$base: #2a2a2a;
$flat: #f0f0f0;
}
}
不幸的是,Sass/Scss文件需要编译成Css文件,以便在web浏览器中得到支持
由于Css文件不支持变量,您只能在Scss模板中设置变量值,因为Sass编译器将用给定值替换每个位置的变量
这意味着,根据Html文件中包含的类,更改变量的颜色没有帮助,因为Css文件不包含任何变量
你做这件事的唯一方法是:
阅读Html文件以了解使用了什么类,
而不是将Scss模板变量更改为正确的颜色值
以及将Scss模板编译为Css文件
如果您喜欢使用JavaScript,可以执行以下操作: 您将需要一个带有Id的HTML元素和一个决定使用什么颜色的类
<exampleTagg id="Target" class="Sunrise">...</exampleTagg>
第一行将声明一个变量,其中包含exampleTagg元素的值,即具有目标id的元素,然后if语句将查找类sunrise或moonlight的名称,最后,我们将把exampleTagg的背景更改为我们喜欢的颜色
要将此示例用于您自己的目的,请将exampleTagg替换为一些真实的标记,并将exampleProperty更改为有效的Css属性
请注意,此作业不需要SCS,您仍然可以使用它,因为JavaScript将访问您编译的Css文件。这是基本主题。您可能希望使用mixin或include在单个CSS文件中执行多个主题。以下是您将如何使用包括: _theme.scss
section.accent {
background: $accent;
}
.foo {
border: $base;
}
.bar {
color: $flat;
}
main.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 ..
}
是的,问题是,我需要这个来工作。绝对没有办法吗?即使是JS?哦,我很抱歉。我忘了。当然,您可以只使用JavaScript来完成这项工作,但使用SCS或常规CSS并不重要。等等,我会告诉你如何使用JS:没关系,用少一点的东西就行了。这似乎比较容易如果你有时间,我想我更喜欢JS选项?我的整个项目都使用Sass,我真的不想做得太少。当然,让我们看看,我能做的是。。。应该换成…我误解了。我想我可以使用JS来修改Sass变量。这些变量将出现在我的应用程序中的数百个地方。单独编辑它们是不可行的。我需要一些方法来访问Sass变量并编辑它们。不管用什么方法,这都是完全不可能的吗?哦,如果你想用这个小问题,你应该接受另一个答案,因为它提供了这个问题的最佳答案。但是谢谢你接受我的回答我只是觉得如果你能少用一点,那是不公平的,你可以设置它来编译客户端,并以类似的方式工作。但是,这可能会影响性能@colmtuite你做了什么来解决这个问题?我被同样的问题困住了。
@mixin theme($accent, $base, $flat) {
// .. do stuff ..
}