iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue+webpack更换主题的方法有哪些
  • 471
分享到

vue+webpack更换主题的方法有哪些

2024-04-02 19:04:59 471人浏览 安东尼
摘要

这篇文章主要为大家展示了“Vue+webpack更换主题的方法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue+WEBpack更换主题的方法有哪些”这

这篇文章主要为大家展示了“Vue+webpack更换主题的方法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue+WEBpack更换主题的方法有哪些”这篇文章吧。

需求:由于业务需要,我们需要做多套皮肤

调研了下当前行业的实现方案,五花八门良莠不齐,在此总结下各种方案有优劣及复杂度,供大家快速定位到符合自己业务的方案,以vue 单页应用为业务场景

方式一:class切换方式

实现:

在每个需要更换的页面定义多个class,根据运行时标识动态的切换class名称实现加载不同的样式,这种方式较为简单

优点:

  • 不需要修改构建工具相关

  • 业务开发过程可以实现,没有限制

  • 支持动态切换

缺点:

  • 逻辑分散耦合在各个页面,一旦需要修改,涉及修改的页面较多

  • 代码需要预先内置,不支持动态颜色修改

方式二:ElementUI的实现

实现:

对主题涉及的颜色使用特殊值

如:UI需要白色#ffffff色值的时候使用一个相近的特征值颜色 如:#fffffe

// 将默认样式特征值替换为变量,用于多次替换
   getStyleTemplate(data) {
    const colORMap = {
     '#fffffe': 'text_color'
    };
    Object.keys(colorMap).forEach(key => {
     const value = colorMap[key];
     data = data.replace(new RegExp(key, 'ig'), value);
    });
    return data;
   },

在代码运行时动态获取到需要修改的颜色值

如: 需要修改#fffffe =》 #ff00ff

// 通过用户操作或者接口,获取到要替换的色值
 colors:{
     text_color: '#ff00ff'
    }

查找页面所有style标签将其色值#fffffe正则匹配出来,替换为 #ff00ff

// 获取默认样式,可以从已加载的 style 中获取也可以从 CSS link 获取
   getIndexStyle() {
    document.querySelectorAll('style').forEach(item=>{
     this.originalStyle += this.getStyleTemplate(item.textContent);
    })
   },
   getCssLink(){
     this.get('./cssPath.css').then(JSON=>{
       this.originalStyle = this.getStyleTemplate(json.data);
     })
   }

在页面新加标签style覆盖默认值

// 替换默认样式表,插入 style 标签覆盖样式
   writeNewStyle() {
    let cssText = this.originalStyle;
    log(cssText)
    Object.keys(this.colors).forEach(key => {
     cssText = cssText.replace(new RegExp('(:|\\s+)' + key, 'g'), '$1' + this.colors[key]);
    });
    cssText = cssText.replace(/\n/g,'')
    if (this.originalStylesheetCount === document.styleSheets.length) {
     const style = document.createElement('style');
     style.innerText = cssText;
     document.head.appendChild(style);
    } else {
     document.head.lastChild.innerText = cssText;
    }
   },

优点:

  • 支持动态切换

  • 支持动态色值

  • 不需要内置多份样式

缺点:

  • 业务开发过程中需要对ui给出的色值重定义,业务开发需要有一定的规则

  • 无法修改背景图片

  • 无法对懒加载的样式做处理,需要初始化加载全局所有样式

const ExtractTextPlugin = require('extract-text-webpack-plugin')

