antd Modal弹窗设置滚动条、滚动条样式

文章介绍了如何在less中应用全局样式,并在Vue项目中使用scss的::v-deep穿透第三方组件库的样式。特别提到在Modal弹窗上设置唯一类名,如batchModal,并在该类名下进行样式穿透和修改,确保样式只作用于特定的弹窗。示例代码展示了如何改变ant-modal的各个部分的样式,包括颜色、布局和滚动条样式。

 使用的less的global样式穿透,如果是VUE使用scss  ::v-deep等方式对第三方组件库样式穿透。需要注意的是样式作用域非全局的使用唯一类名嵌套。例如Modal弹窗,我在modal上设置了className='batchModal' ,在.batchModal进行穿透和修改,其样式只作用于该类名的弹窗。

效果图先奉上(略丑):

样式代码如下: 

.batchModal {
  width: 874px !important;
  :global(.ant-modal-content){
    :global(.anticon){
      color: #fff;
    }
    :global(.ant-modal-footer){
      padding: 10px 16px 24px 16px;
      text-align: center;
      background: transparent;
      border-top: none;
      border-radius: 0 0 8px 8px;
      :global(.ant-btn + .ant-btn:not(.ant-dropdown-trigger)){
        margin-bottom: 0;
        margin-left: 24px;
      }
    }
    :global(.ant-modal-header){
      background-color: #2d7cff;
      border-bottom: none;
      :global(.ant-modal-title){
        font-size: 20px;
        font-weight: 400;
        text-align: left;
        color: #fff;
        line-height: 24px;
      }
    }
    :global(.ant-modal-body) {
      height: 600px;
      overflow: auto;
      // 滚动条样式写在body类名上
      &::-webkit-scrollbar {
        width: 6px;
        height: 4px;
      }
      &::-webkit-scrollbar-thumb {
        background: rgba(149, 146, 146, 0.2);
        border-radius: 10px;
        box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
      }
      &::-webkit-scrollbar-track {
        background: rgba(0, 0, 0, 0.1);
        border-radius: 10;
        box-shadow: inset 0 0 5px rgba(205, 203, 203, 0.2);
      }
    }
  } 
}

### 优化 Ant Design Modal 弹窗加载速度 Ant Design 的 `Modal` 组件在某些场景下可能会出现加载缓慢的问题,尤其是在模态框内容复杂、数据加载量大或网络请求耗时较长的情况下。为了解决这个问题,可以从以下几个方面进行优化。 #### 1. 延迟加载(Lazy Load)内容 在 `Modal` 初始化时不立即加载全部内容,而是等到用户点击打开弹窗时才进行数据获取或组件渲染。可以使用 `visible` 属性控制内容是否渲染,结合 `useMemo` 或 `useEffect` 来避免重复渲染。 ```jsx import { Modal } from &#39;antd&#39;; import React, { useState, useMemo } from &#39;react&#39;; const LazyModal = ({ fetchData }) => { const [visible, setVisible] = useState(false); const [data, setData] = useState(null); const loadData = async () => { const result = await fetchData(); setData(result); }; const modalContent = useMemo(() => { if (!data) return &#39;Loading...&#39;; return <div>{/* 渲染复杂内容 */}</div>; }, [data]); return ( <> <button onClick={() => { setVisible(true); loadData(); }}>打开弹窗</button> <Modal title="延迟加载弹窗" visible={visible} onCancel={() => setVisible(false)} footer={null} > {modalContent} </Modal> </> ); }; ``` #### 2. 使用 `destroyOnClose` 属性 设置 `destroyOnClose` 属性可以让 `Modal` 在关闭时销毁其子组件,从而释放内存并避免重复渲染带来的性能损耗。 ```jsx <Modal title="优化弹窗" visible={visible} onCancel={() => setVisible(false)} destroyOnClose > <ComplexComponent /> </Modal> ``` #### 3. 优化弹窗内容的渲染性能 如果 `Modal` 内部包含大量组件或复杂结构,应对其进行性能优化。例如使用 `React.memo` 或 `useMemo` 来避免不必要的重渲染。 ```jsx const MemoizedContent = React.memo(({ data }) => ( <div>{/* 依赖 data 渲染的复杂内容 */}</div> )); ``` #### 4. 预加载数据或组件 在用户尚未打开弹窗之前,可以预先加载数据或异步加载组件,从而减少用户点击后等待的时间。 ```jsx useEffect(() => { // 页面加载时预取数据 fetchData().then(setData); }, []); ``` #### 5. 使用骨架屏或加载动画 在数据加载完成前,可以展示骨架屏或加载动画,提升用户体验,让用户感知到内容正在加载中。 ```jsx {!data ? ( <div>加载中...</div> ) : ( <div>{/* 实际内容 */}</div> )} ``` #### 6. 使用服务端渲染(SSR)或静态生成(SSG) 如果项目使用了 Next.js 或其他支持 SSR 的框架,可以通过服务端预渲染部分 `Modal` 内容,从而减少客户端渲染压力。 #### 7. 减少 Modal 内部组件层级和复杂度 避免在 `Modal` 中嵌套过多层级或使用大量高复杂度组件。可以通过拆分组件、减少不必要的 DOM 节点来提升渲染性能。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值