前言:

场景:基于Vue+Element-Ui组件库开发的项目,使用过程中难免会出现许多设计的自定义的特殊样式样式以及背景图,相同组件使用于不同场景情况下,需要进行不同主题的展示,以下解决方法适用于全局快速更换主题。
关于Element-Ui部分的主题切换请结合官方 https://element.eleme.cn/#/zh-CN/theme提供的方式组合使用。有需要了解的可以评论留言,有需要再更新这块的使用示例。

1、定义主题库样式文件【_theme.scss

以下全局主题属性/公用样式名称以及取值,都可以根据自己项目实际使用情况自定义命名,示例文件定义仅为示例使用

$default:(// 默认图片地址baseImageURL: '~@/assets/image/themeA/',/* 基础颜色-------------------------- */black: #333,blackGray: #909399,white: #fff,lightGray: #F1F1F3,lighterGray: #F5F5F5,gray: #999,darkGray: #666 ,red: #d45b5b ,yellow: #dfdb07 ,orange: #FCCD7D ,baseColor: #1f91ec,// 边框颜色borderColor: #F9F9F9 ,borderDarkColor: #ededed ,transparent: rgba(0,0,0,0) ,shadowColor: rgba(#F5F5F5, .3) ,// 深色主题色themeColor: #1b2443,// 浅色主题色themeShallowColor: rgba(78, 92, 96, 0.5),// 主题边框颜色themeBorderColor: #1f91ec,// 主题文字颜色themeTextColor: #1f91ec,// 浅色边框颜色themeBorderLight: #F2F5F8,// 浅色主题themeHoverColor: rgba(#1f91ec, 0.8),/* 基本设置-------------------------- */basicSpace: 10px,basicMargin: 10px,basicPadding: 10px,/* 字体设置-------------------------- */// 选中字体颜色activeFontColor: #1f91ec,// 默认字体颜色defaultFontColor: #333,// 一级标题字体大小headerFontSize: 18px,// 二级标题字体大小secondLevelFontSize: 16px,// 其他字体大小defaultFontSize: 14px,// 默认字体// fontFamily: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","San Francisco","Arial","sans-serif","Microsoft YaHei","微软雅黑",/* 框架左侧样式 */// 菜单栏背景色leftNavBg:#1b2443,// 菜单栏宽度leftNavWidth: 230px,// 菜单栏最小宽度leftNavMinWidth: 64px,// 菜单logo区域高度leftLogoHeight: 140px,// 右侧区域背景色rightMainBg: #F1F1F3,// 菜单默认颜色leftNavColor: #899EB1,// 菜单高亮颜色leftNavActiveColor: #566367,// 菜单高亮背景色leftNavActiveBg: rgba(#4e5c60, 0.5),/* 框架头部样式 */headerHeight: 50px,headerBgColor: #fff,headerColor: #333,headerBorderColor: none,tagNavHeight: 32px,breadcrumbHeight: 40px,/* 面包屑默认颜色*/breadColor: #97a8be,/* 面包屑链接颜色*/breadActiveColor: #A4A4A4,
);
$dark:(// 默认图片地址baseImageURL: '~@/assets/image/themeB/',/* 基础颜色-------------------------- */black: #333,blackGray: #909399,white: #fff,lightGray: #F1F1F3,lighterGray: #F5F5F5,gray: #999,darkGray: #666 ,red: #d45b5b ,yellow: #dfdb07 ,orange: #FCCD7D ,baseColor: #1f91ec,// 边框颜色borderColor: #F9F9F9 ,borderDarkColor: #ededed ,transparent: rgba(0,0,0,0) ,shadowColor: rgba(lightGray, .3) ,// 深色主题色themeColor: #1b2443,// 浅色主题色themeShallowColor: rgba(74, 77, 96,0.5),// 主题边框颜色themeBorderColor: #1f91ec,// 主题文字颜色themeTextColor: #1f91ec,// 浅色边框颜色themeBorderLight: #F2F5F8,// 浅色主题themeHoverColor: rgba(#1f91ec, 0.8),/* 基本设置-------------------------- */basicSpace: 10px,basicMargin: 10px,basicPadding: 10px,/* 字体设置-------------------------- */// 选中字体颜色activeFontColor: #1f91ec,// 默认字体颜色defaultFontColor: #333,// 一级标题字体大小headerFontSize: 18px,// 二级标题字体大小secondLevelFontSize: 16px,// 其他字体大小defaultFontSize: 14px,// 默认字体// fontFamily: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","San Francisco","Arial","sans-serif","Microsoft YaHei","微软雅黑",/* 框架左侧样式 */// 菜单栏背景色leftNavBg: #1b2443,// 菜单栏宽度leftNavWidth: 230px,// 菜单栏最小宽度leftNavMinWidth: 64px,// 菜单logo区域高度leftLogoHeight: 140px,// 右侧区域背景色rightMainBg: #F1F1F3,// 菜单默认颜色leftNavColor: #899EB1,// 菜单高亮颜色leftNavActiveColor: #566367,// 菜单高亮背景色leftNavActiveBg: rgba(#4a4d60, 0.5),/* 框架头部样式 */headerHeight: 50px,headerBgColor: #fff,headerColor: #333,headerBorderColor: none,tagNavHeight: 32px,breadcrumbHeight: 40px,/* 面包屑默认颜色*/breadColor: #97a8be,/* 面包屑链接颜色*/breadActiveColor: #A4A4A4,
);
$themes:(default: $default,dark: $dark
)

