วิธีซ่อนแถบนำทาง Bootstrap 4 ที่ยุบได้เมื่อคลิก


114

ฉันได้สร้างแถบนำทางที่ยุบได้นี้โดยใช้ Bootstrap 4 ซึ่งใช้งานได้ดี แต่ฉันต้องการปิดเมื่อผู้ใช้คลิกที่ลิงค์ วิธีใดในการทำเช่นนี้ ขอบคุณ

html navbar:

<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 สำหรับ. icon-bar เนื่องจาก Bootstrap 4 ไม่ใช้คลาสไอคอนบาร์

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

คำตอบ:


181

คุณสามารถเพิ่ม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>

สาธิตโดยใช้วิธี 'data-toggle'

หรือ (อาจจะเป็นวิธีที่ดีกว่า) ใช้ jQuery แบบนี้ ..

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

สาธิตโดยใช้วิธี jQuery

อัปเดต 2019 - Bootstrap 4

แถบนำทางมีการเปลี่ยนแปลง แต่วิธี "ปิดหลังจากคลิก" ยังคงเหมือนเดิม:

https://codeply.com/go/nFDHoEqqJQ (วิธี jQuery)
https://codeply.com/go/PqIBtz3HPL ( data-toggleวิธีการดูที่ Bootstrap Collapse component )


2
สวัสดีขอบคุณสำหรับการตอบกลับ แต่เมื่อฉันทำสิ่งนี้มันจะไม่ยุบ navbar แต่เป็นองค์ประกอบ div ที่เชื่อมโยงกับ scrollspy ข้อเสนอแนะใด ๆ ? ขอบคุณ
Rudi Thiel

3
เยี่ยมมาก .. และจำไว้ว่าคุณสามารถใช้<span class="navbar-toggler-icon"></span>สำหรับแถบไอคอนใน BS 4
Zim

2
คุณสามารถใช้navbar-inverseใน Navbar เพื่อเปลี่ยนสีข้อความทั้งหมดเป็นสีขาว (หรือสีขาวโปร่งใส)
Zim

5
@Zim - คุณต้องตั้งค่าdata-toggleและdata-targetเป็นองค์ประกอบหลัก ( li) แทนมิฉะนั้น scrollspy จะไม่ทำงาน บางทีคุณควรแก้ไขคำตอบของคุณ :)
J. Sadi

1
ข้อเสนอแนะจาก @ J.Sadi ทำให้งานนี้สำหรับฉัน มิฉะนั้นการคลิกลิงก์ไม่ได้ทำอะไรเลย
totalhack

45

ฉันใช้ ANGULAR และเนื่องจากมันทำให้ฉันมีปัญหา routerLink เพียงแค่เพิ่ม data-toggle และ target ในแท็ก li .... หรือใช้ jquery เช่น "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
ขอบคุณคุณได้ช่วยฉันทั้งวัน!. ฉันใช้ Angular 6 กับ bootstrap 4.1.3 นำdata-toggle="collapse" data-target=".navbar-collapse.show"ไปใช้กับ li's รวมทั้ง dropdown li
เรียนรู้ ...

2
คำตอบนี้คือ Just Clean & Superb!
Nation Chirara

17

คุณสามารถโทรติดต่อ$.collapse('hide');กับตัวจัดการเหตุการณ์ได้ที่ลิงก์

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

ด้วยการลองใช้วิธีแก้ปัญหาข้างต้นฉันพลาดวิธีแก้ปัญหาสำหรับการสลับแบบเลื่อนลงไปเลย! ยังเปิดรายการเมนูย่อย

บางทีคุณอาจต้องปรับแต่งเล็กน้อยหากคลาสการสลับของคุณแตกต่างกัน

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

1
ซึ่งสั้นกว่าและอาจเร็วกว่านี้:$(".navbar-nav li a:not('.dropdown-toggle')") .on('click', function () { $('.navbar-collapse').collapse('hide'); }
James Wilkins

5

นี่คือวิธีปิดเมนูเมื่อคลิกที่จุดยึดจากนั้นใช้บรรทัดนี้ในรายการ

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

ตัวอย่างจริงที่เหมาะกับฉันอยู่ด้านล่าง

      <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

ฉันใช้ Angular 5 กับ Boostrap 4 มันได้ผลสำหรับฉันด้วยวิธีนี้

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

วิธีที่ง่ายที่สุดโดยใช้เทมเพลต Angular 2/4 เท่านั้นโดยไม่ต้องเข้ารหัส:

<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

รหัสนี้จำลองการคลิกที่ปุ่มเบอร์เกอร์เพื่อปิดแถบนำทางโดยคลิกที่ลิงค์ในเมนูทำให้เอฟเฟกต์จางหายไป วิธีแก้ไขด้วย typescript สำหรับ angular 7 หลีกเลี่ยงปัญหา 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>

โซลูชันที่เสนอด้วย jQuery ทำงานไม่ถูกต้องใน Angular 7 ที่มีการโหลดแบบเกียจคร้าน
edu

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.