So verstecken Sie die zusammenklappbare Bootstrap 4-Navigationsleiste beim Klicken


105

Ich habe diese zusammenklappbare Navigationsleiste mit Bootstrap 4 erstellt, die gut funktioniert, aber ich möchte, dass sie geschlossen wird, wenn der Benutzer auf einen Link klickt. Wie kann man das machen? Vielen Dank

HTML-Navigationsleiste:

<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>

CSS für .icon-Bar, da Bootstrap 4 die Icon-Bar-Klasse nicht verwendet.

.navbar-toggler .icon-bar {
  margin: 7px;
  display: block;
  width: 22px;
  height: 1px;
  background-color: #cccccc;
  border-radius: 1px;
}

Antworten:


168

Sie können die collapseKomponente wie folgt zu den Links hinzufügen .

<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>

Demo mit der 'Data-Toggle'-Methode

Oder (vielleicht besser) verwenden Sie jQuery wie folgt.

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

Demo mit der jQuery-Methode

Update 2019 - Bootstrap 4

Die Navigationsleiste hat sich geändert, aber die Methode "Nach Klick schließen" ist immer noch dieselbe:

https://codeply.com/go/nFDHoEqqJQ (jQuery-Methode)
https://codeply.com/go/PqIBtz3HPL ( data-toggleMethode, siehe Bootstrap Collapse-Komponente )


1
Hallo, danke für die Antwort, aber wenn ich das mache, wird die Navigationsleiste nicht ausgeblendet, sondern das div-Element, mit dem es mit scrollspy verknüpft ist. Irgendwelche Vorschläge? Danke
Rudi Thiel

3
Großartig .. und denken Sie daran, Sie können <span class="navbar-toggler-icon"></span>für die
Zim

2
Sie können navbar-inversein der Navigationsleiste verwenden, um alle Textfarben in Weiß (oder transparentes Weiß) zu ändern
Zim

3
@Zim - Sie müssen stattdessen das data-toggleund data-targetauf das übergeordnete Element ( li) setzen, da sonst scrollspy nicht funktioniert. Vielleicht sollten Sie Ihre Antwort bearbeiten. :)
J. Sadi

1
Der Vorschlag von @ J.Sadi hat diese Arbeit für mich gemacht. Ansonsten haben die Linkklicks nichts bewirkt.
Totalhack

44

Ich benutze ANGULAR und da es mir Probleme bereitete, fügte der RouterLink einfach den Datenumschalter und das Ziel in das Li-Tag ein ... oder verwendete eine Abfrage wie "ZimSystem".

<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>


4
Danke, du hast den Tag für mich gerettet!. Ich verwende Angular 6 mit Bootstrap 4.1.3. Angewandt data-toggle="collapse" data-target=".navbar-collapse.show"auf li einschließlich Drop - Down - li.
Lernen ...

2
Diese Antwort ist einfach sauber und großartig!
Nation Chirara

17

Sie können $.collapse('hide');mit einem Event-Handler über die Links aufrufen .

$('.nav-link').on('click',function() {
  $('.navbar-collapse').collapse('hide');
});
.navbar-toggler .icon-bar {
  margin: 7px;
  display: block;
  width: 22px;
  height: 1px;
  background-color: #cccccc;
  border-radius: 1px;
}
<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>


9

Beim Ausprobieren der oben genannten Lösungen fehlte mir eine Lösung für Dropdown-Schalter. Also los geht's! Öffnet auch Untermenüelemente.

Vielleicht müssen Sie es ein wenig optimieren, wenn Ihre Umschaltklasse anders ist.

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

