【问题标题】:Overwrite SASS colors, e.g with data-attributes覆盖 SASS 颜色,例如使用数据属性
【发布时间】:2021-01-03 16:26:15
【问题描述】:

我正在尝试实现类似于这里的东西:How to override css prefers-color-scheme setting,不同之处在于我使用的是 SCSS。

定义了一些顶级变量:

$content-primary: #000000;
$content-secondary: #FFFFFF;

我想覆盖这些值,具体取决于客户端上的信息(localStorage,媒体查询)。我首先将数据属性设置为html 元素,例如document.documentElement.setAttribute("data-theme", "dark");.

// Some SCSS magic here checking data attributes
// When data-theme="dark" is set, the following should be applied:
$content-primary: #F1F1F1;
$content-secondary: #222222;

我尝试使用与相关问题中相同的逻辑,但这不起作用。

[data-theme="dark"] {
    $content-primary: #F1F1F1;
    $content-secondary: #222222;
}

这有可能吗?

【问题讨论】:

    标签: html sass styling


    【解决方案1】:

    我在一个项目上完成了主题化并使用了!default Click here to read documentation

    但是看你想做什么,我建议你使用原生CSSvar(--content-primary)

    这个基本 CSS 变量不仅可以基于属性/类/父级等被覆盖。还可以基于媒体查询,这使得它们成为一个令人难以置信的多功能工具。

    【讨论】:

    • 谢谢。我用:root { --content-primary: #000000; --content-secondary: #616161; } $content-primary: var(--content-primary); $content-secondary: var(--content-secondary); [data-theme=dark] { --content-primary: #F1F1F1; --content-secondary: #999999; } 解决了它。这样我就可以将我在.scss 文件中其他地方的变量保留下来。只是出于好奇......这是一个不恰当的解决方案,即!default更清洁?
    • !default 绝对更干净,特别是如果您想拥有两个单独的颜色主题文件,例如base.light.scss 中的默认 Light 主题为 !default,而在 base.dark.scss 中,您只需导入 base.light.scss 并重新定义这些颜色,就这么简单。但是你不会根据选择器动态切换颜色。
    • 好的,感谢您的反馈!我绝对想让用户可以在深色和浅色主题之间切换。
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 2021-12-06
    • 2014-09-19
    • 2021-08-23
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-23
    相关资源
    最近更新 更多