• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

antd 样式隔离实现

武飞扬头像
地铁程序员
帮助1

前端项目的组件库都使用的是 And Design,当一个系统作为另一个系统的子应用时,antd 样式嵌套会出现莫名的样式问题,以及一些在 global 中声明的 antd 样式,会全局污染。基于这种现状,我们需要一个方式将系统之间的 antd 样式进行隔离。

好了,我们看下如何实现,以及实现后带来的一些并发问题如何解决吧。

 

前置知识点

首先为了统一管理和维护,首先我们将要修改的 antd prefixCls 变量维护在 defaultSettings 文件中,defaultSettings 文件的作用是维护一些系统的基础配置。

 
  1.  
    /**
  2.  
    * @file defaultSettings
  3.  
    */
  4.  
    export const prefix = 'ant-r';

一、修改 dom 元素上的 class 名称

使用 antd 的 ConfigProvider 全局化配置,将 prefixCls 默认值 ant 修改为 ant-r,注意:只需在应用外围包裹一次即可全局生效

  1.  
    import { ConfigProvider } from 'antd';
  2.  
    import { prefix } from '../../../config/defaultSettings';
  3.  
     
  4.  
    export default () => (
  5.  
    <ConfigProvider prefixCls={`${prefix}`}>
  6.  
    <App />
  7.  
    </ConfigProvider>
  8.  
    );

二、修改 antd 的 css 前缀 

将 antd css 前缀默认值 ant 改为 ant-r,如果是 umi 项目的话直接在 config 的 theme 属性 中配置即可

  1.  
    /**
  2.  
    * @file theme
  3.  
    */
  4.  
    const { prefix } = require('../config/defaultSettings');
  5.  
    const theme = {
  6.  
    'ant-prefix': prefix,
  7.  
     
  8.  
    };
  9.  
    module.exports = theme;
  10.  
     
  11.  
    /**
  12.  
    * @file config
  13.  
    */
  14.  
    import theme from '../theme';
  15.  
    const { prefix } = require('../config/defaultSettings');
  16.  
    export default defineConfig({
  17.  
    theme,
  18.  
    antd: {
  19.  
    config: {
  20.  
    prefixCls: prefix, # 修改HTML里面的类名前缀
  21.  
    },
  22.  
    },
  23.  
    lessLoader: { modifyVars: { '@ant-prefix': prefix } }, # 对应修改生成的 antd 样式类名
  24.  
    });

学新通

参考:https://juejin.cn/post/7018008695237771277

三、如何在 css module 中 :global 重写 antd 样式

正确写法

学新通

问题 1:Modal.method() 无法展示弹窗。

解决方案:产生原因就不说了,antd 的 FAQ 有说明,感兴趣的可以看看。我们看下如何解决,在应用的入口处添加下方代码:

 学新通

添加后我们发现 modal 可以正常弹出了。

notification 相似:

学新通

问题 2:DefaultFooter 组件的 css 名称不对,导致样式没有加载

解决方案:用 GlobalFooter 代替 DefaultFooter,代码如下:

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhkkgkh
系列文章
更多 icon
同类精品
更多 icon
继续加载