如何在点击时隐藏可折叠的Bootstrap 4导航栏

Rud*_*iel 78 html css twitter-bootstrap twitter-bootstrap-4 bootstrap-4

我使用Bootstrap 4创建了这个可折叠的导航栏,效果很好,但我想在用户点击链接时关闭它.有什么办法吗?谢谢

html导航栏:

<nav class="navbar navbar-toggleable-md fixed-top">

<button id="nav-btn"class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarDiv"  aria-expanded="false" aria-label="Toggle navigation">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
 </button>

            <div class="container">

                <a class="navbar-brand" href="#"><img src="Images/logo.png" width="60px"></a>

                    <div class="collapse navbar-collapse" id="navbarDiv">

                        <ul class="navbar-nav mr-auto">

                            <li class="nav-item active">

                                <a class="nav-link" href="#home">Home <span class="sr-only">(current)</span></a>

                            </li>

                            <li class="nav-item">

                                <a class="nav-link" href="#about-us">About</a>

                            </li>

                            <li class="nav-item">

                                <a class="nav-link" href="#pricing">Pricing</a>

                            </li>

                        </ul>

                    </div>

            </div>

        </nav>
Run Code Online (Sandbox Code Playgroud)

css for .icon-bar,因为Bootstrap 4不使用icon-bar类.

.navbar-toggler .icon-bar {
  margin: 7px;
  display: block;
  width: 22px;
  height: 1px;
  background-color: #cccccc;
  border-radius: 1px;
}
Run Code Online (Sandbox Code Playgroud)

Zim*_*Zim 120

您可以将collapse组件添加到这样的链接..

<ul class="navbar-nav mr-auto">
     <li class="nav-item active">
         <a class="nav-link" href="#home" data-toggle="collapse" data-target=".navbar-collapse.show">Home <span class="sr-only">(current)</span></a>
     </li>
     <li class="nav-item">
         <a class="nav-link" href="#about-us" data-toggle="collapse" data-target=".navbar-collapse.show">About</a>
     </li>
     <li class="nav-item">
         <a class="nav-link" href="#pricing" data-toggle="collapse" data-target=".navbar-collapse.show">Pricing</a>
     </li>
 </ul>
Run Code Online (Sandbox Code Playgroud)

使用'data-toggle'方法进行演示

或者,(也许更好的方式)使用像这样的jQuery ..

$('.navbar-nav>li>a').on('click', function(){
    $('.navbar-collapse').collapse('hide');
});
Run Code Online (Sandbox Code Playgroud)

使用jQuery方法演示

更新2018 Bootstrap 4.0.0

导航栏已更改,但data-toggle方法仍然相同:

https://www.codeply.com/go/nFDHoEqqJQ

  • 这是我修改后的 Bootstrap 5 版本,以避免在启动时打开菜单并在单击下拉标题时关闭菜单: ` const navLinks = document.querySelectorAll('.nav-item:not(.dropdown)'); const menuToggle = document.getElementById('navbarSupportedContent'); const bsCollapse = new bootstrap.Collapse(menuToggle, {toggle: false}); navLinks.forEach( function(l) { l.addEventListener('click', function() { // 避免在桌面上闪烁 if (menuToggle.classList.contains('show')) { bsCollapse.toggle(); } }) ; }); ` (13认同)
  • @Zim - 您必须将“data-toggle”和“data-target”设置为父元素(“li”),否则滚动间谍将无法工作。也许你应该编辑你的答案。:) (5认同)
  • 太棒了......记住你可以使用`<span class ="navbar-toggler-icon"> </ span>`来获取BS 4中的图标栏. (3认同)
  • 在 a-href 中添加标签不起作用。浏览器触发菜单关闭,并且永远不会到达 href 链接。我认为最终的解决方案是使用 JavaScript (3认同)
  • 嗨,感谢您的回复,但是当我这样做时,它不会折叠导航栏,而是折叠它与 scrollspy 链接的 div 元素。有什么建议?谢谢 (2认同)
  • 您可以在导航栏中使用`navbar-inverse`将所有文本颜色更改为白色(或透明白色) (2认同)

小智 29

我正在使用ANGULAR,因为它给我带来了问题,routerLink只是在li标签中添加数据切换和目标....或者使用像"ZimSystem"这样的jquery

<div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav mr-auto">
        <li class="nav-item" data-toggle="collapse" data-target=".navbar-collapse.show">
          <a class="nav-link" routerLink="/inicio" routerLinkActive="active" >Inicio</a>
        </li>
      </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,你为我节省了一天!我正在使用带有引导程序 4.1.3 的 Angular 6。将 `data-toggle="collapse" data-target=".navbar-collapse.show"` 应用于 li 的下拉列表 li。 (6认同)
  • 这个答案非常干净和出色! (2认同)

Mic*_*ker 14

您可以$.collapse('hide');使用链接上的事件处理程序进行调用.

$('.nav-link').on('click',function() {
  $('.navbar-collapse').collapse('hide');
});
Run Code Online (Sandbox Code Playgroud)
.navbar-toggler .icon-bar {
  margin: 7px;
  display: block;
  width: 22px;
  height: 1px;
  background-color: #cccccc;
  border-radius: 1px;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<nav class="navbar navbar-toggleable-md fixed-top">
  <button id="nav-btn" class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarDiv" aria-expanded="false" aria-label="Toggle navigation">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
 </button>
  <div class="container">
    <a class="navbar-brand" href="#"><img src="Images/logo.png" width="60px"></a>
    <div class="collapse navbar-collapse" id="navbarDiv">
      <ul class="navbar-nav mr-auto">
        <li class="nav-item active">
          <a class="nav-link" href="#home">Home <span class="sr-only">(current)</span></a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#about-us">About</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#pricing">Pricing</a>
        </li>
      </ul>
    </div>
  </div>
</nav>
Run Code Online (Sandbox Code Playgroud)


abu*_*hir 7

这是单击锚点时关闭菜单的解决方案,然后在列表项中应用此行

     data-target="#sidenav-collapse-main" data-toggle="collapse"
Run Code Online (Sandbox Code Playgroud)

对我有用的真实例子如下

      <li class="nav-item" data-target="#sidenav-collapse-main" data- 
      toggle="collapse" >
      <a class="nav-link" routerLinkActive="active" routerLink="/admin/users">
        <i class="ni ni-single-02  text-orange"></i> Users
      </a>
      </li>
Run Code Online (Sandbox Code Playgroud)


Hen*_*ren 6

通过尝试上述解决方案,我错过了Dropdown切换的解决方案,所以你走了!还会打开子菜单项.

如果您的切换类不同,也许您必须稍微调整一下.

$('.navbar-nav li a').on('click', function(){
    if(!$( this ).hasClass('dropdown-toggle')){
        $('.navbar-collapse').collapse('hide');
    }
});
Run Code Online (Sandbox Code Playgroud)