vue+iview+less 实现一键换肤

柔光的暖阳◎ 2023-07-01 06:30 70阅读 0赞

传送门:Less 快速入门

1. 准备两个less文件:

1.1 theme.less 用于定义控制样式的函数

  1. .theme(
  2. @Background: #1D2B40,
  3. @Border: #000017,
  4. ){
  5. .header{
  6. background: @Background;
  7. border-bottom: 1px solid @Border;
  8. }
  9. }

2.2 color.less 用于调用函数传值

  1. @import url('./theme.less');
  2. /* 黑色主题(默认主题) */
  3. .theme_default {
  4. .theme()
  5. }
  6. /* 蓝色主题(传入要更换的颜色) */
  7. .theme_blue{
  8. .theme(
  9. @Background: #377DFF,
  10. @Border: #0167DF,
  11. )
  12. }

2. 在main.js导入color.less 作为全局样式:

  1. import './less/color.less';

3.添加点击换肤的事件:

  1. <DropdownMenu slot="list" >
  2. <DropdownItem @click.native="changeTheme('theme_default')">黑色风格</DropdownItem>
  3. <DropdownItem @click.native="changeTheme('theme_blue')">蓝色风格</DropdownItem>
  4. </DropdownMenu>
  5. //点击换肤事件
  6. changeTheme(theme){
  7. //给body添加class名,并将该class保存到localstorage中
  8. document.body.className = theme;
  9. localStorage.setItem('themeColor', theme);
  10. //把当前主题值传到其他组件...
  11. //areaUtil.$emit('changeThemes', theme);
  12. }

4. 在index.html文件里给body初始化的时候添加class:

  1. <script> var bodyClass = localStorage.getItem('themeColor') ? localStorage.getItem('themeColor') : 'theme_default'; document.body.className = bodyClass; </script>

优点:易于理解,快速上手开发
缺点:需要把组件中需要换颜色或图标的样式单独拎出来写,不方便维护,因此应该注意变量名语义化、多写注释

发表评论

表情:
评论列表 (有 0 条评论,70人围观)

还没有评论,来说两句吧...

相关阅读