ข้ามไปที่เนื้อหาหลัก ข้ามไปที่การนำทางเอกสาร
Check
in English

การนำทางและแท็บ

เอกสารประกอบและตัวอย่างสำหรับวิธีใช้ส่วนประกอบการนำทางที่รวมอยู่ใน Bootstrap

ระบบนำทางฐาน

การนำทางที่มีอยู่ใน Bootstrap จะแบ่งปันมาร์กอัปและสไตล์ทั่วไป ตั้งแต่.navคลาสพื้นฐานไปจนถึงสถานะใช้งานและปิดใช้งาน สลับคลาสตัวดัดแปลงเพื่อสลับไปมาระหว่างแต่ละสไตล์

ส่วนประกอบ พื้นฐาน.navสร้างขึ้นด้วย flexbox และเป็นรากฐานที่แข็งแกร่งสำหรับการสร้างส่วนประกอบการนำทางทุกประเภท ประกอบด้วยการแทนที่รูปแบบบางส่วน (สำหรับการทำงานกับรายการ) ช่องว่างภายในลิงก์บางส่วนสำหรับพื้นที่ Hit ที่ใหญ่ขึ้น และรูปแบบการปิดใช้งานขั้นพื้นฐาน

ส่วนประกอบ พื้นฐาน.navไม่มี.activeสถานะ ใดๆ ตัวอย่างต่อไปนี้รวมถึงคลาส ส่วนใหญ่เพื่อแสดงให้เห็นว่าคลาสนี้ไม่ทริกเกอร์สไตล์พิเศษใดๆ

หากต้องการถ่ายทอดสถานะใช้งานไปยังเทคโนโลยีช่วยเหลือ ให้ใช้aria-currentแอตทริบิวต์ — โดยใช้pageค่าสำหรับหน้าปัจจุบัน หรือtrueสำหรับรายการปัจจุบันในชุด

html
<ul class="nav">
  <li class="nav-item">
    <a class="nav-link active" aria-current="page" href="#">Active</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled">Disabled</a>
  </li>
</ul>

มีการใช้ชั้นเรียนตลอด ดังนั้นมาร์กอัปของคุณจึงมีความยืดหยุ่นสูง ใช้<ul>เช่นด้านบน<ol>หากลำดับของรายการของคุณมีความสำคัญหรือม้วนของคุณเองด้วย<nav>องค์ประกอบ เนื่องจากการ.navใช้display: flexลิงก์ nav จึงทำงานเหมือนกับรายการ nav แต่ไม่มีมาร์กอัปเพิ่มเติม

html
<nav class="nav">
  <a class="nav-link active" aria-current="page" href="#">Active</a>
  <a class="nav-link" href="#">Link</a>
  <a class="nav-link" href="#">Link</a>
  <a class="nav-link disabled">Disabled</a>
</nav>

รูปแบบที่มีจำหน่าย

เปลี่ยนรูปแบบของ.navองค์ประกอบด้วยตัวปรับแต่งและยูทิลิตี้ มิกซ์แอนด์แมทช์ได้ตามต้องการ หรือสร้างเองก็ได้

การจัดตำแหน่งแนวนอน

เปลี่ยนการจัดตำแหน่งแนวนอนของการนำทางด้วย ยูทิลิ ตี้flexbox ตามค่าเริ่มต้น navs จะจัดชิดซ้าย แต่คุณสามารถเปลี่ยนให้จัดกึ่งกลางหรือจัดชิดขวาได้อย่างง่ายดาย

ศูนย์กลางด้วย.justify-content-center:

html
<ul class="nav justify-content-center">
  <li class="nav-item">
    <a class="nav-link active" aria-current="page" href="#">Active</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled">Disabled</a>
  </li>
</ul>

ชิดขวาด้วย.justify-content-end:

html
<ul class="nav justify-content-end">
  <li class="nav-item">
    <a class="nav-link active" aria-current="page" href="#">Active</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled">Disabled</a>
  </li>
</ul>

แนวตั้ง

จัดเรียงการนำทางของคุณโดยเปลี่ยนทิศทางของรายการแบบยืดหยุ่นด้วย.flex-columnยูทิลิตี้ ต้องการสแต็กบนวิวพอร์ตบางอัน แต่ไม่ใช่ที่อื่นใช่หรือไม่ ใช้เวอร์ชันที่ตอบสนอง (เช่น.flex-sm-column)

html
<ul class="nav flex-column">
  <li class="nav-item">
    <a class="nav-link active" aria-current="page" href="#">Active</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled">Disabled</a>
  </li>
</ul>

