移动端Bootstrap下拉菜单点击闭合及激活状态异常问题
问题解决:Bootstrap移动端导航栏下拉菜单闭合与激活状态异常
问题原因分析
- 下拉菜单点击闭合主菜单:你在
<li class="nav-item dropdown">外层多套了一个<div class="dropdown">,违背了Bootstrap 5导航栏下拉组件的标准结构,导致点击下拉时触发事件冒泡,误触主菜单的折叠关闭逻辑。 - 所有项被标记为激活:一是多个
nav-link的href重复指向#kvalita,二是错误的DOM结构干扰了Bootstrap的激活状态判断逻辑。
修正方案
1. 移除多余的外层<div class="dropdown">
导航栏中的下拉项必须直接作为<ul class="navbar-nav">的子元素,不需要额外div包裹。
2. 修正重复的href属性
确保每个导航链接的锚点唯一,避免激活状态判断混乱。
修正后的完整代码
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous"> <nav class="navbar navbar-expand-lg navbar-light fixed-top py-3" id="mainNav"> <div class="container px-4 px-lg-5"> <a class="navbar-brand" href="#page-top"><img src="https://web-derka.cz/formprojekt/assets/img/logo.png" alt="..." height="66"></a> <button class="navbar-toggler navbar-toggler-right" type="button" data-bs-toggle="collapse" data-bs-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button> <div class="collapse navbar-collapse" id="navbarResponsive"> <ul class="navbar-nav ms-auto my-2 my-lg-0"> <li class="nav-item"><a class="nav-link" href="#profil-firmy">O nás</a></li> <!-- 移除外层多余的div.dropdown --> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false"> Výroba </a> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">Výrobní program</a></li> <li><a class="dropdown-item" href="#">Strojní vybavení</a></li> <li><a class="dropdown-item" href="#">Konstrukce a technologie</a></li> <li><a class="dropdown-item" href="#">Kvalita</a></li> </ul> </li> <!-- 修正重复的href属性 --> <li class="nav-item"><a class="nav-link" href="#reference">Reference</a></li> <li class="nav-item"><a class="nav-link" href="#kariera">Kariéra</a></li> <li class="nav-item"><a class="nav-link" href="#contact">Kontakt</a></li> </ul> </div> </div> </nav> <!-- Bootstrap 5无需单独引入jQuery,bundle包已包含Popper.js --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
额外说明
- Bootstrap 5的
bootstrap.bundle.min.js已内置Popper.js,无需单独引入jQuery,移除多余的jQuery引入可避免版本冲突。 - 严格遵循Bootstrap官方文档的DOM结构规范,是避免这类交互异常的核心前提。
内容的提问来源于stack exchange,提问作者Patrik Derka
相关产品推荐
相关产品推荐

