如何有效利用 CSS 自定义属性?
P粉384366923
P粉384366923 2024-01-16 19:00:56
0
1
394

我正在开发一个具有自定义主题设置的应用程序,允许用户选择应用程序用来生成一组 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);
}

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

@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 保留在同一个文件中?

P粉384366923
P粉384366923

全部回复(1)
P粉600402085

我还没有找到将 SCSS 命名空间与 CSS 变量一起使用的方法。 如果您使用@use './abstracts' as *;,它将起作用。 本文提供了一个关于如何使用 scss 创建主题的好示例。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板