เช่นเคย การนำทางในแนวตั้งสามารถทำได้โดยไม่มี<ul>s เช่นกัน

html
<nav class="nav flex-column">
  <a class="nav-link active" aria-current="page" href="#">Active</a>
  <a class="nav-link" href="#">Link</a>
  <a class="nav-link" href="#">Link</a>
  <a class="nav-link disabled">Disabled</a>
</nav>

แท็บ

ใช้การนำทางพื้นฐานจากด้านบนและเพิ่ม.nav-tabsคลาสเพื่อสร้างอินเทอร์เฟซแบบแท็บ ใช้พวกมันเพื่อสร้างขอบเขตที่ แท็บ ได้ด้วยปลั๊กอิน JavaScript แท็บ ของเรา

html
<ul class="nav nav-tabs">
  <li class="nav-item">
    <a class="nav-link active" aria-current="page" href="#">Active</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled">Disabled</a>
  </li>
</ul>

ยาเม็ด

ใช้ HTML เดียวกันนั้น แต่ใช้.nav-pillsแทน:

html
<ul class="nav nav-pills">
  <li class="nav-item">
    <a class="nav-link active" aria-current="page" href="#">Active</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled">Disabled</a>
  </li>
</ul>

เติมและปรับให้เหมาะสม

บังคับ.navเนื้อหาของคุณให้ขยายความกว้างเต็มที่มีอยู่หนึ่งในสองคลาสตัวปรับแต่ง หากต้องการเติมพื้นที่ว่างทั้งหมดตามสัดส่วน ให้.nav-itemใช้.nav-fill. สังเกตว่าพื้นที่แนวนอนทั้งหมดถูกครอบครอง แต่ไม่ใช่ทุกรายการนำทางที่มีความกว้างเท่ากัน

html
<ul class="nav nav-pills nav-fill">
  <li class="nav-item">
    <a class="nav-link active" aria-current="page" href="#">Active</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Much longer nav link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled">Disabled</a>
  </li>
</ul>

เมื่อใช้<nav>การนำทางแบบอิง คุณสามารถละเว้นได้อย่างปลอดภัย.nav-itemเนื่องจาก.nav-linkจำเป็นสำหรับ<a>องค์ประกอบการจัดสไตล์เท่านั้น

html
<nav class="nav nav-pills nav-fill">
  <a class="nav-link active" aria-current="page" href="#">Active</a>
  <a class="nav-link" href="#">Much longer nav link</a>
  <a class="nav-link" href="#">Link</a>
  <a class="nav-link disabled">Disabled</a>
</nav>

สำหรับองค์ประกอบที่มีความกว้างเท่ากัน ให้ใช้.nav-justified. พื้นที่แนวนอนทั้งหมดจะถูกครอบครองโดยลิงก์การนำทาง แต่ต่างจาก.nav-fillด้านบน ทุกรายการการนำทางจะมีความกว้างเท่ากัน

html
<ul class="nav nav-pills nav-justified">
  <li class="nav-item">
    <a class="nav-link active" aria-current="page" href="#">Active</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Much longer nav link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled">Disabled</a>
  </li>
</ul>

คล้ายกับ.nav-fillตัวอย่างโดย<nav>ใช้การนำทางแบบอิง

html
<nav class="nav nav-pills nav-justified">
  <a class="nav-link active" aria-current="page" href="#">Active</a>
  <a class="nav-link" href="#">Much longer nav link</a>
  <a class="nav-link" href="#">Link</a>
  <a class="nav-link disabled">Disabled</a>
</nav>

การทำงานกับยูทิลิตีแบบยืดหยุ่น

หากคุณต้องการรูปแบบการนำทางที่ตอบสนอง ให้ลองใช้ชุด ยูทิลิ ตี้flexbox ในขณะที่ละเอียดมากขึ้น ยูทิลิตีเหล่านี้ให้การปรับแต่งที่ดีขึ้นในจุดสั่งหยุดที่ตอบสนอง ในตัวอย่างด้านล่าง การนำทางของเราจะวางซ้อนกันบนเบรกพอยต์ที่ต่ำที่สุด จากนั้นปรับให้เข้ากับเลย์เอาต์แนวนอนที่เติมความกว้างที่มีอยู่โดยเริ่มจากเบรกพอยต์ขนาดเล็ก

html
<nav class="nav nav-pills flex-column flex-sm-row">
  <a class="flex-sm-fill text-sm-center nav-link active" aria-current="page" href="#">Active</a>
  <a class="flex-sm-fill text-sm-center nav-link" href="#">Longer nav link</a>
  <a class="flex-sm-fill text-sm-center nav-link" href="#">Link</a>
  <a class="flex-sm-fill text-sm-center nav-link disabled">Disabled</a>
