你如何@use css自定义属性?

问题描述 投票:0回答:0

我正在开发一个具有自定义主题设置的应用程序,允许用户选择一种主色,该应用程序使用该主色生成一组 10 个顺风样式颜色变量。我使用 javascript 生成颜色并将它们注入 dom,但在我的研究中我发现不可能注入 scss 变量,因为 dom 只能访问已编译的 css。因此,我不得不使用 css 自定义属性而不是 scss 颜色。

我知道这是一个不寻常的用例,而不是 scss 是如何与颜色一起使用的,但与其重写我的项目,我希望我能找到一个有效的解决方案。

html {
    // Default Colors
    --color-primary-50: #F2F5FD;
    --color-primary-100: #E4EAFB;
    --color-primary-200: #C5D2F7;
    ...
}
const setPalette = function setPaletteCSS(palette) {
    Object.entries(palette).forEach((entry) => {
        const [step, color] = entry;
        document.documentElement.style.setProperty(
            `--color-primary-${step}`, 
            color
        );
    });
}

代码完美运行,但现在我的

main.scss
文件变得太大了,我正在使用7-1架构模式将它拆分,该模式适用于scss文件的其他部分,直到我尝试移动这些颜色。具体来说,我将带有自定义颜色的 html 组件移动到
abstracts/_colors.scss
:

.
└── scss/
    ├── abstracts/
    │   ├── _colors.scss
    │   └── _index.scss
    └── main.scss

我遇到的主要问题是我的组件像这样访问这些变量:

#site-header, #site-footer {
    color: var(--font-color);
    background-color: var(--color-primary-500);
}

我将

abstracts/colors
添加到我的
main.scss
@use
中,就像其他组件一样,但我无法再访问这些颜色属性。

@use './abstracts' as a;

#site-header, #site-footer {
    color: a.var(--font-color);
    background-color: a.var(--color-primary-500);
}

这导致 webpack 无法编译我的 scss 并显示以下错误:

Module build failed (from ./node_modules/sass-loader/dist/cjs.js):
SassError: Undefined function.
   ╷
49 │     color: a.var(--font-color);
   │            ^^^^^^^^^^^^^^^^^^^
   ╵

我明白这个错误,但我不知道我的选择是什么来解决它。由于我坚持使用颜色的 css 自定义属性,有没有办法

@use
它们,或者我是否坚持将所有与颜色相关的 css 保存在同一个文件中?

javascript css webpack dom sass
© www.soinside.com 2019 - 2024. All rights reserved.