1
Dies ist kürzer und möglicherweise schneller:$(".navbar-nav li a:not('.dropdown-toggle')") .on('click', function () { $('.navbar-collapse').collapse('hide'); }
James Wilkins

5

Dies ist die Lösung, um das Menü zu schließen, wenn Sie auf Anker klicken und diese Zeile im Listenelement anwenden

     data-target="#sidenav-collapse-main" data-toggle="collapse"

Das wahre Beispiel, das für mich funktioniert, ist unten

      <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>

2

Ich verwende Angular 5 mit Boostrap 4. Es funktioniert für mich auf diese Weise.

 $(document).on('click', '.navbar-nav>li>a, .navbar-brand, .dropdown-menu>a', function (e) {
      if ( $(e.target).is('a') && $(e.target).attr('class') != 'nav-link dropdown-toggle' ) {
        $('.navbar-collapse').collapse('hide');
      }
    });
   }
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
  <a class="navbar-brand" [routerLink]="['/home']">FbShareTool</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor01" aria-controls="navbarColor01" aria-expanded="false" aria-label="Toggle navigation" style="">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarColor01">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active" *ngIf="_myAuthService.isAuthenticated()">
        <a class="nav-link" [routerLink]="['/dashboard']">Dashboard <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item dropdown" *ngIf="_myAuthService.isAuthenticated()">
          <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            Manage
          </a>
          <div class="dropdown-menu" aria-labelledby="navbarDropdown">
            <a class="dropdown-item" [routerLink]="['/fbgroup']">Facebook Group</a>
            <div class="dropdown-divider"></div>
            <a class="dropdown-item" href="#">Fetch Data</a>
          </div>
      </li>
    </ul>

    <ul class="navbar-nav navbar-right navbar-right-link">
        <li class="nav-item" *ngIf="!_myAuthService.isAuthenticated()" >
            <a class="nav-link" (click)="logIn()">Login</a>
        </li>
        <li class="nav-item" *ngIf="_myAuthService.isAuthenticated()">
           <a class="nav-link">{{ _myAuthService.userDetails.displayName }}</a>
        </li>
        <li class="nav-item" *ngIf="_myAuthService.isAuthenticated() && _myAuthService.userDetails.photoURL">
            <a>
              <img [src]="_myAuthService.userDetails.photoURL" alt="profile-photo" class="img-fluid rounded" width="40px;">
            </a>
        </li>
        <li class="nav-item" *ngIf="_myAuthService.isAuthenticated()">
            <a class="nav-link" (click)="logOut()">Logout</a>
        </li>
    </ul>

  </div>
</nav>


2

Der einfachste Weg, dies zu tun, indem Sie nur eine Angular 2/4-Vorlage ohne Codierung verwenden:

<nav class="navbar navbar-default" aria-expanded="false">
  <div class="container-wrapper">

    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" (click)="isCollapsed = !isCollapsed">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
    </div>

    <div class="navbar-collapse collapse no-transition" [attr.aria-expanded]="!isCollapsed" [ngClass]="{collapse: isCollapsed}">
      <ul class="nav navbar-nav" (click)="isCollapsed = !isCollapsed">
        <li [routerLinkActive]="['active']" [routerLinkActiveOptions]="{exact: true}"><a routerLink="/">Home</a></li>
        <li [routerLinkActive]="['active']"><a routerLink="/about">About</a></li>
        <li [routerLinkActive]="['active']"><a routerLink="/portfolio">Portfolio</a></li>
        <li [routerLinkActive]="['active']"><a routerLink="/contacts">Contacts</a></li>
      </ul>
    </div>

  </div>
</nav>

2

Dieser Code simuliert einen Klick auf die Burguer-Schaltfläche, um die Navigationsleiste zu schließen, indem Sie auf einen Link im Menü klicken und den Ausblendeffekt beibehalten. Lösung mit Typoskript für Winkel 7. Vermeiden Sie Probleme mit routerLink.

ToggleNavBar () {
    let element: HTMLElement = document.getElementsByClassName( 'navbar-toggler' )[ 0 ] as HTMLElement;
    if ( element.getAttribute( 'aria-expanded' ) == 'true' ) {
        element.click();
    }
}

<li class="nav-item" [routerLinkActive]="['active']">
    <a class="nav-link" [routerLink]="['link1']" title="link1" (click)="ToggleNavBar()">link1</a>
</li>

Die mit jQuery vorgeschlagenen Lösungen funktionieren in Angular 7 mit verzögertem Laden nicht richtig.
Edu

0

Sie können ein einfaches Binden beim Klicken und Schließen verwenden, wie folgt: (click)="drawer.close()

<a class="nav-link" [routerLink]="navItem.link" routerLinkActive="selected" (click)="drawer.close()">
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.