</nav>

เกี่ยวกับการเข้าถึง

หากคุณกำลังใช้ navs เพื่อจัดเตรียมแถบการนำทาง อย่าลืมเพิ่ม a role="navigation"ลงในคอนเทนเนอร์หลักที่สมเหตุสมผลที่สุดของ<ul>นั้น หรือ<nav>ล้อมองค์ประกอบไว้รอบการนำทางทั้งหมด อย่าเพิ่มบทบาทให้กับ<ul>ตัวเอง เนื่องจากจะทำให้ไม่สามารถประกาศเป็นรายการจริงโดยเทคโนโลยีอำนวยความสะดวก

โปรดทราบว่า ไม่ ควรกำหนด แถบนำทาง แม้ว่าจะกำหนดรูปแบบเป็นแท็บของ.nav-tabsชั้นเรียนก็ตามไม่ ควร กำหนดrole="tablist"หรือแอตทริบิวต์ สิ่งเหล่านี้เหมาะสำหรับอินเทอร์เฟซแบบแท็บแบบไดนามิกเท่านั้น ตามที่อธิบายไว้ใน รูปแบบแท็ บARIA Authoring Practices Guide ดูการทำงานของ JavaScriptสำหรับอินเทอร์เฟซแบบแท็บแบบไดนามิกในส่วนนี้สำหรับตัวอย่าง แอตทริบิวต์ไม่จำเป็นบนอินเทอร์เฟซแท็บแบบไดนามิกเนื่องจาก JavaScript ของเราจัดการสถานะที่เลือกโดยการเพิ่มในแท็บที่ใช้งานอยู่role="tab"role="tabpanel"aria-currentaria-selected="true"

การใช้ดรอปดาวน์

เพิ่มเมนูดรอปดาวน์ด้วย HTML เพิ่มเติมเล็กน้อยและปลั๊กอิน JavaScript แบบเลื่อนลง

แท็บที่มีดรอปดาวน์

html
<ul class="nav nav-tabs">
  <li class="nav-item">
    <a class="nav-link active" aria-current="page" href="#">Active</a>
  </li>
  <li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
    <ul class="dropdown-menu">
      <li><a class="dropdown-item" href="#">Action</a></li>
      <li><a class="dropdown-item" href="#">Another action</a></li>
      <li><a class="dropdown-item" href="#">Something else here</a></li>
      <li><hr class="dropdown-divider"></li>
      <li><a class="dropdown-item" href="#">Separated link</a></li>
    </ul>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled">Disabled</a>
  </li>
</ul>

ยาที่มีรายการแบบเลื่อนลง

html
<ul class="nav nav-pills">
  <li class="nav-item">
    <a class="nav-link active" aria-current="page" href="#">Active</a>
  </li>
  <li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
    <ul class="dropdown-menu">
      <li><a class="dropdown-item" href="#">Action</a></li>
      <li><a class="dropdown-item" href="#">Another action</a></li>
      <li><a class="dropdown-item" href="#">Something else here</a></li>
      <li><hr class="dropdown-divider"></li>
      <li><a class="dropdown-item" href="#">Separated link</a></li>
    </ul>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="#">Link</a>
  </li>
  <li class="nav-item">
    <a class="nav-link disabled">Disabled</a>
  </li>
</ul>

CSS

ตัวแปร

เพิ่มใน v5.2.0

ในฐานะที่เป็นส่วนหนึ่งของแนวทางการเปลี่ยนแปลง CSS ของ Bootstrap ขณะนี้ navs ใช้ตัวแปร CSS ในเครื่องบน.nav, .nav-tabs, และ.nav-pillsสำหรับการปรับแต่ง��ามเวลาจริงที่ได้รับการปรับปรุง ค่าสำหรับตัวแปร CSS ถูกกำหนดผ่าน Sass ดังนั้นยังคงรองรับการปรับแต่ง Sass ด้วยเช่นกัน

ใน.navคลาสพื้นฐาน:

  --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};
  --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};
  @include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);
  --#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};
  --#{$prefix}nav-link-color: #{$nav-link-color};
  --#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};
  --#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};
  

ใน.nav-tabsคลาสตัวแก้ไข:

  --#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};
  --#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};
  --#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};
  --#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};
  --#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};
  --#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};
  --#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};
  

ใน.nav-pillsคลาสตัวแก้ไข:

  --#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};
  --#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};
  --#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};
  

ตัวแปร Sass

