使用js操作sass变量,同时还需要使用sass的mix怎么解决?

发布于 2022-09-12 23:55:17 字数 905 浏览 23 评论 0

想做一个自定义任何主题颜色的系统,现思路如下:

  1. 使用 elementui 的颜色选择器动态选择主题颜色
  2. 将选择的主题颜色动态赋值给 sass 中声明的 $mainColor 全局变量
  3. 使用 sass 的 mix 将 $mainColor 的 浅色(tiniColor) 计算出来

现代码如下:
全局样式 color.scss :

$mainColor: var(--main-color, #0081ff);

// 这是计算 tintColor 的方法
@function tint($color, $percentage) {
    @return mix(#fff, $color, $percentage);
}

this.color已经绑定到颜色选择器:

data() {
    return {
        color: '#0081ff',
    }
},
watch:{
    color(newVal){
        // 在网上找到的别人用 js 动态改变 sass 的变量的办法
        document.getElementsByTagName('body')[0].style.setProperty('--main-color', newVal)
    }
}

按钮在鼠标悬浮时显示一个浅色(tiniColor)

button.primary {
    color: $mainColor;
    
    &:hover {
        color: tint(#{$mainColor}, 10%);
    }
}

报错信息是:var(--main-color, #0081ff) is not a color

不懂就问,有解决的办法或者新的思路吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

李白 2022-09-19 23:55:17

首先呢浏览器里面就没有 sass 这个概念了,他编译之后就是 css 了。

document.getElementsByTagName('body')[0].style.setProperty('--main-color', newVal)

这一坨看上去,也是修改 css 的变量而已。但是 css 变量要这种写。所以看上去,你把 sass 的变量改成 css 的变量就好了。但是我不知道你用css变量会考虑兼容嘛

:root{
    --color: red;
}
荒岛晴空 2022-09-19 23:55:17

有解决这个问题吗?我也在为这个问题苦恼。

二智少女 2022-09-19 23:55:17

思路是有,但是难度很高,换做是我这种菜鸟的话,全情投入半年应该可以搞出来。
那就是魔改 SASS 的代码,使之可以在浏览器中处理 .sass 文件。
处理之后,要么用编译出来的 .css 文件生成本地链接去替换指定的 link[ref=stylesheet]href,要么直接给页面追加 style 标签,要么输出 CSSRules 直接操作 CSSStyleSheet

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文