導覽和標籤
如何使用 Bootstrap 內建的導覽元件的說明文件和範例。
基本導覽
Bootstrap 中提供的導覽共用一般的標記和樣式,從基本的 .nav
類別到啟用和停用狀態。切換修改器類別可在各個樣式之間切換。
基本 .nav
元件使用彈性盒狀模型建置,並提供建置各種導覽元件的強大基礎。它包含一些樣式覆寫(用於處理清單),一些連結內距以提供較大的點擊區域,以及基本的停用樣式。
基礎 .nav
元件不包含任何 .active
狀態。下列範例包含類別,主要是為了示範這個特定類別不會觸發任何特殊樣式。
若要傳達主動狀態給輔助技術,請使用 aria-current
屬性,對目前頁面使用 page
值,或對一組中的目前項目使用 true
。
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
整個過程中都使用類別,因此您的標記可以非常靈活。使用如上方的 <ul>
,如果項目順序很重要,則使用 <ol>
,或使用 <nav>
元素自行建立。由於 .nav
使用 display: flex
,因此導覽連結的行為與導覽項目相同,但沒有額外的標記。
<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" aria-disabled="true">Disabled</a>
</nav>
可用樣式
使用修改器和工具程式變更 .nav
元件的樣式。視需要混合和搭配,或自行建立。
水平對齊
使用 彈性盒工具程式 變更導覽的水平對齊。預設情況下,導覽會靠左對齊,但您可以輕鬆將它們變更為置中或靠右對齊。
使用 .justify-content-center
置中
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
使用 .justify-content-end
靠右對齊
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
垂直
使用 .flex-column
工具程式變更彈性項目方向,以堆疊您的導覽。需要在某些視窗中堆疊,但在其他視窗中不需要嗎?請使用回應式版本(例如 .flex-sm-column
)。
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
與以往相同,垂直導覽也可以不用 <ul>
。
<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" aria-disabled="true">Disabled</a>
</nav>
標籤
從上方取得基本導覽,並新增 .nav-tabs
類別以產生標籤式介面。使用它們搭配我們的 標籤 JavaScript 外掛程式 建立可切換標籤的區域。
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
藥丸
使用相同的 HTML,但改用 .nav-pills
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
底線
使用相同的 HTML,但改用 .nav-underline
<ul class="nav nav-underline">
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
填滿並置中
使用兩個修改器類別之一,強制您的 .nav
內容延伸至全部可用的寬度。若要使用 .nav-item
成比例地填滿所有可用空間,請使用 .nav-fill
。請注意,所有水平空間都已佔用,但並非每個導覽項目都具有相同的寬度。
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
在使用基於 <nav>
的導覽時,您可以安全地省略 .nav-item
,因為只有 .nav-link
是用於設定 <a>
元素的樣式。
<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" aria-disabled="true">Disabled</a>
</nav>
若要使用等寬元素,請使用 .nav-justified
。所有水平空間都將被導覽連結佔用,但與上述的 .nav-fill
不同,每個導覽項目都將具有相同的寬度。
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
類似於使用基於 <nav>
的導覽的 .nav-fill
範例。
<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" aria-disabled="true">Disabled</a>
</nav>
使用彈性公用程式
如果您需要具備回應式導覽的變化,請考慮使用一系列 彈性盒狀模型公用程式。雖然較為詳細,但這些公用程式在回應式中斷點中提供更佳的自訂功能。在以下範例中,我們的導覽將堆疊在最低中斷點上,然後適應從小中斷點開始填滿可用寬度的水平版面配置。
<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" aria-disabled="true">Disabled</a>
</nav>
關於無障礙
如果您使用 nav 提供導覽列,請務必將 role="navigation"
加入 <ul>
最合乎邏輯的父層容器,或在整個導覽周圍加上 <nav>
元素。請勿將角色加入 <ul>
本身,因為這會導致輔助技術無法將其宣告為實際清單。
請注意,導覽列即使視覺上以 .nav-tabs
類別設定為標籤樣式,不應給予 role="tablist"
、role="tab"
或 role="tabpanel"
屬性。這些屬性僅適用於動態標籤介面,如 ARIA 編寫實務指南標籤模式 中所述。請參閱本區段中 JavaScript 行為,以取得動態標籤介面的範例。由於我們的 JavaScript 會透過在活動標籤上加入 aria-selected="true"
來處理選取狀態,因此動態標籤介面不需要 aria-current
屬性。
使用下拉式選單
使用一些額外的 HTML 和 下拉式選單 JavaScript 外掛程式 加入下拉式選單。
含有下拉式選單的標籤
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
帶有下拉選單的藥丸
<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" aria-disabled="true">Disabled</a>
</li>
</ul>
CSS
變數
新增於 v5.2.0作為 Bootstrap 不斷演進的 CSS 變數方法的一部份,導覽列現在使用 `nav`、`nav-tabs` 和 `nav-pills` 上的區域 CSS 變數,以增強即時自訂功能。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};
在 `nav-underline` 修改器類別上
--#{$prefix}nav-underline-gap: #{$nav-underline-gap};
--#{$prefix}nav-underline-border-width: #{$nav-underline-border-width};
--#{$prefix}nav-underline-link-active-color: #{$nav-underline-link-active-color};
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: var(--#{$prefix}secondary-color);
$nav-link-focus-box-shadow: $focus-ring-box-shadow;
$nav-tabs-border-color: var(--#{$prefix}border-color);
$nav-tabs-border-width: var(--#{$prefix}border-width);
$nav-tabs-border-radius: var(--#{$prefix}border-radius);
$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color;
$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color);
$nav-tabs-link-active-bg: var(--#{$prefix}body-bg);
$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg;
$nav-pills-border-radius: var(--#{$prefix}border-radius);
$nav-pills-link-active-color: $component-active-color;
$nav-pills-link-active-bg: $component-active-bg;
$nav-underline-gap: 1rem;
$nav-underline-border-width: .125rem;
$nav-underline-link-active-color: var(--#{$prefix}emphasis-color);
JavaScript 行為
使用分頁 JavaScript 外掛程式(個別包含或透過已編譯的 `bootstrap.js` 檔案包含)來擴充我們的導覽分頁和藥丸,以建立區域內容的可分頁窗格。
這是 首頁分頁 的關聯內容的一些佔位符內容。按一下另一個分頁會切換此分頁的顯示/隱藏狀態。分頁 JavaScript 會切換類別來控制內容的顯示/隱藏狀態和樣式。您可以在分頁、藥丸和任何其他由 `nav` 提供動力的導覽中使用它。
這是 個人資料分頁 的關聯內容的一些佔位符內容。按一下另一個分頁會切換此分頁的顯示/隱藏狀態。分頁 JavaScript 會切換類別來控制內容的顯示/隱藏狀態和樣式。您可以在分頁、藥丸和任何其他由 `nav` 提供動力的導覽中使用它。
這是連絡人分頁關聯內容的一些佔位符內容。按一下另一個分頁,會切換此分頁的能見度。分頁 JavaScript 會交換類別,以控制內容能見度和樣式。您可以將其與分頁、藥丸以及任何其他由 .nav
提供動力的導覽搭配使用。
這是已停用分頁關聯內容的一些佔位符內容。
<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` 提供動力的導覽中使用它。
這是 個人資料分頁 的關聯內容的一些佔位符內容。按一下另一個分頁會切換此分頁的顯示/隱藏狀態。分頁 JavaScript 會切換類別來控制內容的顯示/隱藏狀態和樣式。您可以在分頁、藥丸和任何其他由 `nav` 提供動力的導覽中使用它。
這是連絡人分頁關聯內容的一些佔位符內容。按一下另一個分頁,會切換此分頁的能見度。分頁 JavaScript 會交換類別,以控制內容能見度和樣式。您可以將其與分頁、藥丸以及任何其他由 .nav
提供動力的導覽搭配使用。
這是已停用分頁關聯內容的一些佔位符內容。
<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` 提供動力的導覽中使用它。
這是 個人資料分頁 的關聯內容的一些佔位符內容。按一下另一個分頁會切換此分頁的顯示/隱藏狀態。分頁 JavaScript 會切換類別來控制內容的顯示/隱藏狀態和樣式。您可以在分頁、藥丸和任何其他由 `nav` 提供動力的導覽中使用它。
這是已停用分頁關聯內容的一些佔位符內容。
這是訊息分頁關聯內容的一些佔位符內容。按一下另一個分頁,會切換此分頁的能見度。分頁 JavaScript 會交換類別,以控制內容能見度和樣式。您可以將其與分頁、藥丸以及任何其他由 .nav
提供動力的導覽搭配使用。
這是設定分頁關聯內容的一些佔位符內容。按一下另一個分頁,會切換此分頁的能見度。分頁 JavaScript 會交換類別,以控制內容能見度和樣式。您可以將其與分頁、藥丸以及任何其他由 .nav
提供動力的導覽搭配使用。
<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 編寫實務指南分頁模式 中所述,動態分頁介面需要 role="tablist"
、role="tab"
、role="tabpanel"
以及其他 aria-
屬性,才能傳達其結構、功能和目前狀態給輔助技術(例如螢幕閱讀器)的使用者。作為最佳實務,我們建議為分頁使用 <button>
元素,因為這些是會觸發動態變更的控制項,而不是導覽至新頁面或位置的連結。
依據 ARIA 撰寫實務範例,只有目前作用中的索引標籤會接收鍵盤焦點。當 JavaScript 外掛程式初始化時,會在所有非作用中的索引標籤控制項上設定 tabindex="-1"
。當目前作用中的索引標籤有焦點時,游標鍵會作用於前一個/下一個索引標籤。Home 和 End 鍵分別會作用於第一個和最後一個索引標籤。外掛程式會變更 流動 tabindex
。不過,請注意,在游標鍵互動時,JavaScript 外掛程式不會區分水平和垂直索引標籤清單:無論索引標籤清單的方向為何,向上 和 向左的游標都會移到前一個索引標籤,向下 和 向右的游標都會移到下一個索引標籤。
tabindex="0"
來明確讓索引標籤面板可以取得焦點。
使用資料屬性
您可以透過在元素上指定 data-bs-toggle="tab"
或 data-bs-toggle="pill"
來啟用標籤或藥丸導覽,而無需撰寫任何 JavaScript。在 .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
透過 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>
方法
將您的內容做為標籤元素啟用。
您可以使用建構函式建立標籤實例,例如
const bsTab = new bootstrap.Tab('#myTab')
方法 | 說明 |
---|---|
dispose |
銷毀元素的標籤。 |
getInstance |
靜態方法,讓您可以取得與 DOM 元素關聯的標籤實例,您可以像這樣使用它:bootstrap.Tab.getInstance(element) 。 |
getOrCreateInstance |
靜態方法,傳回與 DOM 元素關聯的標籤實例,或是在尚未初始化的情況下建立新的標籤實例。您可以像這樣使用它:bootstrap.Tab.getOrCreateInstance(element) 。 |
show |
選取指定的標籤並顯示其關聯的窗格。任何先前選取的其他標籤將會取消選取,且其關聯的窗格會隱藏。在標籤窗格實際顯示之前傳回呼叫者(即在 shown.bs.tab 事件發生之前)。 |
事件
顯示新標籤時,事件會按下列順序觸發
hide.bs.tab
(在目前活動的標籤上)show.bs.tab
(在即將顯示的標籤上)hidden.bs.tab
(在先前活動的標籤上,與hide.bs.tab
事件相同)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
})