Spec-Zone.ru › Bootstrap 5

Навигационные панели и вкладки

Основная навигационная панель

Навигация, доступная в Bootstrap, использует общий разметку и стили, от базового класса .nav до активного и отключенного состояний. Меняйте модификаторные классы для переключения между каждым стилем.

Базовый компонент .nav построен с использованием flexbox и предоставляет прочную основу для создания всех типов навигационных компонентов. Он включает некоторые переопределения стилей (для работы со списками), отступы для ссылок для больших областей нажатия и базовые стили для отключенного состояния.

Базовый компонент .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" aria-disabled="true">Disabled</a>
  </li>
</ul>

Классы используются повсеместно, поэтому ваша разметка может быть очень гибкой. Используйте <ul> как показано выше, <ol>, если порядок ваших элементов важен, или создайте свой собственный с элементом <nav>. Поскольку .nav использует display: flex, ссылки в навигации ведут себя так же, как элементы навигации, но без дополнительной разметки.

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" aria-disabled="true">Disabled</a>
</nav>

Доступные стили

Изменяйте стиль компонента .nav с помощью модификаторов и утилит. Смешивайте и сопоставляйте по мере необходимости или создавайте свои собственные.

Горизонтальное выравнивание

Изменяйте горизонтальное выравнивание вашей навигации с помощью утилит flexbox. По умолчанию навигация выравнивается по левому краю, но вы можете легко изменить её на выравнивание по центру или правому краю.

Выравнивание по центру с помощью .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" aria-disabled="true">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" aria-disabled="true">Disabled</a>
  </li>
</ul>

Вертикальное

Установите вертикальное расположение вашей навигации, изменив направление элементов flex с помощью утилиты .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" aria-disabled="true">Disabled</a>
  </li>
</ul>

Как и всегда, вертикальная навигация возможна и без <ul>.

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" aria-disabled="true">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" aria-disabled="true">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" aria-disabled="true">Disabled</a>
  </li>
</ul>

Подчёркивание

Возьмите тот же HTML, но используйте .nav-underline вместо этого:

html
<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 . Обратите внимание, что всё горизонтальное пространство занято, но не каждый элемент навигации имеет одинаковую ширину.

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" aria-disabled="true">Disabled</a>
  </li>
</ul>

При использовании навигации на основе <nav>, вы можете безопасно опустить .nav-item, так как для стилизации элементов <a> требуется только .nav-link.

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" aria-disabled="true">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" aria-disabled="true">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" aria-disabled="true">Disabled</a>
</nav>

Работа с утилитами flex

Если вам нужны адаптивные варианты навигации, рассмотрите использование набора утилит 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" aria-disabled="true">Disabled</a>
</nav>

О доступности

Если вы используете навигацию для создания навигационной панели, убедитесь, что добавили атрибут role="navigation" в самый логичный контейнер для элементов <ul>, или оберните элемент <nav> вокруг всей навигации. Не добавляйте роль самому элементу <ul>, так как это предотвратит объявление его как фактического списка вспомогательными технологиями.

Обратите внимание, что навигационные панели, даже если визуально оформлены как вкладки с классом .nav-tabs, не должны получать атрибуты role="tablist", role="tab" или role="tabpanel". Эти атрибуты подходят только для динамических интерфейсов вкладок, как описано в руководстве по созданию ARIA-вкладок. Смотрите поведение JavaScript в этом разделе для примера. Атрибут aria-current не нужен для динамических интерфейсов вкладок, так как наш JavaScript обрабатывает выбранное состояние, добавляя aria-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" aria-disabled="true">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" aria-disabled="true">Disabled</a>
  </li>
</ul>

CSS

Переменные

Добавлено в v5.2.0

В рамках эволюции подхода Bootstrap к CSS-переменным навигационные панели теперь используют локальные CSS-переменные в .nav, .nav-tabs, и .nav-pills для повышения гибкости настройки в реальном времени. Значения CSS-переменных задаются через Sass, поэтому настройка с помощью Sass также поддерживается.

В базовом классе .nav:

scss/_nav.scss
--#{$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:

scss/_nav.scss
--#{$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:

scss/_nav.scss
--#{$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};
Добавлено в v5.3.0

В модификаторном классе .nav-underline:

scss/_nav.scss
--#{$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

scss/_variables.scss
$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 файл — для расширения навигационных вкладок и кнопок для создания вкладочных панелей локального содержимого.

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

Плагин вкладок также работает с кнопками.

<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" в контейнер списка вкладок.

<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 не различает горизонтальные и вертикальные списки вкладок, когда дело доходит до взаимодействия с клавишами курсора: независимо от ориентации списка вкладок, как клавиша вверх, так и влево переходят к предыдущей вкладке, а клавиши вниз и вправо — к следующей вкладке.

В общем случае, для облегчения навигации с клавиатуры, рекомендуется сделать сами панели вкладок фокусируемыми, если только первый элемент, содержащий значимое содержимое внутри панели вкладки, уже не является фокусируемым. Плагин 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

Активировать вкладочные вкладки через 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
})

© 2011–2022 Twitter, Inc.
© 2011–2022 The Bootstrap Authors
Code licensed under the MIT License.
Documentation licensed under the Creative Commons Attribution License v3.0.
https://getbootstrap.com/docs/5.3/components/navs-tabs/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API