全网最详细官网一键换肤教程

一键换肤有两种方法可以
第一种是通过CSS3 filter(滤镜) 属性
在App.vue里面直接写上

html {
    -webkit-filter: grayscale(100%);
    -moz-filter: grayscale(100%);
    -ms-filter: grayscale(100%);
    -o-filter: grayscale(100%);
    filter: grayscale(100%);
    filter: gray;
    filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
  }

直接这样 全网站就变成灰色了
如果想要通过后台控制原色跟灰色之间的切换,这个功能
将上面那段代码弄成一个css文件,通过动态引入css的方式进行控制

    onThemeChanged(d) {
      if (d == '灰色主题') {
        import("@/assets/css/gray.css");
      }
    },

写一个方法 通过接口调用的方式 看后端返回什么 如果返回的是灰色就用这个css引入 如果不是 就恢复原色彩
那如果不想要灰色主题呢 这种方法只适合灰色主题的时候使用,那要是红色喜庆主题呢就得用到下面这种方法了

用到了scss
首先要安装号scss
1.定义一个scss文件 定义想要变化的颜色和主题 可以是字体颜色 背景颜色 图片引入(引入不同颜色得图片)等等

// -------------------------------更换的系统主题颜色2(Standard)-----------------------------------//
// 菜单所有未选中文字样式
$menuTextStandard: #333333;
// 一级菜单样式
$menuBgStandard: #ffffff;
// 一级菜单鼠标悬浮
$menuHoverStandard: #f7f7f7;
// 一级菜单选中时文字样式
$subMenuActiveTextStandard: #82ba00;
// 选中背景:
$subMenuActiveBgStandard: #e6f1cc;
// -------------------------------更换的系统主题颜色3(StandardRed)-----------------------------------//
// 菜单所有未选中文字样式
$menuTextStandardRed: #red;
// 一级菜单样式
$menuBgStandardRed: #ffffff;
// 一级菜单鼠标悬浮
$menuHoverStandardRed: #f7f7f7;
// 一级菜单选中时文字样式
$subMenuActiveTextStandardRed: #911844;
// 选中背景:
$subMenuActiveBgStandardRed: #e9d1da;

2.为需要切换的5个颜色在下面定义方法动态切换颜色:(注意部分样式要加 import 才会生效)

@mixin menuText($color) {
  color: $color;
 
  //   /*判断匹配*/
  [data-theme="standard"] & {
    color: $menuTextStandard;
  }
 
  [data-theme="standardRed"] & {
    color: $menuTextStandardRed;
  }
 
  [data-theme="standardSkyBlue"] & {
    color: $menuTextStandardSkyBlue;
  }
}
 
@mixin menuBg($color) {
  background-color: $color !important;
 
  //   /*判断匹配*/
  [data-theme="standard"] & {
    background-color: $menuBgStandard !important;
  }
 
  [data-theme="standardRed"] & {
    background-color: $menuBgStandardRed !important;
  }
 
  [data-theme="standardSkyBlue"] & {
    background-color: $menuBgStandardSkyBlue !important;
  }
}
 
@mixin menuHover($color) {
  background-color: $color;
 
  //   /*判断匹配*/
  [data-theme="standard"] & {
    background-color: $menuHoverStandard;
  }
 
  [data-theme="standardRed"] & {
    background-color: $menuHoverStandardRed;
  }
 
  [data-theme="standardSkyBlue"] & {
    background-color: $menuHoverStandardSkyBlue;
  }
}
 
@mixin subMenuActiveText($color) {
  color: $color !important;
 
  //   /*判断匹配*/
  [data-theme="standard"] & {
    color: $subMenuActiveTextStandard !important;
  }
 
  [data-theme="standardRed"] & {
    color: $subMenuActiveTextStandardRed !important;
  }
 
  [data-theme="standardSkyBlue"] & {
    color: $subMenuActiveTextStandardSkyBlue !important;
  }
}
 
@mixin subMenuActiveBg($color) {
  background-color: $color !important;
 
  //   /*判断匹配*/
  [data-theme="standard"] & {
    background-color: $subMenuActiveBgStandard !important;
  }
 
  [data-theme="standardRed"] & {
    background-color: $subMenuActiveBgStandardRed !important;
  }
 
  [data-theme="standardSkyBlue"] & {
    background-color: $subMenuActiveBgStandardSkyBlue !important;
  }
 
}

这两段代码可以写到一个文件里面
3.在mian.js里面引入
'import './assets/styles/variables.scss
4.在所有页面需要变色的颜色上使用:

// color:#f7f7f7  改为:
@include menuText(); 

这个可以是字体颜色 背景颜色 更可以是背景图片之类的 不改变布局 只改变样式
5.App.vue 中一键全局更改主题颜色:

function setAttribute(theme) {
      window.document.documentElement.setAttribute("data-theme", theme);
 }
 setAttribute("standard");  // 应用主题2 
 setAttribute("standardRed");  // 应用主题3

这样的话就可以实现根据后台接口返回的内容实现页面样式切换了
文章参考:vue 结合scss实现前台主题颜色动态变化

你可能感兴趣的:(vue,css,css3,前端)