Навигационные панели и вкладки
Основная навигационная панель
Навигация, доступная в Bootstrap, использует общий разметку и стили, от базового класса .nav до активного и отключенного состояний. Меняйте модификаторные классы для переключения между каждым стилем.
Базовый компонент .nav построен с использованием flexbox и предоставляет прочную основу для создания всех типов навигационных компонентов. Он включает некоторые переопределения стилей (для работы со списками), отступы для ссылок для больших областей нажатия и базовые стили для отключенного состояния.
Базовый компонент .nav не включает состояние .active. В следующих примерах используется класс, в основном для демонстрации того, что этот конкретный класс не вызывает особых стилей.
Для передачи активного состояния вспомогательным технологиям используйте атрибут aria-current — с использованием значения page для текущей страницы или true для текущего элемента в наборе.
<ul class="nav">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
Классы используются повсеместно, поэтому ваша разметка может быть очень гибкой. Используйте <ul> как показано выше, <ol>, если порядок ваших элементов важен, или создайте свой собственный с элементом <nav>. Поскольку .nav использует display: flex, ссылки в навигации ведут себя так же, как элементы навигации, но без дополнительной разметки.
<nav class="nav"> <a class="nav-link active" aria-current="page" href="#">Active</a> <a class="nav-link" href="#">Link</a> <a class="nav-link" href="#">Link</a> <a class="nav-link disabled" aria-disabled="true">Disabled</a> </nav>
Доступные стили
Изменяйте стиль компонента .nav с помощью модификаторов и утилит. Смешивайте и сопоставляйте по мере необходимости или создавайте свои собственные.
Горизонтальное выравнивание
Изменяйте горизонтальное выравнивание вашей навигации с помощью утилит flexbox. По умолчанию навигация выравнивается по левому краю, но вы можете легко изменить её на выравнивание по центру или правому краю.
Выравнивание по центру с помощью .justify-content-center:
<ul class="nav justify-content-center">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
Выравнивание по правому краю с помощью .justify-content-end:
<ul class="nav justify-content-end">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
Вертикальное
Установите вертикальное расположение вашей навигации, изменив направление элементов flex с помощью утилиты .flex-column. Необходимо ли расположить их вертикально для некоторых экранов, но не для других? Используйте адаптивные версии (например, .flex-sm-column).
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
Как и всегда, вертикальная навигация возможна и без <ul>.
<nav class="nav flex-column"> <a class="nav-link active" aria-current="page" href="#">Active</a> <a class="nav-link" href="#">Link</a> <a class="nav-link" href="#">Link</a> <a class="nav-link disabled" aria-disabled="true">Disabled</a> </nav>
Вкладки
Берет базовую навигацию из вышеизложенного и добавляет класс .nav-tabs, чтобы создать интерфейс вкладок. Используйте их для создания табируемых областей с помощью нашего плагина JavaScript для вкладок.
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
Пилюли
Возьмите тот же HTML, но используйте .nav-pills вместо этого:
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
Подчёркивание
Возьмите тот же HTML, но используйте .nav-underline вместо этого:
<ul class="nav nav-underline">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
Заполнение и выравнивание
Принудительно расширяйте содержимое вашей .nav до полной ширины с помощью одного из двух модификаторных классов. Чтобы пропорционально заполнить всё доступное пространство вашими .nav-item , используйте .nav-fill . Обратите внимание, что всё горизонтальное пространство занято, но не каждый элемент навигации имеет одинаковую ширину.
<ul class="nav nav-pills nav-fill">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Much longer nav link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
При использовании навигации на основе <nav>, вы можете безопасно опустить .nav-item, так как для стилизации элементов <a> требуется только .nav-link.
<nav class="nav nav-pills nav-fill"> <a class="nav-link active" aria-current="page" href="#">Active</a> <a class="nav-link" href="#">Much longer nav link</a> <a class="nav-link" href="#">Link</a> <a class="nav-link disabled" aria-disabled="true">Disabled</a> </nav>
Для элементов с одинаковой шириной используйте .nav-justified. Всё горизонтальное пространство будет занято ссылками навигации, но в отличие от примера .nav-fill выше, каждый элемент навигации будет иметь одинаковую ширину.
<ul class="nav nav-pills nav-justified">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Much longer nav link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
Аналогично примеру .nav-fill использующему навигацию на основе <nav>.
<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. Хотя они более объёмны, эти утилиты обеспечивают большую настройку на разных экранах. В примере ниже наша навигация будет вертикальной на самых узких экранах, затем перейдёт на горизонтальное расположение, заполняющее доступную ширину, начиная с небольших экранов.
<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 для выпадающих меню .
Вкладки с выпадающими меню
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Separated link</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
Пилюли с выпадающими меню
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Active</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" role="button" aria-expanded="false">Dropdown</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Separated link</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" aria-disabled="true">Disabled</a>
</li>
</ul>
CSS
Переменные
Добавлено в v5.2.0В рамках эволюции подхода Bootstrap к CSS-переменным навигационные панели теперь используют локальные CSS-переменные в .nav, .nav-tabs, и .nav-pills для повышения гибкости настройки в реальном времени. Значения CSS-переменных задаются через Sass, поэтому настройка с помощью Sass также поддерживается.
В базовом классе .nav:
--#{$prefix}nav-link-padding-x: #{$nav-link-padding-x};
--#{$prefix}nav-link-padding-y: #{$nav-link-padding-y};
@include rfs($nav-link-font-size, --#{$prefix}nav-link-font-size);
--#{$prefix}nav-link-font-weight: #{$nav-link-font-weight};
--#{$prefix}nav-link-color: #{$nav-link-color};
--#{$prefix}nav-link-hover-color: #{$nav-link-hover-color};
--#{$prefix}nav-link-disabled-color: #{$nav-link-disabled-color};
В модификаторном классе .nav-tabs:
--#{$prefix}nav-tabs-border-width: #{$nav-tabs-border-width};
--#{$prefix}nav-tabs-border-color: #{$nav-tabs-border-color};
--#{$prefix}nav-tabs-border-radius: #{$nav-tabs-border-radius};
--#{$prefix}nav-tabs-link-hover-border-color: #{$nav-tabs-link-hover-border-color};
--#{$prefix}nav-tabs-link-active-color: #{$nav-tabs-link-active-color};
--#{$prefix}nav-tabs-link-active-bg: #{$nav-tabs-link-active-bg};
--#{$prefix}nav-tabs-link-active-border-color: #{$nav-tabs-link-active-border-color};
В модификаторном классе .nav-pills:
--#{$prefix}nav-pills-border-radius: #{$nav-pills-border-radius};
--#{$prefix}nav-pills-link-active-color: #{$nav-pills-link-active-color};
--#{$prefix}nav-pills-link-active-bg: #{$nav-pills-link-active-bg};
В модификаторном классе .nav-underline:
--#{$prefix}nav-underline-gap: #{$nav-underline-gap};
--#{$prefix}nav-underline-border-width: #{$nav-underline-border-width};
--#{$prefix}nav-underline-link-active-color: #{$nav-underline-link-active-color};
Переменные Sass
$nav-link-padding-y: .5rem;
$nav-link-padding-x: 1rem;
$nav-link-font-size: null;
$nav-link-font-weight: null;
$nav-link-color: var(--#{$prefix}link-color);
$nav-link-hover-color: var(--#{$prefix}link-hover-color);
$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out;
$nav-link-disabled-color: var(--#{$prefix}secondary-color);
$nav-link-focus-box-shadow: $focus-ring-box-shadow;
$nav-tabs-border-color: var(--#{$prefix}border-color);
$nav-tabs-border-width: var(--#{$prefix}border-width);
$nav-tabs-border-radius: var(--#{$prefix}border-radius);
$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color;
$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color);
$nav-tabs-link-active-bg: var(--#{$prefix}body-bg);
$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg;
$nav-pills-border-radius: var(--#{$prefix}border-radius);
$nav-pills-link-active-color: $component-active-color;
$nav-pills-link-active-bg: $component-active-bg;
$nav-underline-gap: 1rem;
$nav-underline-border-width: .125rem;
$nav-underline-link-active-color: var(--#{$prefix}emphasis-color);
Поведение JavaScript
Используйте плагин JavaScript для вкладок — включите его индивидуально или через скомпилированный bootstrap.js файл — для расширения навигационных вкладок и кнопок для создания вкладочных панелей локального содержимого.
<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 не различает горизонтальные и вертикальные списки вкладок, когда дело доходит до взаимодействия с клавишами курсора: независимо от ориентации списка вкладок, как клавиша вверх, так и влево переходят к предыдущей вкладке, а клавиши вниз и вправо — к следующей вкладке.
tabindex="0" в вашу разметку.Использование атрибутов данных
Вы можете активировать навигацию по вкладкам или вкладкам без написания 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>
Методы
Активирует содержимое как элемент вкладки.
Вы можете создать экземпляр вкладки с конструктором, например:
const bsTab = new bootstrap.Tab('#myTab')
| Метод | Описание |
|---|---|
dispose | Удаляет вкладку элемента. |
getInstance | Статический метод, который позволяет получить экземпляр вкладки, связанный с элементом DOM. Вы можете использовать его так: bootstrap.Tab.getInstance(element). |
getOrCreateInstance | Статический метод, который возвращает экземпляр вкладки, связанный с элементом DOM, или создает новый, если он не был инициализирован. Вы можете использовать его так: bootstrap.Tab.getOrCreateInstance(element). |
show | Выбирает заданную вкладку и отображает связанную панель. Любая другая вкладка, которая была ранее выбрана, становится невыбранной, и связанная панель скрывается. Возвращается вызывающей стороне до фактического отображения панели вкладок (т. е. до возникновения события shown.bs.tab). |
События
При отображении новой вкладки события срабатывают в следующем порядке:
-
hide.bs.tab(на текущей активной вкладке) -
show.bs.tab(на вкладке, которая должна быть показана) -
hidden.bs.tab(на предыдущей активной вкладке, той же, что и для событияhide.bs.tab) -
shown.bs.tab(на вновь активной только что отображенной вкладке, той же, что и для событияshow.bs.tab)
Если активной вкладки еще не было, то события hide.bs.tab и hidden.bs.tab не будут вызваны.
| Тип события | Описание |
|---|---|
hide.bs.tab | Это событие срабатывает, когда должна быть показана новая вкладка (и, следовательно, предыдущая активная вкладка должна быть скрыта). Используйте event.target и event.relatedTarget для указания текущей активной вкладки и новой вкладки, которая скоро станет активной соответственно. |
Это событие срабатывает после того, как новая вкладка отображена (и, следовательно, предыдущая активная вкладка скрыта). Используйте 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/