el-dialog嵌套遇到的问题

在使用Vue和ElementUI开发PC管理平台时,遇到el-dialog嵌套导致的遮罩层覆盖问题。当打开嵌套dialog时,蒙层会盖住整个页面。解决方案包括:1) 设置嵌套dialog的`append-to-body`为`true`,使内容区域插入到body下,避免因定位问题被遮挡;2) 设置嵌套dialog的`modal-append-to-body`为`false`,使蒙层在当前元素下,防止被父元素遮挡。尽量避免嵌套dialog的写法,以减少此类问题。

前言

最近在弄PC端的管理平台,然后使用的是vue + elementUI。今天把遇到的问题总结下,正所谓,好记性不如烂笔头。

el-dialog嵌套

我们的业务需求需要嵌套dialog,正常打开第一个dialog是没有没问题的。 页面有蒙层,然后内容区域高亮

如下图

image.png

但是打开嵌套的dialog后蒙层盖住了整个页面,导致内容区域也被盖住了。

image.png

然后我去查看文档,查看页面dom结构就知道大致原因了。

这是因为dialog的蒙层默认都是插入到body的,然后它的z-index是动态生成,默认是2000,内容区域的z-index也是动态生成,默认是2001,它们的定位都是fixed,但是内容区域的z-index会比蒙层的大1,导致内容区域可以高亮。

然后你嵌套的dialog显示后,它的蒙层也是替换第一个dialog的蒙层,同样插入到body,然后它的z-index会递增,是2002,它的内容区域是2003。正常是没有问题,内容区域比蒙层的大。

image.png

但是我们忽略了一个问题,此时这个嵌套内容是在第一个dialog下面的,虽然它的z-index比蒙层的大,但是会以第一个dialog内容区域的z-index为准,去和蒙层比较,因为它的z-index2001)比蒙层的z-index(2002)小,所以导致被盖住了。

解决方法

嵌套的dialog设置:append-to-body=“true”

默认dialog的内容区域是在当前元素下的,当然嵌套的dialog也是一样。如果我们把嵌套的dialog的内容区域插入到body下,因为它的z-index是比蒙层高,这样就不用因为父元素的z-index小导致被盖住了。

image.png

image.png

可以看到正常显示了。

嵌套的dialog设置:modal-append-to-body=“false”

默认dialog的蒙层是要在body下生成的,如果我们把嵌套的蒙层改成在当前元素下,则嵌套的内容dialog也不会被盖住。

image.png

image.png

不要采用嵌套的写法

如果能改写成不要嵌套的写法,这样的问题就不复存在。

image.png

如果还是要嵌套,那么就采用上面2种方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值