Quasar 主题色改变(vite-plugin)
Original...About 1 min
Quasar 主题色改变(vite-plugin)
有些时候,我们希望能够让用户自定义网页的主题色,对于 Quasar 来说,特别是 primary。更进一步,我们希望主题色分为多阶(好比提供的 red-1,red-2 系列),均能同步改变。
Quasar 提供了 getCssVar 和 setCssVar 两个设置 CSS 变量的函数,其效果是在 DOM 根结点的 style 加上对应的变量声明。
例如 setCssVar("primary", "red"),那么它会设置 --q-primary: red,加上一个 --q- 前缀。这样所有的 primary color 都会变成设定的颜色。
在组件中设置 color="foo" 的原理大致是:附加了一个 .foo 的 class,这个 class 实现了 color: x 或 color: --q-x。设置 bg-color 同理。
为了实现 color="primary-1" 的效果,就需要创建一个 .primary-1 的 class,而它的颜色值为一个变量,可以通过 setCssVar 来设置。
 产生色阶的一个最简单方法就是调亮度, quasar 提供的是 lighten,其作用和 CSS 的类似,将一个颜色按百分比调亮。
如果要实现 .primary-1 到 .primary-10 怎么办?我们使用的是 SCSS,它有循环功能:
@for $var from 1 through 10 {
  .primary-#{$var} {
    color: var(--q-primary-#{$var});
  }
  .bg-primary-#{$var} {
    background-color: var(--q-primary-#{$var});
  }
}相应地,在设置颜色的地方,也可以用循环来赋值:
for (let i = 1; i <= 10; i++) {
  setCssVar(`primary-${i}`, lighten(color, (7 - i) * 15));
}因为 primary 或 secondary 就代表了主题色,如果要让某些元素的颜色随主题色,用自定义的 primary-1 之类的色值就好了。





