换肤方案

329 阅读2分钟

相关技术

css3 var()

npm包 css-vars-ponyfill

var兼容性 这个表显示ie11支持var,但是ie11只是支持var的部分属性

一、var换肤

1、声明主体变量@primary (less)或 $primary(scss)

2、变量值用var表示,例如$primary: var(--primary,#123456)

3、所有需要改变的颜色都使用该变量

4、获取后端数据得到主题色,为主体插入–primary值,如下

let $sktmain = document.body
let primaryBgc = set16ToRgb(this.userInformation.themeStyle.mainColorValue || '#1063f1', 0.15)
$sktmain.setAttribute('style',`--primary:${this.userInformation.themeStyle.mainColorValue || '#1063f1'};--primaryBgc:${primaryBgc || '#ecf5ff'}`)

换肤原理

利用var操作变量进行换肤,如下图:预先设定scss变量primary,primary,primaryBgc,接收相关css变量--primary-color --primaryBgc-color

把需要换肤的组件的color border-color outline-color :hover :focus :active等均赋值为primary,需要换肤组件的背景色backgroundcolor等均赋值为primary,需要换肤组件的背景色background-color等均赋值为primaryBgc

优点:方便快捷

缺点:不兼容ie,ie11也不兼容

二、cssVars

当获取到后台返回相关主题色时,用cssVars对css变量--primary-color --primaryBgc-color进行改变

| /**`` ``* @function set16ToRgb`` ``* @description 该方法把16进制颜色转成rgba形式,换肤只提供了主题色,有些背景色也是需要根据主题色`` ``* 进行换肤的,所以我们通过该方法把16进制颜色转成rgb形式,同时加上opaticy生成相关背景色`` ``* @returns string rgba(...)`` ``*/``//  如果不用兼容ie,可以直接通过以下方式设置css变量`` ``let $sktmain = document.body.parentNode`` ``let primaryBgc = set16ToRgb(``this``.userInformation.themeStyle.mainColorValue || ``'#1063f1'``, ``0.15``)`` ``$sktmain.setAttribute(``'style'```,--primary-color:{```this``.userInformation.themeStyle.mainColorValue || ``'#1063f1'``};--primaryBgc-color:{primaryBgc || '#ecf5ff'```}`)```//  为了兼容ie换肤,引用cssVars,cssVars能够将var()函数转换为静态值,目前我们项目采用这种import cssVars from 'css-vars-ponyfill'axios().then(res=>{  cssVars({     rootElement: document.body.parentNode,     variables: {        '--primary-color': mainColorValue,        '--primaryBgc-color': primaryBgc,     },  })``})` | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

cssVars原理:便利style link标签相关数据,改变值

优点:兼容性比较好

缺点:性能消耗比较大

注意事项

  • 把需要换肤的组件的样式均先用primary,primary,primaryBgc赋值一下,以便获取到主题色进项改变
  • 关于对esign组件的换肤,请写在项目中的reset-color.scss(reset-color.less)文件内,尽量做到在该文件内部仅对esign组件的换肤颜色进行改变,请保持相关wiki 同步更新  ☁ 天印6.0换肤组件公共scss
  • table中的type为text的button按钮是不需要换肤的,为其添加类名table-button--text   
  • 需要进行换肤的背景色,为其赋值变量$primaryBgc(@primaryBgc)
  • 不需要换肤的颜色无需为其赋值$primary,直接设置属性#1063f1

相关文档

css-vars-ponyfill:jhildenbiddle.github.io/css-vars-po…

var兼容: caniuse.com/?search=var

var:www.runoob.com/cssref/func…