2、创建scss混合器【_mixins.scss】

以下代码引用路径,请确保_theme.scss 和 _mixins.scss创建路径归属相同。【如路径不同请注意引用路径】

@import './themes.scss';
@mixin themeify {//$theme-name 主题样式类名, $theme-map样式@each $theme-name, $theme-map in $themes {$theme-map: $theme-map !global; body[data-theme=#{$theme-name}] & { @content;}}
}
// 主题图片加载混合器 $path 图片名称地址
@mixin imageURL($path) {background-image: url(map-get($theme-map, 'baseImageURL') + $path);background-repeat: no-repeat;
}
// 声明一个根据Key获取颜色的函数
@function themed($key) {@return map-get($theme-map, $key);
}

3、index.html中定义全局主题样式属性

<body data-theme="dark">
<!-- 代码区域 -->
</body>

根据_theme.scss定义的主题名称进行有效赋值,为了方便理解,以上使用静态调用方式,系统如需进行记忆动态切换主题,是另一种相对复杂点的方式,本篇章暂不说明。

4、组件中实际使用,根据页面需要引入【testPage.vue】

testPage.vue使用示例

<template><div class="test-page"><!-- 具体代码区域 --></div>
</template>
<style lang="scss" scoped>
@import '~@/assets/style/theme/mixins';
.test-page {@include themeify {padding:10px;box-sizing: border-box;@include imageURL('cl-bg.png');background-position: bottom center;background-size: cover;.header {a {margin-left: 15px;border:solid 1px themed('baseColor');color: themed('baseColor');background: #ffffff;padding:5px 10px;border-radius: 4px;&:hover {background: themed('baseColor');color: #fff;}}}.title {margin: 80px auto 50px;height: 110px;line-height: 110px;text-align: center;@include imageURL('cl-title.png');background-position: top center;}.list {li {@for $i from 1 to 6 {&:nth-child(#{$i}) {@include imageURL('cl-typebg-#{$i}.png');background-position: top center;background-size: cover;}}}}}
}
</style>

懒人更新,如有问题请评论区留言,或者有更优秀的方法请分享互相学习。

scss混合器实现全局更换主题以及相关背景图相关推荐

  1. 信息安全主题的高清PPT背景图110张,打包下载

    网络安全主题高清背景图PPT可用.zip: 点击高速下载

  2. 简述改变计算机桌面背景的方法,win7开关机背景图怎么更换_win7电脑换开关机壁纸图片的方法...

    最近有朋友问小编win7开关机背景图怎么更换的问题,对于这个问题,相信很多朋友都不是太清楚,有时我们会觉得电脑默认的开关机壁纸不好看,那么我们应该如何更换win7开关机背景图呢?别着急,今天小编就针对 ...

  3. IDEA相关配置(特别完整)看完此篇就将所有的IDEA的相关配置都配置好了、设置鼠标滚轮修改字体大小、设置鼠标悬浮提示、设置主题、设置窗体及菜单的字体及字体大小、设置编辑区主题、通过插件更换主题

    文章目录 1.创建模块(Module) 2.常用配置 2.1Appearance & Behavior 2.1.1设置主题 2.1.2设置窗体及菜单的字体及字体大小 (可忽略) 2.1.3补充 ...

  4. hexo+gitHub 个人博客搭建及更换主题历程(特适合入门小白)

    内容涵盖 hexo+gitHub 个人博客搭建 搭建过程中遇到的问题及解决方案 更换主题 1. gitHub 创建博客仓库 (1) 注册Github(如果已注册可以忽略次此步骤) 详细注册步骤请参考: ...

  5. uni-app框架开发App如何更换主题皮肤?

    最近使用uni-app开发App,其中有个功能是可以一键切换App的主题皮肤.其中主题皮肤分为黑夜版和白天版.经过一番研究,终于大功告成,因此记录一下. 之前,在做web端进行更换皮肤的时候,是在页面 ...

  6. 动态更换主题色(换肤功能)

    文章目录 对于可供选择的颜色/主题样式换肤的实现 一个全局class控制样式切换 JS改变href属性值切换样式表,例如 HTML 的 rel 属性下的 alternate 实现: 对于制定动态色值换 ...

  7. element-plus 更换主题色

    element-plus 更换主题色 场景: 简单的定制主题色,并不需要有按钮切换主题色. 实现: 在项目中新建你的theme.scss,代码如下: // style/element/index.sc ...

  8. element-plus更换主题色(有手就行)

    省流版: 在App.vue中加入: <script setup> import { onMounted } from 'vue'onMounted(() => {document.b ...

  9. Ant design vue中实现动态更换主题色

    一.创建vue项目 可视化创建步骤:cmd调出窗口,输入vue ui,自动在浏览器上打开新窗口 输入文件名 ,文件名最好是英文 然后进行配置功能, 根据需求选择配置功能 这里最好选择2.0版本, 可以 ...

最新文章

  1. C++面试宝典2011版
  2. mongoose操作mongodb
  3. Natasha 4.0 探索之路系列(一) 概况
  4. CF25E-Test【AC自动机,bfs】
  5. Java 几种常用 JSON 库性能比较
  6. centos改变文件拥有者_每天学点之CentOS软件二进制包安装
  7. python生成10000个样本数据集_python – 为什么随机抽样比例数据集不是样本量? (pandas .sample()示例)...
  8. Spring @Autowired批注
  9. Android6.0动态权限
  10. Sitecore开发 IP地理定位服务入门
  11. Cockos REAPER 6 for Mac - 热门数字音频制作软件
  12. 关于 librecad 的中文支持
  13. COCO2017 test-dev评估
  14. c语言写打开程序的脚本,详细解析C语言中的开方实现
  15. linux搭建软路由,用 Alpine Linux 搭建软路由
  16. 求生之路2服务器模式修改参数,求生之路2参数修改控制台命令_求生之路2参数修改控制台命令方法_牛游戏网...
  17. gamemaker学习笔记:跳跃
  18. 我是码客,P客,飘客,接客,代客,码客,乘客,普客
  19. Android如何定制主题
  20. finebi-数据更新与定时发邮件

热门文章

  1. MySQL经典练习题及答案,常用SQL语句练习50题,题目转自别人, 答案自己做的
  2. Spine 骨骼动画查看器 Skeleton Viewer_官方文档中文版
  3. 瑟瑟发抖,小白的python第一课——网络爬虫
  4. https怎么防止流量劫持
  5. <马哲>以私有制为基础的商品经济的基本矛盾是什么?2017-12-27
  6. 海康威视工程师谈嵌入式软件
  7. 微信王者有ios的服务器吗,就没有iOS微信区的吗...
  8. [Windows]系统超级管理员权限获取,支持Windows10,11
  9. 洪九果品上市:年营收百亿市值187亿港元 阿里是股东
  10. Django连接MySQL对数据进行网页展示