我正在使用Element的 Notification 组件,但是当它被激活时,会出现对话框,但似乎在“后面”也引入了灰色背景。单击任意位置会删除灰色背景并允许与对话框交互,但不会出现应该过滤掉正常屏幕噪音的灰色背景。这是一个简短的视频,显示了各种状态:
将组件放入的代码如下:
<div class="add-address" @click="showAddDialog = true">
+
</div>
</div>
<el-dialog
title="Add New Address"
:visible.sync="showAddDialog"
width="30%"
:before-close="newAddressDialogClosed">
<span>Postal Address</span>
<el-input v-model="newAddress" type="text"></el-input>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">Cancel</el-button>
<el-button type="primary" @click="dialogVisible = false">Confirm</el-button>
</span>
</el-dialog>
我已经使用检查器查看了 CSS,但我还没有从 CSS 的角度或 Vue/Element 的角度理解是什么原因造成的。任何帮助,将不胜感激。
我进一步分析了 HTML/CSS,组件似乎在 DOM 中引入了两个单独的块:
下面的块是灰色背景,您希望它“模糊”页面并将注意力集中在模式上。但是,它位于对话框的前面。同样有趣的是,单击任何地方似乎会针对灰色背景并将其关闭,但这样做也会对对话框上的位置产生微妙的影响,如下所示:
请注意,对话框的 z-index 大于背景,这对我来说直观是有意义的,但我认为这会将对话框置于顶部。猜猜这还不是全部。
我现在已经通过将背景更改为display: none
然后直接在 DOM 中的模式对话框之前添加以下 HTML 来解决问题:
<div class="modal-background" v-if="showAddDialog"></div>
这些似乎验证了我的潜在怀疑,即在 DOM 树中的放置很重要,并且组件尝试将模态背景放置在 DOM 的最末端是有问题的。