一行代码解决el-table中因为teleported为false导致被遮挡的问题

643 阅读1分钟

场景描述

我目前子应用接入主应用,子应用使用的是vue3 + element-plus,主应用是vue2 + element。因为element大版本不一样,出现了很多样式问题。

后面我使用了qiankun的样式隔离,子应用的样式只在子应用中生效。但是弹窗插入body的元素依然会有样式问题。

于是我修改了默认配置。

ElPopover.props.teleported.default = false;
ElTooltip.props.teleported.default = false;

但是我发现在el-talbe中会出现弹出内容被下一行遮挡的问题。

image.png 而且怎么修改z-index都没有用。z-index按说是绝对够的

image.png

网上查了一堆这个问题,只找到一个稍微靠谱点的文章这里查看。 但是他也是通过js去解决的。一个css的问题需要通过js来解决,多少有点龊,而且我要封装 到组件里,没啥操作的可能性。

于是我就继续找啊找,最终发现了真正的原因:el-popoer的z-index绝对够用,只是他的父元素的z-index不够。 发现了这个问题,于是乎,我使用一行css既可以解决这个问题。

.el-table__cell:has(.el-popper:not([style*="display: none"])) {
    z-index: 9999;
}

上面的选择器的意思就是,当我发现el-table__cell下面有el-popper的时候,就给自己加上z-index:9999的buff,老子最高。

经过反复验证,目前能够顺利解决这个问题,也没有发现其他bug。

如果有遇到相同问题的小伙伴,可以也试一下哦。。