Navs i karty
Dokumentacja i przykłady korzystania z dołączonych komponentów nawigacji Bootstrap.
Nawigacja podstawowa
Nawigacja dostępna w Bootstrap udostępnia ogólne oznaczenia i style, od .nav
klasy bazowej po stany aktywne i wyłączone. Zamień klasy modyfikatorów, aby przełączać się między poszczególnymi stylami.
Podstawowy .nav
komponent jest zbudowany z flexbox i zapewnia mocną podstawę do budowania wszystkich typów komponentów nawigacyjnych. Zawiera kilka nadpisań stylów (do pracy z listami), dopełnienie linków dla większych obszarów trafień i podstawową nieaktywną stylizację.
Składnik podstawowy .nav
nie zawiera żadnego .active
stanu. Poniższe przykłady zawierają klasę, głównie w celu zademonstrowania, że ta konkretna klasa nie uruchamia żadnych specjalnych stylów.
Aby przekazać stan aktywny technologiom pomocniczym, użyj aria-current
atrybutu — używając page
wartości dla bieżącej strony lub true
dla bieżącego elementu w zestawie.
<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>
Klasy są używane przez cały czas, więc Twoje znaczniki mogą być bardzo elastyczne. Użyj tego <ul>
jak powyżej, <ol>
jeśli kolejność twoich przedmiotów jest ważna, lub rzuć własną z <nav>
elementem. Ponieważ .nav
używa display: flex
, łącza nawigacyjne zachowują się tak samo jak elementy nawigacyjne, ale bez dodatkowych znaczników.
<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>
Dostępne style
Zmień styl .nav
komponentu s za pomocą modyfikatorów i narzędzi. Mieszaj i dopasowuj według potrzeb lub stwórz własną.
Wyrównanie w poziomie
Zmień poziome wyrównanie swojej nawigacji za pomocą narzędzi Flexbox . Domyślnie navs są wyrównane do lewej, ale można je łatwo zmienić na wyrównane do środka lub do prawej.
Wyśrodkowany z .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">Disabled</a>
</li>
</ul>
Wyrównany do prawej z .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">Disabled</a>
</li>
</ul>
Pionowy
Ułóż nawigację, zmieniając kierunek elementu elastycznego za pomocą .flex-column
narzędzia. Chcesz umieścić je na niektórych rzutniach, ale nie na innych? Użyj wersji responsywnych (np .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">Disabled</a>
</li>
</ul>
Jak zawsze, nawigacja pionowa jest również możliwa bez <ul>
s.
<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>
Karty
Pobiera podstawową nawigację z góry i dodaje .nav-tabs
klasę, aby wygenerować interfejs z zakładkami. Używaj ich do tworzenia regionów z zakładkami za pomocą naszej wtyczki JavaScript tab .
<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>
Pigułki
Weź ten sam kod HTML, ale .nav-pills
zamiast tego użyj:
<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>
Wypełnij i uzasadnij
Wymuś .nav
rozszerzenie zawartości do pełnej dostępnej szerokości jednej z dwóch klas modyfikatorów. Aby proporcjonalnie wypełnić całą dostępną przestrzeń .nav-item
, użyj .nav-fill
. Zauważ, że cała przestrzeń pozioma jest zajęta, ale nie każdy element nawigacji ma taką samą szerokość.
<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>
Korzystając z <nav>
nawigacji opartej, możesz bezpiecznie pominąć .nav-item
, ponieważ .nav-link
jest to wymagane tylko do stylizacji <a>
elementów.
<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>
W przypadku elementów o równej szerokości użyj .nav-justified
. Cała przestrzeń pozioma będzie zajęta przez łącza nawigacyjne, ale w przeciwieństwie do .nav-fill
powyższego, każdy element nawigacyjny będzie miał taką samą szerokość.
<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>
Podobnie jak w przypadku .nav-fill
korzystania z <nav>
nawigacji opartej.
<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>
Praca z narzędziami elastycznymi
Jeśli potrzebujesz responsywnych odmian nawigacji, rozważ użycie serii narzędzi flexbox . Te narzędzia są bardziej szczegółowe, ale oferują większą personalizację w responsywnych punktach przerwania. W poniższym przykładzie nasza nav zostanie ułożona w najniższym punkcie przerwania, a następnie dostosuje się do układu poziomego, który wypełnia dostępną szerokość, zaczynając od małego punktu przerwania.
<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>
Jeśli chodzi o dostępność
Jeśli używasz navs do zapewnienia paska nawigacyjnego, pamiętaj, aby dodać role="navigation"
do najbardziej logicznego kontenera nadrzędnego <ul>
lub owinąć <nav>
element wokół całej nawigacji. Nie dodawaj roli do <ul>
samej siebie, ponieważ uniemożliwiłoby to ogłaszanie jej jako rzeczywistej listy przez technologie wspomagające.
Zwróć uwagę, że paski nawigacyjne, nawet jeśli wizualnie są stylizowane na karty z .nav-tabs
klasą, nie powinny mieć atrybutów ani atrybutów . Są one odpowiednie tylko dla dynamicznych interfejsów z kartami, zgodnie z opisem we wzorcu kart ARIA Authoring Practices Guide . Zobacz na przykład zachowanie JavaScript dla dynamicznych interfejsów z kartami w tej sekcji. Atrybut nie jest konieczny w dynamicznych interfejsach z kartami, ponieważ nasz JavaScript obsługuje wybrany stan, dodając aktywną kartę.role="tablist"
role="tab"
role="tabpanel"
aria-current
aria-selected="true"
Korzystanie z menu rozwijanych
Dodaj rozwijane menu z trochę dodatkowym kodem HTML i rozwijaną wtyczką JavaScript .
Karty z listami rozwijanymi
<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>
Pigułki z listami rozwijanymi
<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
Zmienne
Dodano w wersji 5.2.0W ramach ewoluującego podejścia Bootstrap do zmiennych CSS, navs używają teraz lokalnych zmiennych CSS w .nav
, .nav-tabs
oraz .nav-pills
w celu udoskonalenia dostosowywania w czasie rzeczywistym. Wartości zmiennych CSS są ustawiane przez Sass, więc dostosowywanie Sass jest nadal obsługiwane.
W .nav
klasie bazowej:
--#{$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};
W .nav-tabs
klasie modyfikatora:
--#{$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};
W .nav-pills
klasie modyfikatora:
--#{$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};
Zmienne Sassa
$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;
zachowanie JavaScript
Użyj wtyczki JavaScript zakładki — dołącz ją pojedynczo lub za pośrednictwem skompilowanego bootstrap.js
pliku — aby rozszerzyć nasze zakładki nawigacyjne i pigułki, aby utworzyć panele z lokalnymi treściami z zakładkami.
To jest zawartość zastępcza powiązana z zawartością karty Strona główna . Kliknięcie innej karty przełączy widoczność tej na następną. Zakładka JavaScript zamienia klasy, aby kontrolować widoczność i styl treści. Możesz go używać z zakładkami, pigułkami i dowolną inną .nav
nawigacją z zasilaniem.
To jest zawartość zastępcza powiązana z zawartością karty Profil . Kliknięcie innej karty przełączy widoczność tej na następną. Zakładka JavaScript zamienia klasy, aby kontrolować widoczność i styl treści. Możesz go używać z zakładkami, pigułkami i dowolną inną .nav
nawigacją z zasilaniem.
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>
Aby dopasować się do twoich potrzeb, działa to ze <ul>
znacznikami opartymi na -, jak pokazano powyżej, lub z dowolnymi znacznikami „wyrzucaj własne”. Pamiętaj, że jeśli używasz <nav>
, nie należy dodawać role="tablist"
do niego bezpośrednio, ponieważ zastąpiłoby to natywną rolę elementu jako punktu orientacyjnego nawigacji. Zamiast tego przełącz się na alternatywny element (w poniższym przykładzie prosty <div>
) i owiń <nav>
go wokół niego.
<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>
Wtyczka tabs działa również z tabletkami.
To jest zawartość zastępcza powiązana z zawartością karty Strona główna . Kliknięcie innej karty przełączy widoczność tej na następną. Zakładka JavaScript zamienia klasy, aby kontrolować widoczność i styl treści. Możesz go używać z zakładkami, pigułkami i dowolną inną .nav
nawigacją z zasilaniem.
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>
I z pionowymi pigułkami. Idealnie, w przypadku kart pionowych, należy również dodać aria-orientation="vertical"
do kontenera listy kart.
To jest zawartość zastępcza powiązana z zawartością karty Strona główna . Kliknięcie innej karty przełączy widoczność tej na następną. Zakładka JavaScript zamienia klasy, aby kontrolować widoczność i styl treści. Możesz go używać z zakładkami, pigułkami i dowolną inną .nav
nawigacją z zasilaniem.
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>
Dostępność
Dynamiczne interfejsy z kartami, jak opisano we wzorcu kart ARIA Authoring Practices Guide , wymagają atrybutów role="tablist"
, role="tab"
, role="tabpanel"
i dodatkowych aria-
atrybutów w celu przekazania ich struktury, funkcjonalności i aktualnego stanu użytkownikom technologii wspomagających (takich jak czytniki ekranu). W ramach najlepszej praktyki zalecamy używanie <button>
elementów na kartach, ponieważ są to elementy sterujące, które powodują dynamiczną zmianę, a nie linki prowadzące do nowej strony lub lokalizacji.
Zgodnie ze wzorcem ARIA Authoring Practices tylko aktualnie aktywna karta otrzymuje fokus klawiatury. Po zainicjowaniu wtyczki JavaScript zostanie ona ustawiona tabindex="-1"
na wszystkich nieaktywnych kontrolkach zakładek. Gdy aktywna karta jest już aktywna, klawisze kursora aktywują poprzednią/następną kartę, a wtyczka odpowiednio zmienia wędrującetabindex
. Należy jednak pamiętać, że wtyczka JavaScript nie rozróżnia poziomych i pionowych list kart, jeśli chodzi o interakcje z klawiszami kursora: niezależnie od orientacji listy kart, zarówno kursor w górę, jak i w lewo przechodzi do poprzedniej karty, a kursor w dół i w prawo do następna zakładka.
tabindex="0"
znaczniki.
Korzystanie z atrybutów danych
Możesz aktywować nawigację po karcie lub pigułce bez pisania kodu JavaScript, po prostu określając data-bs-toggle="tab"
lub data-bs-toggle="pill"
na elemencie. Użyj tych atrybutów danych w .nav-tabs
lub .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>
Przez JavaScript
Włącz karty z zakładkami za pomocą JavaScript (każda karta musi być aktywowana osobno):
const triggerTabList = document.querySelectorAll('#myTab button')
triggerTabList.forEach(triggerEl => {
const tabTrigger = new bootstrap.Tab(triggerEl)
triggerEl.addEventListener('click', event => {
event.preventDefault()
tabTrigger.show()
})
})
Poszczególne zakładki możesz aktywować na kilka sposobów:
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
Efekt zanikania
Aby karty pojawiały się, dodaj .fade
do każdego .tab-pane
. Pierwszy panel z zakładkami musi również .show
uwidaczniać początkową zawartość.
<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>
Metody
Metody asynchroniczne i przejścia
Wszystkie metody API są asynchroniczne i rozpoczynają przejście . Wracają do rozmówcy zaraz po rozpoczęciu przejścia, ale przed jego zakończeniem . Ponadto wywołanie metody na składniku przechodzącym zostanie zignorowane .
Zobacz naszą dokumentację JavaScript, aby uzyskać więcej informacji .
Aktywuje treść jako element karty.
Możesz utworzyć instancję tabulatora za pomocą konstruktora, na przykład:
const bsTab = new bootstrap.Tab('#myTab')
metoda | Opis |
---|---|
dispose |
Niszczy zakładkę elementu. |
getInstance |
Metoda statyczna, która pozwala uzyskać instancję tabulatora skojarzoną z elementem DOM, możesz jej użyć w następujący sposób: bootstrap.Tab.getInstance(element) . |
getOrCreateInstance |
Metoda statyczna, która zwraca instancję tabulatora skojarzoną z elementem DOM lub tworzy nową w przypadku, gdy nie została zainicjowana. Możesz go użyć tak: bootstrap.Tab.getOrCreateInstance(element) . |
show |
Wybiera daną kartę i pokazuje powiązany z nią panel. Każda inna karta, która została wcześniej wybrana, zostanie odznaczona, a skojarzone z nią okienko zostanie ukryte. Powraca do dzwoniącego przed faktycznym wyświetleniem okienka kart (tj. przed shown.bs.tab wystąpieniem zdarzenia). |
Wydarzenia
Po wyświetleniu nowej karty zdarzenia są uruchamiane w następującej kolejności:
hide.bs.tab
(na aktualnie aktywnej zakładce)show.bs.tab
(w zakładce do pokazania)hidden.bs.tab
(na poprzedniej aktywnej zakładce, taka sama jak dlahide.bs.tab
wydarzenia)shown.bs.tab
(na nowo aktywnej właśnie wyświetlonej zakładce, takiej samej jak dlashow.bs.tab
wydarzenia)
Jeżeli żadna zakładka nie była już aktywna, to zdarzenia hide.bs.tab
i hidden.bs.tab
nie zostaną wywołane.
Typ wydarzenia | Opis |
---|---|
hide.bs.tab |
To zdarzenie jest wyzwalane, gdy ma być pokazana nowa zakładka (a tym samym ukryta poprzednia aktywna zakładka). Użyj event.target i event.relatedTarget do kierowania odpowiednio na bieżącą aktywną kartę i nową wkrótce aktywną kartę. |
hidden.bs.tab |
To zdarzenie jest uruchamiane po wyświetleniu nowej karty (a tym samym ukrycie poprzedniej aktywnej karty). Użyj event.target i event.relatedTarget do kierowania odpowiednio na poprzednią aktywną kartę i nową aktywną kartę. |
show.bs.tab |
To zdarzenie jest uruchamiane na pokazie zakładek, ale przed pokazaniem nowej zakładki. Użyj event.target i event.relatedTarget , aby wybrać odpowiednio aktywną kartę i poprzednią aktywną kartę (jeśli jest dostępna). |
shown.bs.tab |
To zdarzenie jest uruchamiane na pokazie kart po wyświetleniu karty. Użyj event.target i event.relatedTarget , aby wybrać odpowiednio aktywną kartę i poprzednią aktywną kartę (jeśli jest dostępna). |
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
})