前端全局注册样式root伪类

web 添加主题样式注册到root伪类

注册和使用

注册:
:root{ --sansi-theme-c1: red;}
使用
.bgView{ background: var(--sansi-theme-c1, red) }

动态注册和修改
  state.currentTheme = theme
  const cssRule = document.styleSheets[0].cssRules[0]
  // 判断第一个样式表的第一条规则是否存在,防止和饿了么的注册存在冲突
  const isExist = cssRule['selectorText'] === ':root' && cssRule['cssText'].indexOf('--sansi-theme') > -1
  if (isExist)  document.styleSheets[0].deleteRule(0)
  let views = state.currentTheme.views
 // 动态修改主题
  let styleString :string = ''
  Object.keys(views).forEach((key)=>{
      Object.keys(views[key]).forEach((key1)=>{
        const str = `--sansi-theme-${key}-${key1}:` + (views[key][key1].value || `var(--sansi-theme-${views[key][key1]?.default})`) + ';'
        styleString +=  str
      })
  })
  const themeRule = `:root{
    --sansi-theme-c1: ${state.currentTheme.colors.c1.value};
    --sansi-theme-c2: ${state.currentTheme.colors.c2.value};
    --sansi-theme-c3: ${state.currentTheme.colors.c3.value};
    --sansi-theme-c4: ${state.currentTheme.colors.c4.value};
    --sansi-theme-c5: ${state.currentTheme.colors.c5.value};
    --sansi-theme-c6: ${state.currentTheme.colors.c6.value};
    --sansi-theme-c7: ${state.currentTheme.colors.c7.value};
    --sansi-theme-c8: ${state.currentTheme.colors.c8.value};
    --sansi-theme-c9: ${state.currentTheme.colors.c9.value};
    ${styleString}
    }
  `
  document.styleSheets[0].insertRule(themeRule, 0)
效果

将样式注册到root伪类中,全局使用var(--sansi-theme-c1)即可设置样式
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值