Cách ẩn thanh điều hướng Bootstrap 4 có thể thu gọn khi nhấp chuột


108

Tôi đã tạo thanh điều hướng có thể thu gọn này bằng cách sử dụng Bootstrap 4 hoạt động tốt, nhưng tôi muốn nó đóng khi người dùng nhấp vào liên kết. Bất kỳ cách nào để làm điều này? Cảm ơn

html điều hướng:

<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 cho .icon-bar, vì Bootstrap 4 không sử dụng lớp biểu tượng-bar.

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

Câu trả lời:


170

Bạn có thể thêm collapsethành phần vào các liên kết như thế này ..

<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 sử dụng phương pháp 'chuyển đổi dữ liệu'

Hoặc , (có lẽ là cách tốt hơn) sử dụng jQuery như thế này ..

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

Demo sử dụng phương thức jQuery

Cập nhật 2019 - Bootstrap 4

Thanh điều hướng đã thay đổi, nhưng phương pháp "đóng sau khi nhấp" vẫn như cũ:

https://codeply.com/go/nFDHoEqqJQ (phương thức jQuery)
https://codeply.com/go/PqIBtz3HPL ( data-togglephương thức, xem thành phần Bootstrap Thu gọn )


1
Xin chào, cảm ơn bạn đã trả lời, nhưng khi tôi làm điều này, nó không thu gọn thanh điều hướng mà thay vào đó là phần tử div mà nó được liên kết với scrollspy. Bất kỳ đề xuất? Cảm ơn
Rudi Thiel

3
Tuyệt vời .. và hãy nhớ rằng bạn có thể sử dụng <span class="navbar-toggler-icon"></span>cho các thanh biểu tượng trong BS 4.
Zim

2
Bạn có thể sử dụng navbar-inversetrong Navbar để thay đổi tất cả các màu văn bản thành màu trắng (hoặc màu trắng trong suốt)
Zim

3
@Zim - Thay vào đó, bạn phải đặt data-toggledata-targetthành phần tử cha ( li), nếu không scrollspy sẽ không hoạt động. Có lẽ bạn nên chỉnh sửa câu trả lời của mình. :)
J. Sadi

1
Đề xuất từ ​​@ J.Sadi đã giúp tôi thực hiện điều này. Nếu không, các nhấp chuột vào liên kết không làm gì cả.
Totalhack

44

Tôi đang sử dụng ANGULAR và vì nó đã gây cho tôi sự cố nên routerLink chỉ cần thêm data-toggle và target trong thẻ li .... hoặc sử dụng jquery như "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
Cảm ơn, bạn đã tiết kiệm một ngày cho tôi !. Tôi đang sử dụng Angular 6 với bootstrap 4.1.3. Áp dụng data-toggle="collapse" data-target=".navbar-collapse.show"cho li's bao gồm cả trình đơn thả xuống li.
learning ...

2
Câu trả lời này là Just Clean & Superb!
Nation Chirara

17

Bạn có thể gọi $.collapse('hide');với một trình xử lý sự kiện trên các liên kết.

$('.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

Với việc thử các giải pháp ở trên, tôi đã thiếu một giải pháp cho việc chuyển đổi Dropdown, vì vậy bạn hãy bắt đầu! Đồng thời mở các mục menu con.

Có lẽ bạn phải điều chỉnh nó một chút nếu lớp chuyển đổi của bạn khác.

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

1
Đây là ngắn hơn, và có thể nhanh hơn:$(".navbar-nav li a:not('.dropdown-toggle')") .on('click', function () { $('.navbar-collapse').collapse('hide'); }
James Wilkins

5

đây là giải pháp để đóng menu khi nhấp vào neo sau đó áp dụng dòng này trong mục danh sách

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

ví dụ thực tế phù hợp với tôi là bên dưới

      <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

Tôi đang sử dụng Angular 5 với Boostrap 4. Nó hoạt động với tôi theo cách này.

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

Cách dễ nhất để làm điều đó chỉ bằng cách sử dụng mẫu Angular 2/4 mà không cần mã hóa:

<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

Mã này mô phỏng một lần nhấp vào nút burguer để đóng thanh điều hướng bằng cách nhấp vào liên kết trong menu, giữ hiệu ứng mờ dần. Giải pháp với bảng chữ cho góc 7. Tránh các vấn đề liên kết bộ định tuyến.

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>

Các giải pháp được đề xuất với jQuery không hoạt động chính xác trong Angular 7 với tải chậm.
edu

0

bạn có thể sử dụng một ràng buộc đơn giản khi nhấp và đóng, như thế này: (click)="drawer.close()

<a class="nav-link" [routerLink]="navItem.link" routerLinkActive="selected" (click)="drawer.close()">
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.