.dropdown-menu被遮住的根本原因是.navbar的position: fixed与z-index: 1030创建了层叠上下文,导致其内部.dropdown-menu(z-index: 1000)无法溢出;需提高选择器优先级如.navbar .dropdown-menu并设z-index≥1060,或移除.navbar的transform等触发新层叠上下文的属性,必要时用boundary: 'window'将菜单挂载至body。

Navbar里.dropdown-menu被遮住,直接改z-index没用
根本原因不是数值太小,而是.navbar本身是position: fixed且默认z-index: 1030,而.dropdown-menu默认z-index: 1000——菜单一展开,就被自己的父容器盖住了。这不是bug,是Bootstrap预设的层级策略。
必须用更具体的选择器覆盖,不能只写.dropdown-menu
全局写.dropdown-menu { z-index: 2000; }大概率无效,因为CSS优先级不够,会被Bootstrap原生样式覆盖。关键要提高选择器 specificity:
-
.navbar .dropdown-menu:最常用,确保只影响Navbar内的下拉 -
.navbar-fixed-top .dropdown-menu:如果用了旧版固定顶部类名 -
nav.navbar .dropdown-menu:进一步限定语义
同时补上position: relative(哪怕父级已有定位,也建议显式声明):
.navbar .dropdown-menu {
z-index: 1060;
position: relative;
}
父级有transform时,z-index完全失效
如果你的.navbar加了动画、滚动效果或第三方库注入了transform: translateY(0)之类,它会悄悄创建新的层叠上下文,导致z-index只在.navbar内部生效——再调高也没用。
- 优先移除
.navbar上的transform、opacity、filter或will-change - 实在不能动,初始化Dropdown时加
boundary: 'window'让菜单挂到<body>下:new bootstrap.Dropdown(element, { boundary: 'window' }); - 临时救急可给触发按钮加
style="transform: none !important;",但不推荐长期用
CDN用户别碰z-0~z-3工具类
z-0到z-3只对应z-index: 0/100/200/300,远低于.navbar的1030和.dropdown-menu的1000。给按钮加class="z-3"毫无意义,除非它本身是position: relative且你只想微调局部重叠(比如badge盖input边框)。
真正要盖过Navbar,得对齐Bootstrap的语义化层级:--bs-zindex-dropdown(5.3+支持)或直接CSS覆盖,别指望工具类。


















