发布日期:2023-5-26 更新日期: 2023-5-28文章字数 0阅读时长:0分钟

type
Post
status
Published
date
May 26, 2023
slug
summary
tags
category
icon
password
在开发页面的时候,我发现一个问题:页面中的弹窗被某些元素覆盖掉了。这个弹窗的 z-index 属性是比元素的 z-index 属性值要大一些,那么为什么会出现弹窗被覆盖的情况呢?

🤔 为什么 z-index 更大,反而渲染在下层

本质原因是 z-index 只能同级比较,即只有兄弟元素间才能够通过 z-index 来区分渲染层级,而我当前页面中的弹窗和覆盖弹窗的元素并不是兄弟元素,所以对它们赋值的 z-index 是达不到预期效果的。
想要让这个弹窗不被覆盖,按照常规交互范式,就需要让弹窗挂载到body元素下。

📝 如何将元素挂载到 body 标签下

一时没有思路,就去翻了翻 antd 的源码,而 antd 本身并没有这段逻辑,真正的逻辑在 rc-portal 工具包中,经过代码追溯的过程后,我发现它是使用 ReactDom.createPortal API 来实现的。
使用这个 API 之后,效果完美!
附上官网这个 API 的使用方法:
 

让表格支持圆角 让表格支持圆角

让表格无痛支持圆角

react-router Outlet 组件解析 react-router Outlet 组件解析

妙用 context,解决 children 逐级传递的问题