css - 如何根据 sass 中的选择器更改变量
问题描述
我想在我的项目中切换主题,并且我使用 sass 作为我的 css 预处理器。我已经为一个主题声明了所有变量,我想根据选择器更改声明变量的值。我目前的代码:
$nightSelector: '.night';
$daySelector: '.day';
#{$nightSelector} {
$headerBgColor: #333;
}
#{$daySelector} {
$headerBgColor: #f3f4f8;
}
header {
background: $headerBgColor;
}
使用未定义的 $headerBgColor 获取编译错误。有什么正确的方法可以做到这一点吗?或者,提供任何解决方案来完成它。我是 vue 作为我的前端框架。提前致谢。
解决方案
SCSS 变量是静态的(用于生成 CSS 输出),为什么您不能使用它们根据上下文动态更改值(这是 CSS 变量的工作)。
示例 1 – 仅 SCSS 变量
SCSS
$nightSelector: '.night';
$daySelector : '.day';
header {
#{$nightSelector} &,
&#{$nightSelector} { background: #333; }
#{$daySelector} &,
&#{$daySelector} { background: #f3f4f8; }
}
CSS 输出
.night header, header.night {
background: #333;
}
.day header, header.day {
background: #f3f4f8;
}
HTML
<header class="night">Lorem</header>
<header class="day">Lorem</header>
<body class="night">
<header>Lorem</header>
</body>
<body class="day">
<header>Lorem</header>
</body>
示例 2 – SCSS + CSS 变量
SCSS
$nightSelector: '.night';
$daySelector: '.day';
#{$nightSelector} {
--header-bg-color: #333;
}
#{$daySelector} {
--header-bg-color: #f3f4f8;
}
header {
background: var(--header-bg-color);
}
CSS 输出
.night {
--header-bg-color: #333;
}
.day {
--header-bg-color: #333;
}
header {
background: var(--header-bg-color);
}
HTML
<header class="night">Lorem</header>
<header class="day">Lorem</header>
<body class="night">
<header>Lorem</header>
</body>
<body class="day">
<header>Lorem</header>
</body>
推荐阅读
- authentication - 401后重定向到询问页面 - 烧瓶
- python - 链表如何到达第二个节点
- asp.net - 在 docker 镜像中生成开发证书
- python - 无法在 ubuntu 中加载动态库“libcudnn.so.8”
- python - 用python opencv绘制螺旋正方形
- node.js - 不同内容类型的 NodeJS 服务器响应
- objective-c - 使用 UTF-8 字符串从 Go 调用 Objective-C
- terraform - Terraform 在升级时会破坏 RDS 集群内的实例
- laravel - 使用自定义用户获取“预期”网址
- .htaccess - 奇怪的 RewriteRule 导致错误