带可切换子菜单的Bootstrap 3垂直菜单

9
使用Bootstrap 3,我需要构建一个包含可切换子菜单的垂直菜单。我有以下结构:
<nav>
    <ul>
        <li><a href="#">Item 1</a></li>
        <li><a href="#">Item 2 (toggle)</a>
            <ul>
                <li><a href="#">Item 2.1</a></li>
                <li><a href="#">Item 2.2</a></li>
                <li><a href="#">Item 2.3</a></li>
            </ul>
        </li>
        <li><a href="#">Item 3</a></li>
        <li><a href="#">Item 4</a></li>
    </ul>
</nav>

我希望“项目2”中的UL默认隐藏,并通过按“项目2”来显示/隐藏它。
3个回答

37

使垂直子菜单可收缩的关键是使用属性data-toggle="collapse",而不是在导航中最常用的data-toggle="dropdown"。

我准备了这个jsfiddle示例,这是工作代码:

<nav>
    <ul class="nav">
      <li><a href="#">Link 1</a></li>
    <li><a href="#" id="btn-1" data-toggle="collapse" data-target="#submenu1" aria-expanded="false">Link 2 (toggle)</a>
      <ul class="nav collapse" id="submenu1" role="menu" aria-labelledby="btn-1">
        <li><a href="#">Link 2.1</a></li>
        <li><a href="#">Link 2.2</a></li>
        <li><a href="#">Link 2.3</a></li>
      </ul>
    </li>
    <li><a href="#">Link 3</a></li>
    <li><a href="#">Link 4</a></li>
  </ul>
</nav>

@Gustavo,我该如何在不破坏响应式的情况下给左边留出空白间距? - Freddy Sidauruk
@Gustavo 在你的例子中,我们如何使“项目2”在单击任何其他项目(不包括项目2)时折叠? - nam
你好,我刚刚注意到当你在下拉菜单的子项目/子项上放置链接时,它不起作用。 - nosnevetzy

6
有时您需要同时拥有菜单项链接和子菜单项的切换按钮。
以下是一个测试:

/* CSS */

.toggle-custom {
  position: absolute !important;
  top: 0;
  right: 0;
}
.toggle-custom[aria-expanded='true'] .glyphicon-plus:before {
  content: "\2212";
}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-1.11.1.min.js" type="text/javascript" ></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js" type="text/javascript" ></script>

<nav>
  <ul class="nav">
    <li><a href="#">Link 1</a>
    </li>
    <li><a href="#">Link 2</a><a href="#" class="toggle-custom" id="btn-1" data-toggle="collapse" data-target="#submenu1" aria-expanded="false"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></a>
      <ul class="nav collapse" id="submenu1" role="menu" aria-labelledby="btn-1">
        <li><a href="#">Link 2.1</a>
        </li>
        <li><a href="#">Link 2.2</a>
        </li>
        <li><a href="#">Link 2.3</a>
        </li>
      </ul>
    </li>
    <li><a href="#">Link 3</a>
    </li>
  </ul>
</nav>

http://jsfiddle.net/zoxqpftc/461/


2

对于使用更新的Bootstrap 5(更新于2021年)的未来读者.. Collapse组件仍然可以与Nav组件一起使用。

如果您想要菜单具有手风琴效果(一次只能打开一个项目),请使用data-bs-parent属性设置每个菜单部分的父级..

<div class="nav flex-column">
    <a href="#menu1" class="nav-link collapsed" data-bs-toggle="collapse" role="button">Item 1 ▾</a>
    <div class="collapse ps-2" id="menu1" data-bs-parent="#sidebar">
        <a href="#menu1sub1" class="nav-link" data-bs-toggle="collapse" aria-expanded="false">Subitem1 1 ▾</a>
        <div class="collapse ps-2" id="menu1sub1" data-bs-parent="#menu1">
            <a href="#" class="nav-link" data-bs-parent="#menu1sub1">Subitem a</a>
            <a href="#" class="nav-link" data-bs-parent="#menu1sub1">Subitem b</a>
            <a href="#menu1sub1sub1" class="nav-link" data-bs-toggle="collapse" aria-expanded="false">Subitem c ▾</a>
            <div class="collapse ps-2" id="menu1sub1sub1" data-bs-parent="#menu1sub1sub1">
                <a href="#" class="nav-link">Subitem c.1</a>
                <a href="#" class="nav-link">Subitem c.2</a>
            </div>
        </div>
    </div>
    <a href="#" class="nav-link">Item 2</a>
    <a href="#" class="nav-link">Item 3</a>
    <a href="#" class="nav-link">Item 4</a>
</div>

Bootstrap 5 垂直侧边栏


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接