有没有办法在SCSS中有条件地替换全局变量?

时间:2019-09-04 09:40:03

标签: css sass media-queries

我最近发现了“ prefers-color-scheme”媒体查询,并发现大多数常见浏览器的较新版本都与之兼容。

我想制作一些SCSS代码来生成全局变量,以根据“ prefers-color-scheme”的值导出该变量,以避免重复的“主题类”。

$schemeColor: #eeeeee !default;
$reverseColor: #333333 !default;
$textColor: #000000 !default;


@media (prefers-color-scheme: dark){
  $schemeColor: #333333 !global;
  $reverseColor: #eeeeee !global;
  $textColor: #FFFFFF !global;
}
@media (prefers-color-scheme: light) {
    $schemeColor: #eeeeee !global;
    $reverseColor: #333333 !global;
    $textColor: #000000 !global;
}

当我在这段代码之后使用其中一个变量时,无论偏好颜色方案是什么,存储在变量中的值将是最后写入的值

(此处:在@media (prefers-color-scheme: light)中设置的值)。

我尝试在媒体查询中创建类。
当我这样做时,可以根据颜色方案正确应用在媒体查询中声明的类,但是变量会继续存储它们被设置为的最后一个值。

1 个答案:

答案 0 :(得分:0)

据我所知,这不能简单地通过SCSS是预处理程序来完成,因此,您在SCSS中生成的代码将转换为CSS,并且您使用的所有变量都将转换为CSS。价值。

如果要使用变量并按规则进行更改,则应使用CSS变量,如下所示:

:root {
  --main-bg-color: coral; 
}

 @media (prefers-color-scheme: dark){
 :root {
  --main-bg-color: red; 
}
}

.element{
  background-color: var(--main-bg-color);
}