美文网首页
2.ant定制主题

2.ant定制主题

作者: 静昕妈妈芦培培 | 来源:发表于2021-04-07 13:31 被阅读0次

    1.按需加载组件定制主题

    1.1 安装babel-plugin-import插件

    npm install babel-plugin-import --save-dev
    

    1.2 babel.config.js配置babel-plugin-import插件

    module.exports = {
      presets: [
        '@vue/cli-plugin-babel/preset'
      ],
      plugins: [
        ['import', {
          libraryName: 'ant-design-vue',
          libraryDirectory: 'es',
          style: true //默认导入的样式文件为less文件
        }]
      ]
    }
    

    注意:因为style:true, 默认导入的式less样式文件,需要安装less-loader来解析less文件

    npm install less-loader@6.0.0 --save-dev
    

    此处我指定了less-loader版本,因为不指定版本会默认安装最新版本,安装会失败报错,而安装less-loader的4,3版本,ant定制主题会失败

    1.3 vue.config.js配置主题定制

    module.exports = {
      lintOnSave: false,
      css: {
        loaderOptions: {
          less: {
            lessOptions: {
              // If you are using less-loader@5 please spread the lessOptions to options directly
              modifyVars: {
                'primary-color': '#eeeeee',
                'link-color': '#1DA57A',
                'border-radius-base': '2px',
              },
              javascriptEnabled: true,
            },
          },
        },
      },
    }
    

    1.4 按需加载ant组件

    import Vue from 'vue'
    import App from './App.vue'
    
    //按需引入:babel-plugin-import会帮你转换为import Button from 'ant-design-vue/lib/button'
    import {Button} from 'ant-design-vue'
    Vue.use(Button)
    Vue.prototype.$message = message
    
    Vue.config.productionTip = false
    
    new Vue({
      render: h => h(App)
    }).$mount('#app')
    

    1.5使用:

    <template>
      <div class="hello">
        <a-button type="primary" @click="btnClick">antd按钮 </a-button>
    
      </div>
    </template>
    
    <script>
    export default {
      name: 'HelloWorld',
      props: {
        msg: String
      },
      methods: {
        btnClick () {
          this.$message.info('这是一条消息')
        }
      }
    }
    </script>
    
    <style scoped>
    
    </style>
    
    image.png

    也可以通过建立一个单独的 less 变量文件,引入这个文件覆盖 antd.less 里的变量。

    建立一个样式文件src/assets/your-theme-file.less

    @primary-color: #ff0000;
    

    注意: #ff0000一定不要用引号括起来。less样式文件声明变量格式如此
    1.3 vue.config.js配置主题定制修改为如下:

    const path = require('path')
    const filePath = path.resolve(__dirname, 'src/assets/your-theme-file.less')
    module.exports = {
      lintOnSave: false,
      css: {
        loaderOptions: {
          less: {
            lessOptions: {
              // If you are using less-loader@5 please spread the lessOptions to options directly
              modifyVars: {
                // 'primary-color': '#eeeeee',
                // 'link-color': '#1DA57A',
                // 'border-radius-base': '2px',
                hack: `true; @import "${filePath}";` //导入自定义样式文件 less
              },
              javascriptEnabled: true,
            }
          }
        }
      }
    }
    

    2. 整体导入组件定制主题

    方式一:

    2.1 在main.js中整体导入组件

    import Vue from 'vue'
    import App from './App.vue'
    
    // 整体导入:
    import antd from 'ant-design-vue'
    // 需要手动导入样式文件,必须是less文件
    import 'ant-design-vue/dist/antd.less'
    
    Vue.use(antd)
    
    Vue.config.productionTip = false
    
    new Vue({
      render: h => h(App)
    }).$mount('#app')
    

    备注:记住一定要导入less样式文件

    2.2 导入的是less样式文件,需要安装less-loader来解析less文件

    npm install less-loader@6.0.0 --save-dev
    

    此处我指定了less-loader版本,因为不指定版本会默认安装最新版本,安装会失败报错,而安装less-loader的4,3版本,ant定制主题会失败

    2.3 vue.config.js配置less

    module.exports = {
      lintOnSave: false,
      css: {
        loaderOptions: {
          less: {
            lessOptions: {
              // If you are using less-loader@5 please spread the lessOptions to options directly
              modifyVars: {
                'primary-color': '#ff0000',
                'link-color': '#1DA57A',
                'border-radius-base': '2px'
              },
              javascriptEnabled: true,
            }
          }
        }
      }
    }
    

    2.4 使用组件

    <template>
      <div class="hello">
        <a-button type="primary" @click="btnClick">antd按钮 </a-button>
    
      </div>
    </template>
    
    <script>
    export default {
      name: 'HelloWorld',
      props: {
        msg: String
      },
      methods: {
        btnClick () {
          this.$message.info('这是一条消息')
        }
      }
    }
    </script>
    
    <style scoped>
    
    </style>
    

    2.5 运行项目,查看效果:按钮变成了红色


    image.png

    也可以通过建立一个单独的 less 变量文件,引入这个文件覆盖 antd.less 里的变量。

    建立一个样式文件src/assets/your-theme-file.less

    @primary-color: #ff0000;
    

    注意: #ff0000一定不要用引号括起来。less样式文件声明变量格式如此
    2.3 vue.config.js配置主题定制修改为如下:

    const path = require('path')
    const filePath = path.resolve(__dirname, 'src/assets/your-theme-file.less')
    module.exports = {
      lintOnSave: false,
      css: {
        loaderOptions: {
          less: {
            lessOptions: {
              // If you are using less-loader@5 please spread the lessOptions to options directly
              modifyVars: {
                // 'primary-color': '#ff0000',
                // 'link-color': '#1DA57A',
                // 'border-radius-base': '2px'
                hack: `true; @import "${filePath}";`
              },
              javascriptEnabled: true
            }
          }
        }
      }
    }
    
    

    方式二:

    2.1 建立一个样式文件src/assets/your-theme-file.less,并在其中导入ant整体样式

    //导入整体的ant样式
    @import '~ant-design-vue/dist/antd.less';
    @primary-color: #ff0000;
    

    2.2 在main.js中整体导入组件,并导入自定义less样式文件

    import Vue from 'vue'
    import App from './App.vue'
    
    // 整体导入:
    import antd from 'ant-design-vue'
    // 导入自定义样式文件,必须是less文件
    import './assets/your-theme-file.less'
    Vue.use(antd)
    
    Vue.config.productionTip = false
    
    new Vue({
      render: h => h(App)
    }).$mount('#app')
    

    2.3 导入的是less样式文件,需要安装less-loader来解析less文件

    npm install less-loader@6.0.0 --save-dev
    

    此处我指定了less-loader版本,因为不指定版本会默认安装最新版本,安装会失败报错,而安装less-loader的4,3版本,ant定制主题会失败

    2.4 vue.config.js配置less-loader

    module.exports = {
      lintOnSave: false,
      css: {
        loaderOptions: {
          less: {
            lessOptions: {
              // If you are using less-loader@5 please spread the lessOptions to options directly
              javascriptEnabled: true
            }
          }
        }
      }
    }
    

    2.5 使用组件

    <template>
      <div class="hello">
        <a-button type="primary" @click="btnClick">antd按钮 </a-button>
    
      </div>
    </template>
    
    <script>
    export default {
      name: 'HelloWorld',
      props: {
        msg: String
      },
      methods: {
        btnClick () {
          this.$message.info('这是一条消息')
        }
      }
    }
    </script>
    
    <style scoped>
    
    </style>
    

    2.6 运行项目,查看效果:按钮变成了红色


    image.png

    未生效解决方法:

    1.注意样式必须加载 less 格式,一个常见的问题就是引入了多份样式,less 的样式被 css 的样式覆盖了。

    2.如果在使用 babel-plugin-import 的 style 配置来引入样式,需要将配置值从 'css' 改为 true , 这样会引入 less 文件。

    module.exports = {
      presets: [
        '@vue/cli-plugin-babel/preset'
      ],
      plugins: [
        ['import', {
          libraryName: 'ant-design-vue',
          libraryDirectory: 'es',
          style: true //默认导入的样式文件为less文件
        }]
      ]
    }
    

    如果是通过 'ant-design-vue/dist/antd.css' 引入样式的,改为 'ant-design-vue/dist/antd.less' 。

    相关文章

      网友评论

          本文标题:2.ant定制主题

          本文链接:https://www.haomeiwen.com/subject/xfgekltx.html