Списки выпадающих элементов
Обзор
Списки выпадающих элементов — это переключаемые контекстные наложения для отображения списков ссылок и других элементов. Они активируются с помощью включенного в Bootstrap плагина JavaScript для выпадающих списков. Они переключаются щелчком мыши, а не наведением; это намеренное дизайнерское решение.
Списки выпадающих элементов основаны на сторонней библиотеке Popper, которая обеспечивает динамическое позиционирование и определение области видимости. Не забудьте включить popper.min.js перед JavaScript Bootstrap или использовать bootstrap.bundle.min.js / bootstrap.bundle.js, который содержит Popper. Popper не используется для позиционирования выпадающих списков в навигационных панелях, так как динамическое позиционирование не требуется.
Универсальный доступ
Стандарт WAI ARIA определяет фактический role="menu" виджет, но это относится к меню типа приложений, которые вызывают действия или функции. Меню ARIA могут содержать только пункты меню, пункты меню с флажками, пункты меню с радиокнопками, группы радиокнопок и подменю.
Списки выпадающих элементов Bootstrap, с другой стороны, предназначены для того, чтобы быть универсальными и применимыми к различным ситуациям и структурам разметки. Например, можно создать выпадающие списки, которые содержат дополнительные поля ввода и элементы управления формами, такие как поля поиска или формы входа. По этой причине Bootstrap не ожидает (и не добавляет автоматически) ни одного из role и aria- атрибутов, необходимых для истинных меню ARIA. Авторы должны включать эти более конкретные атрибуты сами.
Однако Bootstrap добавляет встроенную поддержку большинства стандартных взаимодействий с клавиатурой, таких как возможность перемещаться по отдельным .dropdown-item элементам с помощью клавиш курсора и закрывать меню с помощью клавиши Esc.
Примеры
Окружите переключатель выпадающего списка (ваша кнопка или ссылка) и меню выпадающего списка .dropdown, или другим элементом, который объявляет position: relative;. В идеале вы должны использовать элемент <button>, но плагин будет работать и с элементами <a>. Приведенные здесь примеры используют семантические элементы <ul>, где это уместно, но поддерживается пользовательская разметка.
Одна кнопка
Любая отдельная .btn может быть преобразована в переключатель выпадающего списка с помощью некоторых изменений в разметке. Вот как вы можете использовать их с элементами <button>:
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown button
</button>
<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>
</ul>
</div>
Хотя <button> является рекомендуемым элементом управления для переключателя выпадающего списка, могут быть ситуации, когда вам придется использовать элемент <a>. Если вы это делаете, мы рекомендуем добавить атрибут role="button", чтобы соответствующим образом передать цель элемента управления таким технологиям поддержки, как программы чтения с экрана.
<div class="dropdown">
<a class="btn btn-secondary dropdown-toggle" href="#" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown link
</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>
</ul>
</div>
Самое замечательное, что вы можете сделать это с любой вариацией кнопок:
<!-- Example single danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Action
</button>
<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>
</div>
Кнопка со списком
Аналогично, создайте выпадающие списки кнопок со списком с практически такой же разметкой, как и для выпадающих списков с одной кнопкой, но с добавлением .dropdown-toggle-split для правильного размещения пробелов вокруг значка раскрывающегося списка.
Мы используем этот дополнительный класс, чтобы уменьшить горизонтальное padding с каждой стороны значка раскрывающегося списка на 25% и удалить margin-left, который добавляется для обычных выпадающих списков с кнопками. Эти дополнительные изменения центрируют значок раскрывающегося списка в кнопке со списком и обеспечивают более подходящую область нажатия рядом с основной кнопкой.
<!-- Example split danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger">Action</button>
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<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>
</div>
Размеры
Выпадающие списки с кнопками работают со всеми размерами кнопок, включая стандартные и кнопки выпадающих списков со списком.
<!-- Large button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Large button
</button>
<ul class="dropdown-menu">
...
</ul>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-lg" type="button">
Large split button
</button>
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
...
</ul>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Small button
</button>
<ul class="dropdown-menu">
...
</ul>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-sm" type="button">
Small split button
</button>
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
...
</ul>
</div>
Темные выпадающие списки
Устарело в версии 5.3.0Включите темные выпадающие списки, чтобы соответствовать темной навигационной панели или пользовательскому стилю, добавив .dropdown-menu-dark к существующему .dropdown-menu. Изменения в пунктах выпадающего списка не требуются.
Внимание! Темные варианты компонентов были устаревшими в версии 5.3.0 с появлением режимов цвета. Вместо добавления .dropdown-menu-dark, установите data-bs-theme="dark" на корневом элементе, родительском контейнере или самом компоненте.
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown button
</button>
<ul class="dropdown-menu dropdown-menu-dark">
<li><a class="dropdown-item active" 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>
</div>
Использование в навигационной панели:
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNavDarkDropdown" aria-controls="navbarNavDarkDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDarkDropdown">
<ul class="navbar-nav">
<li class="nav-item dropdown">
<button class="btn btn-dark dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<ul class="dropdown-menu dropdown-menu-dark">
<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>
</ul>
</li>
</ul>
</div>
</div>
</nav>
Направления
.dropstart будет отображаться справа. Центрирование
Выровняйте меню выпадающего списка по центру под переключателем, добавив .dropdown-center к родительскому элементу.
<div class="dropdown-center">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Centered dropdown
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Action two</a></li>
<li><a class="dropdown-item" href="#">Action three</a></li>
</ul>
</div>
Выпадающий список сверху
Вызовите меню выпадающего списка сверху элементов, добавив .dropup к родительскому элементу.
<!-- Default dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropup
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
</div>
<!-- Split dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary">
Split dropup
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
</div>
Центрирование выпадающего списка сверху
Выровняйте меню выпадающего списка сверху по центру под переключателем, добавив .dropup-center к родительскому элементу.
<div class="dropup-center dropup">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Centered dropup
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Action two</a></li>
<li><a class="dropdown-item" href="#">Action three</a></li>
</ul>
</div>
Выпадающий список справа
Вызовите меню выпадающего списка справа от элементов, добавив .dropend к родительскому элементу.
<!-- Default dropend button -->
<div class="btn-group dropend">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropend
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
</div>
<!-- Split dropend button -->
<div class="btn-group dropend">
<button type="button" class="btn btn-secondary">
Split dropend
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropend</span>
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
</div>
Выпадающий список слева
Вызовите меню выпадающего списка слева от элементов, добавив .dropstart к родительскому элементу.
<!-- Default dropstart button -->
<div class="btn-group dropstart">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropstart
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
</div>
<!-- Split dropstart button -->
<div class="btn-group dropstart">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
<span class="visually-hidden">Toggle Dropstart</span>
</button>
<ul class="dropdown-menu">
<!-- Dropdown menu links -->
</ul>
<button type="button" class="btn btn-secondary">
Split dropstart
</button>
</div>
Пункты меню
Вы можете использовать <a> или <button> элементы в качестве пунктов выпадающего списка.
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<ul class="dropdown-menu">
<li><button class="dropdown-item" type="button">Action</button></li>
<li><button class="dropdown-item" type="button">Another action</button></li>
<li><button class="dropdown-item" type="button">Something else here</button></li>
</ul>
</div>
Вы также можете создавать неинтерактивные пункты выпадающего списка с помощью .dropdown-item-text. Используйте пользовательский CSS или утилиты текста для дополнительной стилизации.
<ul class="dropdown-menu"> <li><span class="dropdown-item-text">Dropdown item text</span></li> <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> </ul>
Активный
Добавьте .active к пунктам в выпадающем списке, чтобы стилизовать их как активные. Чтобы передать состояние активности технологиям поддержки, используйте атрибут aria-current — используя значение page для текущей страницы или значение true для текущего элемента в наборе.
<ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">Regular link</a></li> <li><a class="dropdown-item active" href="#" aria-current="true">Active link</a></li> <li><a class="dropdown-item" href="#">Another link</a></li> </ul>
Отключенный
Добавьте .disabled к пунктам в выпадающем списке, чтобы стилизовать их как отключенные.
<ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">Regular link</a></li> <li><a class="dropdown-item disabled" aria-disabled="true">Disabled link</a></li> <li><a class="dropdown-item" href="#">Another link</a></li> </ul>
Выравнивание меню
По умолчанию меню выпадающего списка автоматически позиционируется на 100% сверху и слева от родительского элемента. Вы можете изменить это с помощью направленных .drop* классов, но также можете контролировать их с помощью дополнительных модификаторов классов.
Добавьте .dropdown-menu-end к .dropdown-menu, чтобы выровнять меню выпадающего списка вправо. Направления зеркально отражаются при использовании Bootstrap в режиме RTL, то есть .dropdown-menu-end будет отображаться слева.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Right-aligned menu example
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><button class="dropdown-item" type="button">Action</button></li>
<li><button class="dropdown-item" type="button">Another action</button></li>
<li><button class="dropdown-item" type="button">Something else here</button></li>
</ul>
</div>
Реагирующее выравнивание
Если вы хотите использовать адаптивное выравнивание, отключите динамическое позиционирование, добавив атрибут data-bs-display="static", и используйте адаптивные классы-модификаторы.
Для выравнивания справа меню выпадающего списка на указанном преломлении или больше, добавьте .dropdown-menu{-sm|-md|-lg|-xl|-xxl}-end.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
Left-aligned but right aligned when large screen
</button>
<ul class="dropdown-menu dropdown-menu-lg-end">
<li><button class="dropdown-item" type="button">Action</button></li>
<li><button class="dropdown-item" type="button">Another action</button></li>
<li><button class="dropdown-item" type="button">Something else here</button></li>
</ul>
</div>
Для выравнивания слева меню выпадающего списка на указанном преломлении или больше, добавьте .dropdown-menu-end и .dropdown-menu{-sm|-md|-lg|-xl|-xxl}-start.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
Right-aligned but left aligned when large screen
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start">
<li><button class="dropdown-item" type="button">Action</button></li>
<li><button class="dropdown-item" type="button">Another action</button></li>
<li><button class="dropdown-item" type="button">Something else here</button></li>
</ul>
</div>
Обратите внимание, что вам не нужно добавлять атрибут data-bs-display="static" к кнопкам выпадающего списка в навигационных панелях, так как Popper в них не используется.
Варианты выравнивания
Используя большинство вариантов, показанных выше, вот небольшой демонстрационный пример различных вариантов выравнивания выпадающих списков в одном месте.
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Right-aligned menu
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
Left-aligned, right-aligned lg
</button>
<ul class="dropdown-menu dropdown-menu-lg-end">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" data-bs-display="static" aria-expanded="false">
Right-aligned, left-aligned lg
</button>
<ul class="dropdown-menu dropdown-menu-end dropdown-menu-lg-start">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group dropstart">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropstart
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group dropend">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropend
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
Dropup
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
Содержание меню
Заголовки
Добавьте заголовок, чтобы обозначить разделы действий в любом меню выпадающего списка.
<ul class="dropdown-menu"> <li><h6 class="dropdown-header">Dropdown header</h6></li> <li><a class="dropdown-item" href="#">Action</a></li> <li><a class="dropdown-item" href="#">Another action</a></li> </ul>
Разделители
Разделяйте группы связанных пунктов меню с помощью разделителей.
<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>
Текст
Размещайте произвольный текст в меню выпадающего списка с текстом и используйте утилиты для интервалов. Обратите внимание, что, вероятно, вам потребуются дополнительные стили для ограничения ширины меню.
<div class="dropdown-menu p-4 text-body-secondary" style="max-width: 200px;">
<p>
Some example text that's free-flowing within the dropdown menu.
</p>
<p class="mb-0">
And this is more example text.
</p>
</div>
Формы
Разместите форму в меню выпадающего списка или сделайте из нее меню выпадающего списка и используйте утилиты отступов или полей для создания необходимого отрицательного отступа.
<div class="dropdown-menu">
<form class="px-4 py-3">
<div class="mb-3">
<label for="exampleDropdownFormEmail1" class="form-label">Email address</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="email@example.com">
</div>
<div class="mb-3">
<label for="exampleDropdownFormPassword1" class="form-label">Password</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
</div>
<div class="mb-3">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="dropdownCheck">
<label class="form-check-label" for="dropdownCheck">
Remember me
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">New around here? Sign up</a>
<a class="dropdown-item" href="#">Forgot password?</a>
</div>
<div class="dropdown">
<button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" data-bs-auto-close="outside">
Dropdown form
</button>
<form class="dropdown-menu p-4">
<div class="mb-3">
<label for="exampleDropdownFormEmail2" class="form-label">Email address</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail2" placeholder="email@example.com">
</div>
<div class="mb-3">
<label for="exampleDropdownFormPassword2" class="form-label">Password</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword2" placeholder="Password">
</div>
<div class="mb-3">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="dropdownCheck2">
<label class="form-check-label" for="dropdownCheck2">
Remember me
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
</div>
Параметры выпадающего списка
Используйте data-bs-offset или data-bs-reference, чтобы изменить расположение выпадающего списка.
<div class="d-flex">
<div class="dropdown me-1">
<button type="button" class="btn btn-secondary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" data-bs-offset="10,20">
Offset
</button>
<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>
</ul>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary">Reference</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false" data-bs-reference="parent">
<span class="visually-hidden">Toggle Dropdown</span>
</button>
<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>
</div>
</div>
Поведение автоматического закрытия
По умолчанию меню выпадающего списка закрывается при нажатии внутри или вне меню выпадающего списка. Вы можете использовать параметр autoClose, чтобы изменить это поведение.
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="true" aria-expanded="false">
Default dropdown
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="inside" aria-expanded="false">
Clickable inside
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="outside" aria-expanded="false">
Clickable outside
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
<div class="btn-group">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" data-bs-auto-close="false" aria-expanded="false">
Manual close
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
<li><a class="dropdown-item" href="#">Menu item</a></li>
</ul>
</div>
CSS
Переменные
Добавлен в v5.2.0В рамках эволюционирующего подхода Bootstrap к CSS-переменным выпадающие списки теперь используют локальные CSS-переменные на .dropdown-menu для улучшенной настройки в реальном времени. Значения CSS-переменных устанавливаются через Sass, поэтому также поддерживается настройка Sass.
--#{$prefix}dropdown-zindex: #{$zindex-dropdown};
--#{$prefix}dropdown-min-width: #{$dropdown-min-width};
--#{$prefix}dropdown-padding-x: #{$dropdown-padding-x};
--#{$prefix}dropdown-padding-y: #{$dropdown-padding-y};
--#{$prefix}dropdown-spacer: #{$dropdown-spacer};
@include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size);
--#{$prefix}dropdown-color: #{$dropdown-color};
--#{$prefix}dropdown-bg: #{$dropdown-bg};
--#{$prefix}dropdown-border-color: #{$dropdown-border-color};
--#{$prefix}dropdown-border-radius: #{$dropdown-border-radius};
--#{$prefix}dropdown-border-width: #{$dropdown-border-width};
--#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius};
--#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg};
--#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y};
--#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow};
--#{$prefix}dropdown-link-color: #{$dropdown-link-color};
--#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color};
--#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg};
--#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color};
--#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg};
--#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color};
--#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x};
--#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y};
--#{$prefix}dropdown-header-color: #{$dropdown-header-color};
--#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x};
--#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y};
Элементы выпадающего списка включают по крайней мере одну переменную, которая не задана на .dropdown. Это позволяет вам предоставить новое значение, в то время как Bootstrap по умолчанию использует значение по умолчанию.
--bs-dropdown-item-border-radius
Настройка с помощью CSS-переменных видна в классе .dropdown-menu-dark, где мы переопределяем определенные значения, не добавляя дублирующих CSS-селекторов.
--#{$prefix}dropdown-color: #{$dropdown-dark-color};
--#{$prefix}dropdown-bg: #{$dropdown-dark-bg};
--#{$prefix}dropdown-border-color: #{$dropdown-dark-border-color};
--#{$prefix}dropdown-box-shadow: #{$dropdown-dark-box-shadow};
--#{$prefix}dropdown-link-color: #{$dropdown-dark-link-color};
--#{$prefix}dropdown-link-hover-color: #{$dropdown-dark-link-hover-color};
--#{$prefix}dropdown-divider-bg: #{$dropdown-dark-divider-bg};
--#{$prefix}dropdown-link-hover-bg: #{$dropdown-dark-link-hover-bg};
--#{$prefix}dropdown-link-active-color: #{$dropdown-dark-link-active-color};
--#{$prefix}dropdown-link-active-bg: #{$dropdown-dark-link-active-bg};
--#{$prefix}dropdown-link-disabled-color: #{$dropdown-dark-link-disabled-color};
--#{$prefix}dropdown-header-color: #{$dropdown-dark-header-color};
Sass-переменные
Переменные для всех выпадающих списков:
$dropdown-min-width: 10rem;
$dropdown-padding-x: 0;
$dropdown-padding-y: .5rem;
$dropdown-spacer: .125rem;
$dropdown-font-size: $font-size-base;
$dropdown-color: var(--#{$prefix}body-color);
$dropdown-bg: var(--#{$prefix}body-bg);
$dropdown-border-color: var(--#{$prefix}border-color-translucent);
$dropdown-border-radius: var(--#{$prefix}border-radius);
$dropdown-border-width: var(--#{$prefix}border-width);
$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}); // stylelint-disable-line function-disallowed-list
$dropdown-divider-bg: $dropdown-border-color;
$dropdown-divider-margin-y: $spacer * .5;
$dropdown-box-shadow: $box-shadow;
$dropdown-link-color: var(--#{$prefix}body-color);
$dropdown-link-hover-color: $dropdown-link-color;
$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg);
$dropdown-link-active-color: $component-active-color;
$dropdown-link-active-bg: $component-active-bg;
$dropdown-link-disabled-color: var(--#{$prefix}tertiary-color);
$dropdown-item-padding-y: $spacer * .25;
$dropdown-item-padding-x: $spacer;
$dropdown-header-color: $gray-600;
$dropdown-header-padding-x: $dropdown-item-padding-x;
$dropdown-header-padding-y: $dropdown-padding-y;
// fusv-disable
$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x; // Deprecated in v5.2.0
// fusv-enable
Переменные для темного выпадающего списка:
$dropdown-dark-color: $gray-300; $dropdown-dark-bg: $gray-800; $dropdown-dark-border-color: $dropdown-border-color; $dropdown-dark-divider-bg: $dropdown-divider-bg; $dropdown-dark-box-shadow: null; $dropdown-dark-link-color: $dropdown-dark-color; $dropdown-dark-link-hover-color: $white; $dropdown-dark-link-hover-bg: rgba($white, .15); $dropdown-dark-link-active-color: $dropdown-link-active-color; $dropdown-dark-link-active-bg: $dropdown-link-active-bg; $dropdown-dark-link-disabled-color: $gray-500; $dropdown-dark-header-color: $gray-500;
Переменные для CSS-стрелок, указывающих на интерактивность выпадающего списка:
$caret-width: .3em; $caret-vertical-align: $caret-width * .85; $caret-spacing: $caret-width * .85;
Sass-микшины
Микшины используются для создания CSS-стрелок и находятся в scss/mixins/_caret.scss.
@mixin caret-down($width: $caret-width) {
border-top: $width solid;
border-right: $width solid transparent;
border-bottom: 0;
border-left: $width solid transparent;
}
@mixin caret-up($width: $caret-width) {
border-top: 0;
border-right: $width solid transparent;
border-bottom: $width solid;
border-left: $width solid transparent;
}
@mixin caret-end($width: $caret-width) {
border-top: $width solid transparent;
border-right: 0;
border-bottom: $width solid transparent;
border-left: $width solid;
}
@mixin caret-start($width: $caret-width) {
border-top: $width solid transparent;
border-right: $width solid;
border-bottom: $width solid transparent;
}
@mixin caret(
$direction: down,
$width: $caret-width,
$spacing: $caret-spacing,
$vertical-align: $caret-vertical-align
) {
@if $enable-caret {
&::after {
display: inline-block;
margin-left: $spacing;
vertical-align: $vertical-align;
content: "";
@if $direction == down {
@include caret-down($width);
} @else if $direction == up {
@include caret-up($width);
} @else if $direction == end {
@include caret-end($width);
}
}
@if $direction == start {
&::after {
display: none;
}
&::before {
display: inline-block;
margin-right: $spacing;
vertical-align: $vertical-align;
content: "";
@include caret-start($width);
}
}
&:empty::after {
margin-left: 0;
}
}
}
Использование
С помощью атрибутов данных или JavaScript плагин выпадающего списка переключает скрытое содержимое (меню выпадающего списка), переключая класс .show на родительском элементе .dropdown-menu. Атрибут data-bs-toggle="dropdown" используется для закрытия меню выпадающего списка на уровне приложения, поэтому рекомендуется всегда его использовать.
mouseover к непосредственным дочерним элементам элемента <body>. Этот, надо признать, некрасивый хак необходим для решения проблемы с делегированием событий в iOS, которая в противном случае предотвратит срабатывание кода закрытия выпадающего списка при нажатии где угодно за пределами выпадающего списка. После закрытия выпадающего списка эти дополнительные обработчики mouseover удаляются. Использование атрибутов данных
Добавьте data-bs-toggle="dropdown" к ссылке или кнопке, чтобы переключить выпадающий список.
<div class="dropdown">
<button type="button" data-bs-toggle="dropdown" aria-expanded="false">
Dropdown trigger
</button>
<ul class="dropdown-menu">
...
</ul>
</div>
Использование JavaScript
data-bs-toggle="dropdown" на элементе-триггере, независимо от того, вызываете ли вы выпадающий список через JavaScript или используете API данных.Вызов выпадающих списков через JavaScript:
const dropdownElementList = document.querySelectorAll('.dropdown-toggle')
const dropdownList = [...dropdownElementList].map(dropdownToggleEl => new bootstrap.Dropdown(dropdownToggleEl))
Параметры
Так как параметры могут быть переданы через атрибуты данных или JavaScript, вы можете добавить имя параметра к data-bs-, как в data-bs-animation="{value}". Убедитесь, что тип регистра параметра изменен с «camelCase» на «kebab-case» при передаче параметров через атрибуты данных. Например, используйте data-bs-custom-class="beautifier" вместо data-bs-customClass="beautifier".
Начиная с Bootstrap 5.2.0, все компоненты поддерживают экспериментальный зарезервированный атрибут данных data-bs-config, который может содержать простую конфигурацию компонента в виде JSON-строки. Когда у элемента есть атрибуты data-bs-config='{"delay":0, "title":123}' и data-bs-title="456", конечное значение title будет 456, и отдельные атрибуты данных будут переопределять значения, заданные на data-bs-config. Кроме того, существующие атрибуты данных могут содержать JSON-значения, например, data-bs-delay='{"show":0,"hide":150}'.
Конечный объект конфигурации является объединенным результатом data-bs-config, data-bs-, и js object, где последнее заданное значение ключа-значения переопределяет другие.
| Имя | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
autoClose | boolean, string | true | Настройка поведения автоматического закрытия выпадающего списка:
|
boundary | string, element | 'clippingParents' | Граница ограничения области вывода выпадающего меню (применяется только к модификатору preventOverflow Popper). По умолчанию это clippingParents, и он может принимать ссылку на элемент HTMLElement (только через JavaScript). Для получения дополнительной информации обратитесь к документации по detectOverflow у Popper: detectOverflow docs. |
display | string | 'dynamic' | По умолчанию мы используем Popper для динамического позиционирования. Отключите это с помощью static. |
offset | array, string, function | [0, 2] | Смещение выпадающего списка относительно целевого элемента. Вы можете передать строку в атрибутах данных с запятыми, разделенными значениями, например: data-bs-offset="10,20". Когда используется функция для определения смещения, она вызывается с объектом, содержащим расположение поппера, ссылку и прямоугольники поппера в качестве первого аргумента. Элемент, вызвавший событие, передается в качестве второго аргумента. Функция должна возвращать массив из двух чисел: skidding, distance. Для получения дополнительной информации обратитесь к документации по смещению Popper: offset docs. |
popperConfig | null, object, function | null | Чтобы изменить конфигурацию Popper по умолчанию Bootstrap, см. конфигурацию Popper. Когда используется функция для создания конфигурации Popper, она вызывается с объектом, содержащим конфигурацию Popper по умолчанию Bootstrap. Это помогает использовать и объединять значения по умолчанию с вашей собственной конфигурацией. Функция должна возвращать объект конфигурации для Popper. |
reference | string, element, object | 'toggle' | Элемент-ссылка выпадающего меню. Принимает значения 'toggle', 'parent', ссылку на элемент HTMLElement или объект, предоставляющий getBoundingClientRect. Для получения дополнительной информации обратитесь к документации по конструктору Popper: constructor docs и документации по виртуальным элементам: virtual element docs. |
Использование функции с popperConfig
const dropdown = new bootstrap.Dropdown(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Методы
| Метод | Описание |
|---|---|
dispose | Уничтожает выпадающий список элемента. (Удаляет сохраненные данные об элементе DOM) |
getInstance | Статический метод, который позволяет получить экземпляр выпадающего списка, связанный с элементом DOM. Вы можете использовать его так: bootstrap.Dropdown.getInstance(element). |
getOrCreateInstance | Статический метод, который возвращает экземпляр выпадающего списка, связанный с элементом DOM, или создаёт новый, если он не был инициализирован. Вы можете использовать его так: bootstrap.Dropdown.getOrCreateInstance(element). |
hide | Скрывает выпадающее меню заданной панели навигации или навигации по вкладкам. |
show | Отображает выпадающее меню заданной панели навигации или навигации по вкладкам. |
toggle | Переключает выпадающее меню заданной панели навигации или навигации по вкладкам. |
update | Обновляет позицию выпадающего списка элемента. |
События
Все события выпадающего списка генерируются в элементе переключения и затем поднимаются вверх. Таким образом, вы также можете добавить обработчики событий на родительский элемент элемента .dropdown-menu. События hide.bs.dropdown и hidden.bs.dropdown имеют свойство clickEvent (только когда исходный тип события click) , содержащий объект события для щелчка.
| Тип события | Описание |
|---|---|
hide.bs.dropdown | Срабатывает сразу после вызова метода hide экземпляра. |
| Срабатывает, когда выпадающий список полностью скрывается от пользователя, и завершаются CSS-переходы. | |
show.bs.dropdown | Срабатывает сразу после вызова метода show экземпляра. |
shown.bs.dropdown | Срабатывает, когда выпадающий список становится видимым для пользователя, и завершаются CSS-переходы. |
const myDropdown = document.getElementById('myDropdown')
myDropdown.addEventListener('show.bs.dropdown', event => {
// do something...
})
© 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/dropdowns/