Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 动态Sass变量_Css_Sass - Fatal编程技术网

Css 动态Sass变量

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元素上的类设置颜色变量?或者用其他方法来实现同样的目标

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 ..
}