Bug Type: Component
Environment
- Vue Version:
3.2.0
- Element Plus Version:
2.2.14
- Browser / OS:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36
- Build Tool:
Vue CLI
Reproduction
Related Component
el-drawer
Reproduction Link
Docs
Steps to reproduce
以官方文档 Drawer 组件的「不添加 Title」这个 Example 为例
- 打开开发者工具,查看 Drawer 组件外层 .el-overlay 容器的内联 z-index 属性
- 反复打开关闭 Drawer
What is Expected?
按道理讲 z-index 不应该自增,因为它会带来潜在的问题。
What is actually happening?
z-index 会不断自增。
Additional comments
文档提供了 z-index prop 的说明,但并没有提到不传递 z-index prop 直接使用默认值(2000)时 z-index 值会自增的细节,我在翻阅相关的源码以后才了解到这个细节。
如果这个 useZIndex 自增的逻辑是符合预期的,至少应该在文档上告知用户。
在我们的产品里,Drawer 组件中有一个用来预览文件的 Preview 组件,起初我们观察到 Drawer 的遮罩默认 z-index 是2000,于是我们设置的 Preview 组件层级是3000,但随着 useZIndex 内部的值不断自增,如果用户长期停留在这个页面进行操作,Preview 组件被渲染在 Drawer 组件下面是迟早的事情,这给 Drawer/Dialog 组件带来了额外的使用心智负担。
3条答案
按热度按时间dsekswqp1#
补充:
实际测试发现 useZIndex 似乎是全局共享的,我们的页面上使用了很多 tooltip 之类的悬浮展示/交互的组件,鼠标在页面上晃一晃再打开 drawer 发现 z-index 自增了50多……😭
解决的方案有如下:
gcxthw6b2#
补充:
实际测试发现 useZIndex 似乎是全局共享的,我们的页面上使用了很多 tooltip 之类的悬浮展示/交互的组件,鼠标在页面上晃一晃再打开 drawer 发现 z-index 自增了50多……😭
解决的方案有如下:
我目前是这么使用的:
idv4meu83#
我觉得这也是一种方法。
其实只要理解了它的原理,规避本身还是很容易的,只是这个对于开发者来说心智有点高,而且在遇到它之前大概率也是不太可能想到的……