Przejdź do głównej zawartości Przejdź do nawigacji w dokumentach
Check
in English

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 .navklasy bazowej po stany aktywne i wyłączone. Zamień klasy modyfikatorów, aby przełączać się między poszczególnymi stylami.

Podstawowy .navkomponent 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 .navnie zawiera żadnego .activestanu. 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-currentatrybutu — używając pagewartości dla bieżącej strony lub truedla bieżącego elementu w zestawie.

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>

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ż .navużywa display: flex, łącza nawigacyjne zachowują się tak samo jak elementy nawigacyjne, ale bez dodatkowych znaczników.

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>

Dostępne style

Zmień styl .navkomponentu 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:

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>

Wyrównany do prawej z .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>

Pionowy

Ułóż nawigację, zmieniając kierunek elementu elastycznego za pomocą .flex-columnnarzędzia. Chcesz umieścić je na niektórych rzutniach, ale nie na innych? Użyj wersji responsywnych (np .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>

Jak zawsze, nawigacja pionowa jest również możliwa bez <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>

Karty

Pobiera podstawową nawigację z góry i dodaje .nav-tabsklasę, aby wygenerować interfejs z zakładkami. Używaj ich do tworzenia regionów z zakładkami za pomocą naszej wtyczki JavaScript tab .

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>

Pigułki

Weź ten sam kod HTML, ale .nav-pillszamiast tego użyj:

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>

Wypełnij i uzasadnij

Wymuś .navrozszerzenie 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ść.

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>

Korzystając z <nav>nawigacji opartej, możesz bezpiecznie pominąć .nav-item, ponieważ .nav-linkjest to wymagane tylko do stylizacji <a>elementów.

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>

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-fillpowyższego, każdy element nawigacyjny będzie miał taką samą szerokość.

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>

Podobnie jak w przypadku .nav-fillkorzystania z <nav>nawigacji opartej.

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>

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.

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>

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-tabsklasą, 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-currentaria-selected="true"

Korzystanie z menu rozwijanych

Dodaj rozwijane menu z trochę dodatkowym kodem HTML i rozwijaną wtyczką JavaScript .

Karty z listami rozwijanymi

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>

Pigułki z listami rozwijanymi

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

Zmienne

Dodano w wersji 5.2.0

W ramach ewoluującego podejścia Bootstrap do zmiennych CSS, navs używają teraz lokalnych zmiennych CSS w .nav, .nav-tabsoraz .nav-pillsw celu udoskonalenia dostosowywania w czasie rzeczywistym. Wartości zmiennych CSS są ustawiane przez Sass, więc dostosowywanie Sass jest nadal obsługiwane.

W .navklasie 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-tabsklasie 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-pillsklasie 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.jspliku — 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ą .navnawigacją 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ą .navnawigacją 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ą .navnawigacją 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ą .navnawigacją 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.

Ogólnie rzecz biorąc, aby ułatwić nawigację za pomocą klawiatury, zaleca się, aby same panele z kartami również były skoncentrowane, chyba że można już skoncentrować się na pierwszym elemencie zawierającym znaczącą treść wewnątrz panelu. Wtyczka JavaScript nie próbuje obsłużyć tego aspektu — w razie potrzeby musisz wyraźnie ustawić panele kart, aby można było skupić się na nich, dodając tabindex="0"znaczniki.
Wtyczka JavaScript karty nie obsługuje interfejsów z kartami, które zawierają menu rozwijane, ponieważ powodują one zarówno problemy z użytecznością, jak i dostępnością. Z punktu widzenia użyteczności fakt, że element wyzwalający aktualnie wyświetlanej karty nie jest od razu widoczny (ponieważ znajduje się w zamkniętym menu rozwijanym) może powodować zamieszanie. Z punktu widzenia dostępności nie ma obecnie sensownego sposobu odwzorowania tego rodzaju konstrukcji do standardowego wzorca WAI ARIA, co oznacza, że ​​nie może być łatwo zrozumiała dla użytkowników technologii wspomagających.

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-tabslub .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 .fadedo każdego .tab-pane. Pierwszy panel z zakładkami musi również .showuwidaczniać 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.tabwystąpieniem zdarzenia).

Wydarzenia

Po wyświetleniu nowej karty zdarzenia są uruchamiane w następującej kolejności:

  1. hide.bs.tab(na aktualnie aktywnej zakładce)
  2. show.bs.tab(w zakładce do pokazania)
  3. hidden.bs.tab(na poprzedniej aktywnej zakładce, taka sama jak dla hide.bs.tabwydarzenia)
  4. shown.bs.tab(na nowo aktywnej właśnie wyświetlonej zakładce, takiej samej jak dla show.bs.tabwydarzenia)

Jeżeli żadna zakładka nie była już aktywna, to zdarzenia hide.bs.tabi hidden.bs.tabnie 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.targeti event.relatedTargetdo 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.targeti event.relatedTargetdo 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.targeti 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.targeti 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
})