• 【VUE】ArcoDesign之自定义主题样式和命名空间


    前言

    Arco Design是什么?

    Arco Design 是由字节跳动推出的企业级产品的完整设计和开发解决方案前端组件库

    Arco Design样式基于less技术栈,但也同ElementPlus默认主题,CSS 命名采用 BEM风格,方便使用者覆盖样式。
    Arco Design 提供的默认命名空间为是空的。 在特殊情况下,我们需要自定义命名空间。

    官方文档:


    以下演示按照按需导入模式下进行

    1、环境

    • vue: ^3.3.4
    • vite:^4.4.11
    • @arco-design/web-vue: ^2.52.1
    • @arco-plugins/vite-vue:^1.4.5

    2、目录结构

    |- public
    |- src
       # ...
       |- styles # 新增目录包含以下文件
          |- arco
             |- index.less # 用于后续对Arco Design的专门样式配置入口
          |- base.less # 用于项目全局的扩展
       # ...
    |- vite.config.ts # or vite.config.js
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3、Less自定义主题配置

    3.1、安装相关依赖

    npm install -D less
    # or
    yarn add -D less
    # or
    pnpm add -D less
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.2、arco/index.less配置

    • 组件库 less 样式文件可以引入 @arco-design/web-vue/dist/arco.less 或者 @arco-design/web-vue/es/index.less
    • 如果使用了按需加载的方式引入组件,请确保在按需加载插件中开启了 less 样式文件的导入
    /**
     * @file: src/styles/arco/index.less
     * 
     * 组件库的全局 Token,可以在此查看组件库内置的设计变量以及默认
     * @link https://arco.design/vue/docs/token
     */
     
    /* 设置主色调 */
    @arcoblue-6: #165dff;
    
    /* 引入arco less库 */
    @import "@arco-design/web-vue/es/index.less";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.3、base.less配置

    /**
     * 引入arco less样式
     */
    @import (reference) "./arco/index.less";
    
    • 1
    • 2
    • 3
    • 4

    3.4、vite.config.[ts|js]配置

    以下方案二选一即可

    3.4.1、方案一

    该方案需要@arco-plugins/vite-vue依赖
    由Arco 官方提供的 Vite 插件进行按需加载和组件库样式配置,@arco-plugins/vite-vue 插件会自动加载组件样式
    @link 《按需加载与组件库主题(Arco 插件)》

    依赖

    npm install -D @arco-plugins/vite-vue
    # or
    yarn add -D @arco-plugins/vite-vue
    # or
    pnpm add -D @arco-plugins/vite-vue
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置

    // ...
    import path from 'node:path';
    import {vitePluginForArco} from '@arco-plugins/vite-vue'
    // ...
    
    export default ()=>{
        const viteConfig:UserConfig = {
            // ...
            plugins: [
                // ...
                vitePluginForArco({})
            ],
            // ...
            css: {
                preprocessorOptions: {
                    less: {
    	                modifyVars: {
    	                    // 引入`base.less`
    	                    hack: `true; @import (reference) "${path.resolve('./src/styles/base.less')}";`
    	                },
    	                javascriptEnabled: true,
    	            }
                },
            },
            // ...
        };
    
        return defineConfig(viteConfig);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3.4.2、方案二

    该方案需要unplugin-auto-importunplugin-vue-components依赖

    注意:

    这种方法并不会处理用户在 script 中手动导入的组件,比如 Message 组件,用户仍需要手动导入组件对应的样式文件,例如 @arco-design/web-vue/es/message/style/css.js

    依赖

    npm install -D unplugin-auto-import unplugin-vue-components
    # or
    yarn add -D unplugin-auto-import unplugin-vue-components
    # or
    pnpm add -D unplugin-auto-import unplugin-vue-components
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    配置

    // ...
    import AutoImport from 'unplugin-auto-import/vite'
    import Components from 'unplugin-vue-components/vite';
    import { ArcoResolver } from 'unplugin-vue-components/resolvers';
    // ...
    
    export default ()=>{
        const viteConfig:UserConfig = {
            // ...
            plugins: [
                // ...
                AutoImport({
    		      resolvers: [ArcoResolver()],
    		    }),
    		    Components({
    		      resolvers: [
    		        ArcoResolver({
    		          sideEffect: true
    		        })
    		      ]
    		    })
            ],
            // ...
            css: {
                preprocessorOptions: {
                    less: {
    	                modifyVars: {
    	                    // 引入`base.less`
    	                    hack: `true; @import (reference) "${path.resolve('./src/styles/base.less')}";`
    	                },
    	                javascriptEnabled: true,
    	            }
                },
            },
            // ...
        };
    
        return defineConfig(viteConfig);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    ok,至此基本配置搞定,可以开始在arco/index.less中自定义需要的主题样式了

    4、自定义命名空间配置

    命名空间Arco划分为三个部分

    • css-vars-prefix前缀,
      默认:空
    • ClassName前缀 (arco组件样式class命名前缀名称,
      默认:
      )
    • Component前缀 (arco组件调用时的前缀名称,
      默认:)

    4.1 设置css-vars-prefix前缀

    步骤三的demo代码基础上加上:@arco-vars-prefix变量

    完整样式:

    /**
     * @file src/styles/arco/index.less
     */
    @arco-vars-prefix: 'css-vars-prefix-name';
    
    /* 设置主色调 */
    @arcoblue-6: #165dff;
    
    @import "@arco-design/web-vue/es/index.less";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    修改前:
    在这里插入图片描述
    修改后:
    在这里插入图片描述

    4.2 设置ClassName前缀

    步骤三的demo代码基础上加上:@prefix变量

    打开文件:src/styles/arco/index.less,增加@prefix变量设置:

    @prefix: 'class-name-prefix';
    
    /* 设置主色调 */
    @arcoblue-6: #165dff;
    
    @import "@arco-design/web-vue/es/index.less";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    打开文件:src/App.vue

    
    <template>
      <a-config-provider prefix-cls="class-name-prefix">
        
      a-config-provider>
    template>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改前:
    在这里插入图片描述

    修改后:
    在这里插入图片描述

    4.3 设置 Component调用前缀

    以下基于官方提供的 Vite 插件(@arco-plugins/vite-vue)实现

    打开文件:vite.config.[ts|js]
    找到plugins配置项:

    // ...
    plugins: [
        // ...
        vitePluginForArco({
            componentPrefix: "arco-ui", // 自定义组件前缀名称
        })
    ],
    // ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    修改前:
    在这里插入图片描述
    修改后:
    在这里插入图片描述

  • 相关阅读:
    android NetworkMonitor和ConnectivityService记录
    大数据(9e)图解Flink窗口
    java计算机毕业设计郑工社团交流服务信息平台源码+mysql数据库+系统+lw文档+部署
    vue路由
    坚挺市场下,ICT企业如何赢盈并重持续增长–2022年B2B企业新增长趋势之ICT篇
    讲座记录|1024学科周讲座分享
    嵌入式项目分享| 终极智能手表,全过程+全开源分享
    迄今微软不同时期发布的SQL Server各版本之间的大致区别,供参考查阅
    Android~RxJava实现newSingleThreadExecutor()同等效果
    和数链BaaS化服务体系赋能企业数字经济升级发展
  • 原文地址:https://blog.csdn.net/u011159821/article/details/134078980