$nav-link-padding-y:                .5rem;
$nav-link-padding-x:                1rem;
$nav-link-font-size:                null;
$nav-link-font-weight:              null;
$nav-link-color:                    var(--#{$prefix}link-color);
$nav-link-hover-color:              var(--#{$prefix}link-hover-color);
$nav-link-transition:               color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out;
$nav-link-disabled-color:           $gray-600;

$nav-tabs-border-color:             $gray-300;
$nav-tabs-border-width:             $border-width;
$nav-tabs-border-radius:            $border-radius;
$nav-tabs-link-hover-border-color:  $gray-200 $gray-200 $nav-tabs-border-color;
$nav-tabs-link-active-color:        $gray-700;
$nav-tabs-link-active-bg:           $body-bg;
$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg;

$nav-pills-border-radius:           $border-radius;
$nav-pills-link-active-color:       $component-active-color;
$nav-pills-link-active-bg:          $component-active-bg;

พฤติกรรมจาวาสคริปต์

ใช้ปลั๊กอิน JavaScript ของแท็บ รวมเป็นทีละรายการหรือผ่านbootstrap.jsไฟล์ที่คอมไพล์แล้ว เพื่อขยายแท็บการนำทางและยาเม็ด เพื่อสร้างบานหน้าต่างที่แท็บได้ของเนื้อหาในเครื่อง

นี่คือเนื้อหาที่พักบางส่วนในเนื้อหาที่เกี่ยวข้องของแท็บหน้าแรก การคลิกแท็บอื่นจะเป็นการสลับการมองเห็นของแท็บนี้ในครั้งต่อไป แท็บ JavaScript สลับคลาสเพื่อควบคุมการมองเห็นเนื้อหาและการกำหนดสไตล์ คุณสามารถใช้กับแท็บ ยาเม็ด และ.navการนำทางที่ขับเคลื่อนด้วยพลังงาน อื่นๆ

นี่คือเนื้อหาที่พักบางส่วนในเนื้อหาที่เกี่ยวข้องของแท็บโปรไฟล์ การคลิกแท็บอื่นจะเป็นการสลับการมองเห็นของแท็บนี้ในครั้งต่อไป แท็บ JavaScript สลับคลาสเพื่อควบคุมการมองเห็นเนื้อหาและการกำหนดสไตล์ คุณสามารถใช้กับแท็บ ยาเม็ด และ.navการนำทางที่ขับเคลื่อนด้วยพลังงาน อื่นๆ

This is some placeholder content the Contact tab's associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other .nav-powered navigation.

This is some placeholder content the Disabled tab's associated content.

<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item" role="presentation">
    <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home-tab-pane" type="button" role="tab" aria-controls="home-tab-pane" aria-selected="true">Home</button>
  </li>
  <li class="nav-item" role="presentation">
    <button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile-tab-pane" type="button" role="tab" aria-controls="profile-tab-pane" aria-selected="false">Profile</button>
  </li>
  <li class="nav-item" role="presentation">
    <button class="nav-link" id="contact-tab" data-bs-toggle="tab" data-bs-target="#contact-tab-pane" type="button" role="tab" aria-controls="contact-tab-pane" aria-selected="false">Contact</button>
  </li>
  <li class="nav-item" role="presentation">
    <button class="nav-link" id="disabled-tab" data-bs-toggle="tab" data-bs-target="#disabled-tab-pane" type="button" role="tab" aria-controls="disabled-tab-pane" aria-selected="false" disabled>Disabled</button>
  </li>
</ul>
<div class="tab-content" id="myTabContent">
  <div class="tab-pane fade show active" id="home-tab-pane" role="tabpanel" aria-labelledby="home-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="profile-tab-pane" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="contact-tab-pane" role="tabpanel" aria-labelledby="contact-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="disabled-tab-pane" role="tabpanel" aria-labelledby="disabled-tab" tabindex="0">...</div>
</div>

เพื่อช่วยให้ตรงกับความต้องการของคุณ วิธีนี้ใช้ได้กับ<ul>มาร์กอัปตามที่แสดงด้านบน หรือมาร์กอัป "ม้วนของคุณเอง" ตามอำเภอใจ โปรดทราบว่าหากคุณใช้<nav>คุณไม่ควรเพิ่มrole="tablist"เข้าไปโดยตรง เนื่องจากจะแทนที่บทบาทดั้งเดิมขององค์ประกอบที่เป็นจุดสังเกตในการนำทาง ให้เปลี่ยนไปใช้องค์ประกอบอื่นแทน (ในตัวอย่างด้านล่าง แบบง่าย<div>) และ<nav>ล้อมรอบองค์ประกอบนั้น

<nav>
  <div class="nav nav-tabs" id="nav-tab" role="tablist">
    <button class="nav-link active" id="nav-home-tab" data-bs-toggle="tab" data-bs-target="#nav-home" type="button" role="tab" aria-controls="nav-home" aria-selected="true">Home</button>
    <button class="nav-link" id="nav-profile-tab" data-bs-toggle="tab" data-bs-target="#nav-profile" type="button" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</button>
    <button class="nav-link" id="nav-contact-tab" data-bs-toggle="tab" data-bs-target="#nav-contact" type="button" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</button>
    <button class="nav-link" id="nav-disabled-tab" data-bs-toggle="tab" data-bs-target="#nav-disabled" type="button" role="tab" aria-controls="nav-disabled" aria-selected="false" disabled>Disabled</button>
  </div>
</nav>
<div class="tab-content" id="nav-tabContent">
  <div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="nav-disabled" role="tabpanel" aria-labelledby="nav-disabled-tab" tabindex="0">...</div>
</div>

ปลั๊กอินแท็บยังใช้งานได้กับยาเม็ด

นี่คือเนื้อหาที่พักบางส่วนในเนื้อหาที่เกี่ยวข้องของแท็บหน้าแรก การคลิกแท็บอื่นจะเป็นการสลับการมองเห็นของแท็บนี้ในครั้งต่อไป แท็บ JavaScript สลับคลาสเพื่อควบคุมการมองเห็นเนื้อหาและการกำหนดสไตล์ คุณสามารถใช้กับแท็บ ยาเม็ด และ.navการนำทางที่ขับเคลื่อนด้วยพลังงาน อื่นๆ

This is some placeholder content the Profile tab's associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other .nav-powered navigation.

This is some placeholder content the Contact tab's associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other .nav-powered navigation.

This is some placeholder content the Disabled tab's associated content.

<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
  <li class="nav-item" role="presentation">
    <button class="nav-link active" id="pills-home-tab" data-bs-toggle="pill" data-bs-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">Home</button>
  </li>
  <li class="nav-item" role="presentation">
    <button class="nav-link" id="pills-profile-tab" data-bs-toggle="pill" data-bs-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</button>
  </li>
  <li class="nav-item" role="presentation">
    <button class="nav-link" id="pills-contact-tab" data-bs-toggle="pill" data-bs-target="#pills-contact" type="button" role="tab" aria-controls="pills-contact" aria-selected="false">Contact</button>
  </li>
  <li class="nav-item" role="presentation">
    <button class="nav-link" id="pills-disabled-tab" data-bs-toggle="pill" data-bs-target="#pills-disabled" type="button" role="tab" aria-controls="pills-disabled" aria-selected="false" disabled>Disabled</button>
  </li>
</ul>
<div class="tab-content" id="pills-tabContent">
  <div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="pills-disabled" role="tabpanel" aria-labelledby="pills-disabled-tab" tabindex="0">...</div>
</div>

และด้วยเม็ดยาแนวตั้ง ตามหลักการ แล้ว สำหรับแท็บแนวตั้ง คุณควรเพิ่มaria-orientation="vertical"ไปยังคอนเทนเนอร์รายการแท็บด้วย

นี่คือเนื้อหาที่พักบางส่วนในเนื้อหาที่เกี่ยวข้องของแท็บหน้าแรก การคลิกแท็บอื่นจะเป็นการสลับการมองเห็นของแท็บนี้ในครั้งต่อไป แท็บ JavaScript สลับคลาสเพื่อควบคุมการมองเห็นเนื้อหาและการกำหนดสไตล์ คุณสามารถใช้กับแท็บ ยาเม็ด และ.navการนำทางที่ขับเคลื่อนด้วยพลังงาน อื่นๆ

This is some placeholder content the Profile tab's associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other .nav-powered navigation.

This is some placeholder content the Disabled tab's associated content.

This is some placeholder content the Messages tab's associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other .nav-powered navigation.

This is some placeholder content the Settings tab's associated content. Clicking another tab will toggle the visibility of this one for the next. The tab JavaScript swaps classes to control the content visibility and styling. You can use it with tabs, pills, and any other .nav-powered navigation.

<div class="d-flex align-items-start">
  <div class="nav flex-column nav-pills me-3" id="v-pills-tab" role="tablist" aria-orientation="vertical">
    <button class="nav-link active" id="v-pills-home-tab" data-bs-toggle="pill" data-bs-target="#v-pills-home" type="button" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</button>
    <button class="nav-link" id="v-pills-profile-tab" data-bs-toggle="pill" data-bs-target="#v-pills-profile" type="button" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</button>
    <button class="nav-link" id="v-pills-disabled-tab" data-bs-toggle="pill" data-bs-target="#v-pills-disabled" type="button" role="tab" aria-controls="v-pills-disabled" aria-selected="false" disabled>Disabled</button>
    <button class="nav-link" id="v-pills-messages-tab" data-bs-toggle="pill" data-bs-target="#v-pills-messages" type="button" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</button>
    <button class="nav-link" id="v-pills-settings-tab" data-bs-toggle="pill" data-bs-target="#v-pills-settings" type="button" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</button>
  </div>
  <div class="tab-content" id="v-pills-tabContent">
    <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab" tabindex="0">...</div>
    <div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-tab" tabindex="0">...</div>
    <div class="tab-pane fade" id="v-pills-disabled" role="tabpanel" aria-labelledby="v-pills-disabled-tab" tabindex="0">...</div>
    <div class="tab-pane fade" id="v-pills-messages" role="tabpanel" aria-labelledby="v-pills-messages-tab" tabindex="0">...</div>
    <div class="tab-pane fade" id="v-pills-settings" role="tabpanel" aria-labelledby="v-pills-settings-tab" tabindex="0">...</div>
  </div>
</div>

การเข้าถึง

อินเทอร์เฟซแบบแท็บแบบไดนามิก ตามที่อธิบายไว้ในรูปแบบแท็บ ARIA Authoring Practices Guideต้องการrole="tablist", role="tab", role="tabpanel", และaria-แอตทริบิวต์เพิ่มเติมเพื่อถ่ายทอดโครงสร้าง ฟังก์ชันการทำงาน และสถานะปัจจุบันแก่ผู้ใช้เทคโนโลยีอำนวยความสะดวก (เช่น โปรแกรมอ่านหน้าจอ) ตามแนวทางปฏิบัติที่ดีที่สุด เราขอแนะนำให้ใช้<button>องค์ประกอบสำหรับแท็บ เนื่องจากตัวควบคุมเหล่านี้เป็นตัวควบคุมที่ทริกเกอร์การเปลี่ยนแปลงแบบไดนามิก แทนที่จะเป็นลิงก์ที่นำทางไปยังหน้าหรือตำแหน่งใหม่

เพื่อให้สอดคล้องกับรูปแบบ ARIA Authoring Practices เฉพาะแท็บที่ใช้งานอยู่ในปัจจุบันเท่านั้นที่จะได้รับโฟกัสของแป้นพิมพ์ เมื่อเริ่มต้นปลั๊กอิน JavaScript ปลั๊กอินจะตั้งค่าtabindex="-1"ในการควบคุมแท็บที่ไม่ใช้งานทั้งหมด เมื่อแท็บที่ใช้งานอยู่ในปัจจุบันมีโฟกัสแล้ว ปุ่มเคอร์เซอร์จะเปิดใช้งานแท็บก่อนหน้า/ถัดไป โดยปลั๊กอินจะเปลี่ยนการท่องtabindexไปตามลำดับ อย่างไรก็ตาม โปรดทราบว่าปลั๊กอิน JavaScript ไม่ได้แยกความแตกต่างระหว่างรายการแท็บแนวนอนและแนวตั้งเมื่อพูดถึงการโต้ตอบกับปุ่มเคอร์เซอร์: โดยไม่คำนึงถึงการวางแนวของรายการแท็บ ทั้ง เคอร์เซอร์บน และซ้ายจะไปที่แท็บก่อนหน้า และเคอร์เซอร์ล่างและเคอร์เซอร์ขวาจะไปที่ แท็บถัดไป

โดยทั่วไป เพื่ออำนวยความสะดวกในการนำทางด้วยแป้นพิมพ์ ขอแนะนำให้ทำให้แผงแท็บสามารถโฟกัสได้เช่นกัน เว้นแต่องค์ประกอบแรกที่มีเนื้อหาที่มีความหมายภายในแผงแท็บจะสามารถโฟกัสได้อยู่แล้ว ปลั๊กอิน JavaScript ไม่ได้พยายามจัดการด้านนี้—หากเหมาะสม คุณจะต้องทำให้แผงแท็บของคุณโฟกัสได้อย่างชัดเจนโดยเพิ่ม tabindex="0"ในมาร์กอัปของคุณ
ปลั๊กอิน JavaScript ของแท็บ ไม่รองรับอินเทอร์เฟซแบบแท็บที่มีเมนูดรอปดาวน์ เนื่องจากสิ่งเหล่านี้ทำให้เกิดปัญหาด้านการใช้งานและการเข้าถึง จากมุมมองการใช้งาน การที่องค์ประกอบทริกเกอร์ของแท็บที่แสดงอยู่ในปัจจุบันไม่สามารถมองเห็นได้ในทันที (เนื่องจากอยู่ภายในเมนูดรอปดาวน์แบบปิด) อาจทำให้เกิดความสับสน จากมุมมองการช่วยสำหรับการเข้าถึง ขณะนี้ยังไม่มีวิธีที่เหมาะสมในการแมปโครงสร้างประเภทนี้กับรูปแบบ WAI ARIA มาตรฐาน ซึ่งหมายความว่าผู้ใช้เทคโนโลยีอำนวยความสะดวกไม่สามารถเข้าใจได้ง่าย

การใช้แอตทริบิวต์ข้อมูล

คุณสามารถเปิดใช้งานการนำทางแท็บหรือยาเม็ดโดยไม่ต้องเขียน JavaScript ใด ๆ โดยเพียงแค่ระบุdata-bs-toggle="tab"หรือdata-bs-toggle="pill"บนองค์ประกอบ ใช้แอตทริบิวต์ข้อมูลเหล่านี้ใน.nav-tabsหรือ.nav-pills

<!-- Nav tabs -->
<ul class="nav nav-tabs" id="myTab" role="tablist">
  <li class="nav-item" role="presentation">
    <button class="nav-link active" id="home-tab" data-bs-toggle="tab" data-bs-target="#home" type="button" role="tab" aria-controls="home" aria-selected="true">Home</button>
  </li>
  <li class="nav-item" role="presentation">
    <button class="nav-link" id="profile-tab" data-bs-toggle="tab" data-bs-target="#profile" type="button" role="tab" aria-controls="profile" aria-selected="false">Profile</button>
  </li>
  <li class="nav-item" role="presentation">
    <button class="nav-link" id="messages-tab" data-bs-toggle="tab" data-bs-target="#messages" type="button" role="tab" aria-controls="messages" aria-selected="false">Messages</button>
  </li>
  <li class="nav-item" role="presentation">
    <button class="nav-link" id="settings-tab" data-bs-toggle="tab" data-bs-target="#settings" type="button" role="tab" aria-controls="settings" aria-selected="false">Settings</button>
  </li>
</ul>

<!-- Tab panes -->
<div class="tab-content">
  <div class="tab-pane active" id="home" role="tabpanel" aria-labelledby="home-tab" tabindex="0">...</div>
  <div class="tab-pane" id="profile" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">...</div>
  <div class="tab-pane" id="messages" role="tabpanel" aria-labelledby="messages-tab" tabindex="0">...</div>
  <div class="tab-pane" id="settings" role="tabpanel" aria-labelledby="settings-tab" tabindex="0">...</div>
</div>

ผ่านจาวาสคริปต์

เปิดใช้งานแท็บแบบแท็บได้ผ่าน JavaScript (ต้องเปิดใช้งานแต่ละแท็บแยกกัน):

const triggerTabList = document.querySelectorAll('#myTab button')
triggerTabList.forEach(triggerEl => {
  const tabTrigger = new bootstrap.Tab(triggerEl)

  triggerEl.addEventListener('click', event => {
    event.preventDefault()
    tabTrigger.show()
  })
})

คุณสามารถเปิดใช้งานแต่ละแท็บได้หลายวิธี:

const triggerEl = document.querySelector('#myTab button[data-bs-target="#profile"]')
bootstrap.Tab.getInstance(triggerEl).show() // Select tab by name

const triggerFirstTabEl = document.querySelector('#myTab li:first-child button')
bootstrap.Tab.getInstance(triggerFirstTabEl).show() // Select first tab

เอฟเฟกต์จาง

หากต้องการให้แท็บจางลง ให้เพิ่ม.fadeแต่ละ.tab-paneไฟล์ บานหน้าต่างแท็บแรกยังต้อง.showทำให้เนื้อหาเริ่มต้นมองเห็นได้

<div class="tab-content">
  <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="profile" role="tabpanel" aria-labelledby="profile-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="messages" role="tabpanel" aria-labelledby="messages-tab" tabindex="0">...</div>
  <div class="tab-pane fade" id="settings" role="tabpanel" aria-labelledby="settings-tab" tabindex="0">...</div>
</div>

วิธีการ

วิธีการและการเปลี่ยนแบบอะซิงโครนัส

เมธอด API ทั้งหมดเป็นแบบอะซิงโครนัสและเริ่มต้นการเปลี่ยนแปลง พวกเขาจะกลับไปที่ผู้โทรทันทีที่เริ่มเปลี่ยน แต่ ก่อน ที่จะสิ้นสุด นอกจากนี้ การเรียกเมธอดบนคอมโพเนนต์การเปลี่ยนจะถูกละเว้น

ดูเอกสาร JavaScript ของเราสำหรับข้อมูลเพิ่มเติม

เปิดใช้งานเนื้อหาของคุณเป็นองค์ประกอบแท็บ

คุณสามารถสร้างอินสแตนซ์แท็บด้วยตัวสร้างได้ เช่น

const bsTab = new bootstrap.Tab('#myTab')
วิธี คำอธิบาย
dispose ทำลายแท็บขององค์ประกอบ
getInstance วิธีการแบบคงที่ซึ่งช่วยให้คุณได้รับอินสแตนซ์แท็บที่เชื่อมโยงกับองค์ประกอบ DOM คุณสามารถใช้ได้ดังนี้bootstrap.Tab.getInstance(element):
getOrCreateInstance วิธีการแบบคงที่ซึ่งส่งคืนอินสแตนซ์แท็บที่เกี่ยวข้องกับองค์ประกอบ DOM หรือสร้างใหม่ในกรณีที่ไม่ได้เริ่มต้น คุณสามารถใช้สิ่งนี้: bootstrap.Tab.getOrCreateInstance(element).
show เลือกแท็บที่กำหนดและแสดงบานหน้าต่างที่เกี่ยวข้อง แท็บอื่น ๆ ที่เลือกไว้ก่อนหน้านี้จะไม่ถูกเลือกและบานหน้าต่างที่เกี่ยวข้องจะถูกซ่อนไว้ กลับไปยังผู้โทรก่อนที่บานหน้าต่างแท็บจะแสดงขึ้นจริง (เช่น ก่อนที่shown.bs.tabเหตุการณ์จะเกิดขึ้น)

เหตุการณ์

เมื่อแสดงแท็บใหม่ เหตุการณ์จะเริ่มขึ้นตามลำดับต่อไปนี้:

  1. hide.bs.tab(บนแท็บที่ใช้งานอยู่ในปัจจุบัน)
  2. show.bs.tab(บนแท็บที่จะแสดง)
  3. hidden.bs.tab(ในแท็บที่ใช้งานก่อนหน้านี้ อันเดียวกับhide.bs.tabเหตุการณ์)
  4. shown.bs.tab(บนแท็บเพิ่งแสดงที่เพิ่งเปิดใช้งาน อันเดียวกับshow.bs.tabเหตุการณ์)

หากไม่มีแท็บใดเปิดใช้งานอยู่ เหตุการณ์ hide.bs.tabและhidden.bs.tabจะไม่เริ่มทำงาน

ประเภทงาน คำอธิบาย
hide.bs.tab เหตุการณ์นี้เริ่มทำงานเมื่อมีการแสดงแท็บใหม่ (และทำให้แท็บที่ใช้งานอยู่ก่อนหน้านี้ถูกซ่อนไว้) ใช้event.targetและevent.relatedTargetเพื่อกำหนดเป้าหมายแท็บที่ใช้งานอยู่ในปัจจุบันและแท็บใหม่ที่จะใช้งานเร็วๆ นี้ ตามลำดับ
hidden.bs.tab เหตุการณ์นี้เริ่มทำงานหลังจากแสดงแท็บใหม่ (และทำให้แท็บที่ใช้งานอยู่ก่อนหน้านี้ถูกซ่อนไว้) ใช้event.targetและevent.relatedTargetเพื่อกำหนดเป้าหมายแท็บที่ใช้งานอยู่ก่อนหน้าและแท็บใหม่ที่ใช้งานอยู่ตามลำดับ
show.bs.tab เหตุการณ์นี้เริ่มทำงานในการแสดงแท็บ แต่ก่อนที่จะมีการแสดงแท็บใหม่ ใช้event.targetและevent.relatedTargetเพื่อกำหนดเป้าหมายแท็บที่ใช้งานอยู่และแท็บที่ใช้งานอยู่ก่อนหน้า (ถ้ามี) ตามลำดับ
shown.bs.tab เหตุการณ์นี้เริ่มทำงานในการแสดงแท็บหลังจากแสดงแท็บแล้ว ใช้event.targetและevent.relatedTargetเพื่อกำหนดเป้าหมายแท็บที่ใช้งานอยู่และแท็บที่ใช้งานอยู่ก่อนหน้า (ถ้ามี) ตามลำดับ
const tabEl = document.querySelector('button[data-bs-toggle="tab"]')
tabEl.addEventListener('shown.bs.tab', event => {
  event.target // newly activated tab
  event.relatedTarget // previous active tab
})