Vue 使用 sass 完成 主题切换

一、项目中创建 themes.scss 用来定义全局的颜色 

$themes: (

  // 日间默认 如 font_color1,font_color2 一套主题设置两种颜色,项目需要集中颜色就定义这个主题下有多少颜色

  light: (

    font_color1: rgb(196, 193, 193),

    font_color2: rgb(110, 109, 109),

    background_color1: rgb(255, 0, 21),

    background_color2: rgb(87, 87, 226),

    border_color1: rgb(231, 181, 181),

    border_color2: rgb(9, 255, 0),

    content_color1:rgb(0, 0, 0),

    content_color2:rgb(255, 255, 250),

  ),

  // 夜间暗黑

  dark: (

    font_color1: rgb(226, 222, 222),

    font_color2: rgb(255, 255, 255),

    background_color1: rgb(87, 87, 226),

    background_color2: rgb(255, 0, 21),

    border_color1: rgb(9, 255, 0),

    border_color2: rgb(231, 181, 181),

    content_color1:rgb(255, 255, 250),

    content_color2:rgb(0, 0, 0),

  )

);



二、新建 handle.scss 用于 遍历主题

@import "./themes.scss";  // 引入上面定义的themes.scss 日间和夜间主题

//遍历主题map

@mixin themeify {

  @each $theme-name, $theme-map in $themes {

    $theme-map: $theme-map !global;

    //这步是判断html的 自定义属性 data-theme的值  #{}是sass的插值表达式

    //& sass嵌套里的父容器标识   @content是混合器插槽,像vue的插槽一样

    [data-theme="#{$theme-name}"] & {

      @content;

    }

  }

}

//声明一个根据Key获取颜色的function

@function themed($key) {

  @return map-get($theme-map, $key);

}

//获取背景颜色

@mixin background_color($color) {

  @include themeify {

    background-color: themed($color);

  }

}

//获取字体颜色

@mixin font_color($color) {

  @include themeify {

    color: themed($color);

  }

}

//获取边框颜色

@mixin border_color($color) {

  @include themeify {

    border-color: themed($color);

  }

}

// 获取内容容器的颜色、

@mixin content_color($color) {

  @include themeify {

    // 内容的背景色

    background-color: themed($color);

    // 还可以接着写代码、 比如透明度什么的

  }

}



三、在根目录下 的vue.config.js 中(如果没有 vue.config.js  自己新建一个)

module.exports = {

  publicPath: './',

  css: {

    loaderOptions: {

      sass: {

            // 这里路径 记得自己改一下

        data: ` @import "@/../src/assets/scss/handle.scss"; ` 

     }

    }

  },

}

写好之后 重新运行一下项目



四、项目中使用


// 举个例子 P标签 文字颜色 边框颜色 和背景颜色

p {

  @include font_color("font_color1");

  @include border_color("border_color1");

  @include content_color("content_color1");

}


成功解决问题记得点个赞

你可能感兴趣的:(Vue 使用 sass 完成 主题切换)