先检查.modal是否被标记为“Stacking context”,若是则说明其与遮挡元素不在同一层叠上下文中,调z-index无效;再确认.modal是否直接挂载在body下,否则父容器创建新层叠上下文会使z-index仅局部生效。
打开 Chrome DevTools → Elements 面板,选中 .modal 元素,在右侧 Styles 标签页拉到底部 «Layout» 区域,检查是否被标记为 “Stacking context”。如果标了,说明它和遮挡它的元素(比如 .tippy-box、.flatpickr-calendar 或 .ck-toolbar-container)不在同一层叠上下文中——此时改 z-index 数值基本无效。
常见触发 stacking context 的属性包括:position: relative 且带 z-index(哪怕只是 0)、transform、opacity: 0.99、filter、will-change。这些往往藏在父容器上,比如 Vue 的 #app、React 的 div.root,或某个 .card 容器里。
Bootstrap 要求 .modal 必须是 document.body 的直系子节点,否则父级一旦创建新 stacking context,.modal 的 z-index: 1050 就只在局部生效,而 .modal-backdrop(z-index: 1040)在 body 层级,自然把它“盖住”。
createPortal 渲染到 document.body,别直接 return <Modal />
<Teleport to="body"><Modal /></Teleport>,不要依赖 v-model 挂在局部节点modal.show() 前执行 document.body.appendChild(modalEl)
.modal 的父节点是不是 body,而不是某个 div.container 或 div#app
Bootstrap 5.3 的默认层级是语义化设计的:$zindex-dropdown: 1000、$zindex-fixed: 1030、$zindex-modal: 1050、$zindex-toast: 1080。硬写 z-index: 9999 !important 会破坏整个体系,比如让下拉菜单盖住模态框的 backdrop。
安全做法:
.navbar .dropdown-menu { z-index: 1060; }
<link> 顺序)position: relative,否则 z-index 不触发$tippy-z-index: #{$zindex-modal + 10},或用权重提升:.modal .tippy-box { z-index: calc(#{$zindex-modal} + 5) !important; }
这不是 z-index 问题,而是视觉裁剪。当 .modal-body、.card-body 或自定义容器设置了 overflow: hidden、auto 或 scroll,所有 position: absolute 子元素(如 Popover、CKEditor 工具栏)都会被严格限制在边界内,再高的 z-index 也出不去。
修复方式:
overflow(推荐)overflow 移到更内层容器,比如 <div class="scrollable-content">
container: 'body' 选项,让 Popover 插入 body 下position: relative,避免 Popover 相对于错位祖先定位.modal 是不是真的在 body 下——这两步跳过,后面所有 z-index 调整都是白忙。 virtualbox下怎么实现ubuntu20.04开机自动挂载共享文件夹?
ubuntu20.04怎么开启护眼模式? ubuntu夜间模式的设置方法
如何在Ubuntu 20.04上安装Microsoft Edge浏览器
Ubuntu20.10优麒麟触摸手势有哪些? 优麒麟系统新增手势汇总
优麒麟20.04.1发布 更新内容汇总(附下载)
Mermaid Visual Editor 如何同步可视化操作与 Mermaid 源码?