webpack插件实现一键动态切换主题色(element-ui)

webpack插件实现一键动态切换主题色(element-ui)

项目中用了element-ui,有切换主题色的需要。但官方的方式,有几个问题:

其实带颜色的样式规则只占了所有css中很少的一部分。所以,我希望可以只替换css中与颜色相关的部分css规则。
于是花了半天时间,写了个webpack插件来实现这个功能。
webpack插件实现自动抽取css中的主题色样式,并一键动态切换主题色(element-ui)
基本思路就是,webpack构建时,在emit事件(准备写入dist结果文件时)中,将即将生成的所有css文件的内容中 带有指定颜色的css规则单独提取出来,再合并为一个theme-colors.css输出文件。然后在切换主题色时,下载这个文件,并替换为需要的颜色,应用到页面上。这样,下载的样式中就只包含颜色相关的css规则,文件较小;同时它已经包含了项目中所有的css中的指定颜色样式,一次下载全部颜色样式都搞定。

经过反复测试,实现的效果比较理想。而且还可以根据需要,替换掉任意数目的颜色。理论上是只要是css的颜色,都可以通过这个插件来提取颜色样式。

具体实施方法:

  1. 下载依赖包,执行命令 npm i -D webpack-theme-color-replacer
  2. 修改配置文件webpack.base.conf.js,修改内容如下:

const forElementUI = require(‘webpack-theme-color-replacer/forElementUI’)
const ThemeColorReplacer = require(‘webpack-theme-color-replacer’)

module.exports = { 
  ..... plugins: [ 
  //生成仅包含颜色的替换样式(主题色等) 
  new ThemeColorReplacer(
           { 
                fileName: 'css/theme-colors.[contenthash:8].css', 
                matchColors: [ ...forElementUI.getElementUISeries(appConfig.themeColor), 
                                          //element-ui主色系列
                                        '#0cdd3a',  
                                          //自定义颜色 
                                        '#c655dd', ],
       changeSelector: forElementUI.changeSelector, isJsUgly: config.isBuild, 
     resolveCss(resultCss) { 
      // optional. Resolve result css code as you wish.
       return resultCss + youCssCode 
    } 
}) ],
}

  
 
  1. 页面配置,配置内容如下:

 Reset
 import changeColor from './changeColor.vue' 
export default { 
  props: {}, 
  data() { return {}; }, 
  methods: { 
    reset() { 
      localStorage.removeItem('theme_color') location.reload()
    }
  }, 
  computed: {}, 
  components: {
    changeColor, footCode
  } 
}

  
 

PS:在具体进行主体色变换时,若需要替换的主体色较多时,在初始化新的主体色数组时,应新增相应数量的色彩元素。否则,匹配的主体色不会生效。

效果:
http://test.hz300.com/webpack4/themeColor.html

插件源码:
https://github.com/hzsrc/webpack-theme-color-replacer

完整项目源码:
https://github.com/hzsrc/vue-element-ui-scaffold-webpack4

展开阅读全文

页面更新:2024-04-15

标签:插件   目的   主题   色系   数组   美文   样式   源码   主体   颜色   规则   效果   页面   文件   项目   内容   动态

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top