You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Bootstrap多级下拉菜单添加第三级菜单?

Bootstrap多级下拉菜单添加额外子层级的解决方法

你当前的CSS规则会让所有.dropdown-submenu下的.dropdown-menu在父元素hover时显示,导致第三级菜单和第二级一起弹出来。不用新增subsubmenu类,调整下CSS选择器并正确嵌套HTML结构就能解决问题。

一、修改CSS规则

把现有CSS里的触发选择器改成直接子级选择器,这样只有当前.dropdown-submenu的直接子菜单才会在hover时显示,而非所有后代菜单:

.dropdown-submenu{
    position: relative;
}
.dropdown-submenu a::after{
    transform: rotate(-90deg);
    position: absolute;
    right: 3px;
    top: 40%;
}
/* 关键修改:用 > 指定仅直接子级的下拉菜单 */
.dropdown-submenu:hover > .dropdown-menu, .dropdown-submenu:focus > .dropdown-menu{
    display: flex;
    flex-direction: column;
    position: absolute !important;
    margin-top: -30px;
    left: 100%;
}
@media (max-width: 992px) {
    .dropdown-menu{
        width: 50%;
    }
    .dropdown-menu .dropdown-submenu{
        width: auto;
    }
}

二、嵌套第三级(及更多)菜单

所有层级的子菜单都复用.dropdown-submenu类,按照第二级的结构继续嵌套即可,不需要新增类:

<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>
  <a class="navbar-brand" href="#">Navbar</a>
  <div class="collapse navbar-collapse" id="navbarNavDropdown">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link 1</a>
      </li>
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="http://example.com" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Dropdown link
        </a>
        <ul class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
          <li><a class="dropdown-item" href="#">Action</a></li>
          <li><a class="dropdown-item" href="#">Another action</a></li>
          <!-- 第二级子菜单 -->
          <li class="dropdown-submenu">
            <a class="dropdown-item dropdown-toggle" data-toggle="dropdown" href="#">Something else here</a>
            <ul class="dropdown-menu">
              <a class="dropdown-item" href="#">A</a>
              <!-- 第三级子菜单 -->
              <li class="dropdown-submenu">
                <a class="dropdown-item dropdown-toggle" data-toggle="dropdown" href="#">B with submenu</a>
                <ul class="dropdown-menu">
                  <a class="dropdown-item" href="#">B1</a>
                  <a class="dropdown-item" href="#">B2</a>
                </ul>
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
  </div>
</nav>

原理说明

原来的CSS用.dropdown-submenu:hover .dropdown-menu会选中所有后代的下拉菜单,hover父级时所有子菜单都会显示。改成>直接子选择器后,只有当前hover的.dropdown-submenu的直接子菜单才会弹出,更深层级的菜单只会在它自己的父级被hover时才显示,不会和上一级同时出现。

内容的提问来源于stack exchange,提问作者womblerone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:15:37