// 抽离css
 module: {
 loaders: [
      {//抽离css 通过link加载
        test: /\.css$/,
        loader: ExtractTextPlugin.extract({ 
        fallback: 'style-loader', 
        use: 'css-loader'
        })
      }
      ...
      
 plugins: [
    new ExtractTextPlugin({ 
    filename: 'css/[name].css'
    allChunks: true // 打包所有页面css到同一个css 文件
    })
  ]
  • 无法动态修改背景图片

方式三:编译时多主题全量构建

实现:

  • 定义多套样式

  • 构建时将多套样式主题作为独立构建入口,构建出主题静态文件css文件

  • 业务运行时动态加载不同的主题文件

优点:

  • 支持动态切换主题

  • 业务开发样式分离

  • 编译时构建性能较好 缺点:

  • 构建工具配置较为复杂,适用单入口应用,对多入口的支持不友好

  • 需要定义全局 less 文件,在入口引入

  • 业务需要额外操作

配合 rel="alternate stylesheet" 可预加载备选主题样式

方式四: 编译时选择性构建

实现:

  • 内置多套皮肤

  • 构建时传入参数,根据不同的构建参数加载不同的主题样式文件

优点:

  • 构建工具配置较为简单,不需要业务做额外操作

  • 多入口应用支持度好

缺点:

  • 不支持动态切换

  • 多个项目需要构建多次,需要构建系统支持

方式五:less动态变量

实现:

  • 修改构建脚本,将所有页面less文件抽到同一个文件中

  • 不编译less,页面直接加载less文件

  • 使用less.js 在客户端编译less 文件

less: {
    modifyVars: {},
    javascriptEnabled: true
   }

优点:

  • 支持动态切换

  • 支持动态色值

缺点:

  • 客户端编译较耗性能/耗时

  • 需要额外加载less.js mini文件size: 131KB

方式六:css变量

实现:

在需要变化的css属性定义变量

:root {
 --main-bg-color: pink;
}

body {
 background-color: var(--main-bg-color);
}

在运行时动态的修改变量

document.body.style.setProperty('--primary', '#7F583F');

优点:

  • 浏览器原生支持,无需额外操作

  • 支持动态色值

缺点:

  • 低版本兼容性不好 iOS Safari 9.3、 Android 5、 chrome forAndroid 76

UC、QQ、Baidu 等国内浏览器支持度较差

方式七: import动态加载

实现:

  • 业务中预定义多套主题

  • 运行时根据变量动态加载对应主题

if(a){
  import('./thems/a/base.less')
}else if(b){
   import('./thems/b/base.less')
}

优点:

  • 支持动态切换

  • 实现简单

缺点:

  • 不支持动态色值

  • 需要全局定义多套样式表

  • 全局定义 class 无法定义变量在 vue style 中引用变量

方式动态切换动态色值支持变量实现复杂度兼容性性能维护性
class切换方式简单良好良好
ElementUI的实现中等良好一般
编译时多主题全量构建复杂良好一般
编译时选择性构建中等良好良好
less变量复杂良好
css变量中等良好
import动态加载简单良好良好

注:

  • 动态切换:是否支持在运行时切换皮肤

  • 动态设置:是否支持在运行时动态设置皮肤颜色

  • 支持变量:是否可以再全局定义变量 less 文件,然后在不同的页面引用 less,依赖其中的变量,还是需要在全局 less 文件里面定义全局 class

  • 实现复杂度: 需要修改的代码量包括构建工具和业务代码

  • 兼容性: 主流浏览器支持程度

  • 性能:包括代码的首屏加载的 size、切换的速度、切换的时候会不会有闪动

以上是“vue+webpack更换主题的方法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: vue+webpack更换主题的方法有哪些

本文链接: https://www.lsjlt.com/news/69600.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue+webpack更换主题的方法有哪些
    这篇文章主要为大家展示了“vue+webpack更换主题的方法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue+webpack更换主题的方法有哪些”这...
    99+
    2024-04-02
  • webpack的面试题有哪些
    这篇文章将为大家详细讲解有关webpack的面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。webpack 的构建流程是什么初始化参数:解析webpack配置参...
    99+
    2024-04-02
  • linux更改主机名的方法有哪些
    在Linux系统中,可以通过以下几种方法来更改主机名: 使用命令行:可以使用hostname命令来更改主机名。例如,要将主机名更改...
    99+
    2024-02-29
    linux
  • vue webpack可打包的文件有哪些
    本篇内容主要讲解“vue webpack可打包的文件有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue webpack可打包的文件有哪些”吧!在vue中,webpack可以将js、css...
    99+
    2023-07-04
  • vue时间转换的方式有哪些
    这篇“vue时间转换的方式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue时间转换的方式有哪些”文章吧。VUE 时...
    99+
    2023-06-30
  • CSS样式更改之2D转换的方法有哪些
    本篇内容介绍了“CSS样式更改之2D转换的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!2D转换...
    99+
    2024-04-02
  • 计算机网络中更换IP的方法有哪些
    这篇文章将为大家详细讲解有关计算机网络中更换IP的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。现如今很多用户都需要修改自己本机的IP地址,下面列举介个切换IP地址的方法。在浏览器上手动切换代理...
    99+
    2023-06-15
  • PyCharm怎样更改主题_PyCharm更改主题的方法
    首先打开软件找到file。 打开找到settings。 找到左侧appearance&behavior。 打开找到appearance。 然后找到右侧的theme。 打...
    99+
    2024-05-10
    pycharm
  • 更换虚拟主机需要注意哪些问题
    更换虚拟主机时需要注意的问题有:1.空间的选择,避免网站权重下降;2.备份现有网站,防止链接发生更改、错误;3.新旧空间同步运行,避免客户流失;4.域名解析,绑定原来空间地址;具体分析如下:空间的选择为了避免频繁更换虚拟主机而导致网站权重的...
    99+
    2024-04-02
  • 基于webpack实用配置方法有哪些
    小编给大家分享一下基于webpack实用配置方法有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、webpack.config.js配置文件为://处理共用、通用的js var&nb...
    99+
    2024-04-02
  • 切换ip的方法有哪些
    这篇文章主要讲解了“切换ip的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“切换ip的方法有哪些”吧!1、电脑手动换ip。查看当前计算机IP地址。WiFi重启,等待后关闭飞行模式,...
    99+
    2023-06-20
  • Vue监听的方法有哪些
    这篇“Vue监听的方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue监听的方法...
    99+
    2024-04-02
  • win7更换主题会导致个性化图标也被更换的解决方法
      会弄个性化图标的人,经常在看腻一个主题的时候,都会选择换一个主题,但是最悲剧的事情就是。我一换主题所有的个性化图标都要重新设置一次,有没有方法让我更换主题个性化图标还存在呢   1、右键桌面空白处,选择个性化设置 ...
    99+
    2023-06-01
    win7 更换主题 个性化图标 解决 图标 主题 个性化 方法
  • vue传值的方法有哪些
    这篇文章给大家分享的是有关vue传值的方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。vue是什么Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它大型框架的区别是,使用Vue可以...
    99+
    2023-06-14
  • vue的通信方法有哪些
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。都知道组件是vue最强大的功能之一,vue中每一个.vue我们都可以视之为一个组件通信指的是发送者通过某种媒体以某种格式来传递信息到收信者以达到某个目的。广义上,任何信息...
    99+
    2023-05-14
    Vue 组件通信
  • pip换源方法有哪些
    pip换源方法有修改pip配置文件、使用命令行参数、使用环境变量和使用第三方工具。详细介绍:1、修改pip配置文件,编辑pip.conf文件,在其中添加[global]index-url = 镜像源地址;2、使用命令行参数,在使用pip安装...
    99+
    2023-11-23
    pip换源 pip
  • 解决香港云主机问题的方法有哪些
    解决香港云主机问题的方法:1. 香港云主机出现问题联系云服务商解决或维修。2. 服务器软件和硬件无法正常使用,可以替换云服务器。3. 通过降低垃圾码、优化网站对网站进行调整。4.采用CDN服务,抵御入侵攻击。具体内容如下:与云服务商联系。如...
    99+
    2024-04-02
  • 有哪些替换if-else的方法
    这篇文章主要介绍“有哪些替换if-else的方法”,在日常操作中,相信很多人在有哪些替换if-else的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”有哪些替换if-el...
    99+
    2024-04-02
  • android fragment切换的方法有哪些
    Android中Fragment切换的方法有以下几种:1. 使用FragmentManager的replace()方法:通过Frag...
    99+
    2023-08-12
    android fragment
  • JavaScript交换值的方法有哪些
    JavaScript交换值的方法有哪些,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。早期之前,在 JS 中交换值,我们主要还是使用临时变量。E...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作