Выпадающие элементы
Переключайте контекстные оверлеи для отображения списков ссылок и многого другого с помощью плагина раскрывающегося списка Bootstrap.
Обзор
Выпадающие списки - это переключаемые контекстные наложения для отображения списков ссылок и многого другого. Они сделаны интерактивными с помощью включенного плагина JavaScript для выпадающего меню Bootstrap. Функциональность toggle в выпадающих элементах запускается по клику, а не по наведению – это намеренное дизайнерское решение.
Выпадающие элементы «построены» на сторонней библиотеке Popper.js, которая обеспечивает динамическое позиционирование и определение размера окна просмотра. Обязательно включите popper.min.js перед JavaScript Bootstrap или используйте bootstrap.bundle.min.js / bootstrap.bundle.js, который содержит Popper.js.
Доступность
Стандарт WAIARIA описывает и определяет виджет role="menu" как настоящий виджет, но лишь для меню «а-ля приложение», запускающих действия или функции. Меню ARIA могут содержать лишь пункты меню, чекбоксы, «радио-кнопки», группы «радио-кнопок» и подменю.
Выпадающие элементы Bootstrap, с другой стороны, спроектированы для решения множества задач и могут работать в разных структурах разметки. Например, можно создать выпадающие элементы, содержащие дополнительные поля ввода и элементы контроля форм, такие как поиск или поле ввода логина. По этой причине BS4 не «ожидает» (и не добавляет автоматически) ни один из атрибутов (role и aria-), необходимых для меню согласно стандарту ARIA.
Однако Bootstrap всегда добавляет встроенную поддержку для большинства стандартных взаимодействий меню и клавиатуры, таких как возможность двигаться через отдельные элементы класса .dropdown-item кнопками курсора на клавиатуре и закрывать меню кнопкой ESC.
Примеры
Оберните «контролирующий» элемент (ссылку или кнопку) выпадающего элемента и выпадающее меню классом .dropdown или другим элементом с position: relative;. При необходимости выпадающие элементы можно запускать из элементов <a> или <button>. В показанных здесь примерах используются семантические элементы <ul>, где это необходимо, но поддерживается настраиваемая разметка.
Выпадающие элементы одинарных кнопок
Любой отдельный .btn можно превратить в выпадающий список с некоторыми изменениями разметки. Вот как Вы можете заставить их работать с любым элементом <button>:
<divclass="dropdown"><buttonclass="btn btn-secondary dropdown-toggle"type="button"id="dropdownMenuButton1"data-bs-toggle="dropdown"aria-expanded="false"> Кнопка выпадающего списка </button><ulclass="dropdown-menu"aria-labelledby="dropdownMenuButton1"><li><aclass="dropdown-item"href="#">Действие</a></li><li><aclass="dropdown-item"href="#">Другое действие</a></li><li><aclass="dropdown-item"href="#">Что-то еще здесь</a></li></ul></div>И с элементами <a>:
<divclass="dropdown"><aclass="btn btn-secondary dropdown-toggle"href="#"role="button"id="dropdownMenuLink"data-bs-toggle="dropdown"aria-expanded="false"> Ссылка выпадающего списка </a><ulclass="dropdown-menu"aria-labelledby="dropdownMenuLink"><li><aclass="dropdown-item"href="#">Действие</a></li><li><aclass="dropdown-item"href="#">Другое действие</a></li><li><aclass="dropdown-item"href="#">Что-то еще здесь</a></li></ul></div>Самое приятное то, что Вы можете сделать это и с любым вариантом кнопки:
<!-- Пример отдельной кнопки danger --><divclass="btn-group"><buttontype="button"class="btn btn-danger dropdown-toggle"data-bs-toggle="dropdown"aria-expanded="false"> Действие </button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Действие</a></li><li><aclass="dropdown-item"href="#">Другое действие</a></li><li><aclass="dropdown-item"href="#">Что-то еще здесь</a></li><li><hrclass="dropdown-divider"></li><li><aclass="dropdown-item"href="#">Отделенная ссылка</a></li></ul></div>Выпадающие элементы кнопок с разделенными зонами
Точно так же создайте выпадающие списки с разделенными кнопками с практически такой же разметкой, что и выпадающие списки с одной кнопкой, но с добавлением .dropdown-toggle-split для правильного интервала вокруг курсора выпадающего списка.
Мы используем этот дополнительный класс, чтобы уменьшить горизонтальный padding по обе стороны от каретки на 25% и удалить margin-left, который добавляется для обычных выпадающих списков кнопок. Эти дополнительные изменения удерживают курсор в центре разделенной кнопки и обеспечивают область нажатия более подходящего размера рядом с основной кнопкой.
<!-- Пример отдельной кнопки danger --><divclass="btn-group"><buttontype="button"class="btn btn-danger">Действие</button><buttontype="button"class="btn btn-danger dropdown-toggle dropdown-toggle-split"data-bs-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Переключатель выпадающего списка</span></button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Действие</a></li><li><aclass="dropdown-item"href="#">Другое действие</a></li><li><aclass="dropdown-item"href="#">Что-то еще здесь</a></li><li><hrclass="dropdown-divider"></li><li><aclass="dropdown-item"href="#">Отделенная ссылка</a></li></ul></div>Размеры
Выпадающие элементы кнопок работают с кнопками любых размеров, включая кнопки по умолчанию и кнопки с выпадающими элементами с разделенными зонами.
<!-- Large button groups (default and split) --><divclass="btn-group"><buttonclass="btn btn-secondary btn-lg dropdown-toggle"type="button"data-bs-toggle="dropdown"aria-expanded="false"> Large button </button><ulclass="dropdown-menu"> ... </ul></div><divclass="btn-group"><buttonclass="btn btn-secondary btn-lg"type="button"> Large split button </button><buttontype="button"class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split"data-bs-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropdown</span></button><ulclass="dropdown-menu"> ... </ul></div><divclass="btn-group"><buttonclass="btn btn-secondary btn-sm dropdown-toggle"type="button"data-bs-toggle="dropdown"aria-expanded="false"> Small button </button><ulclass="dropdown-menu"> ... </ul></div><divclass="btn-group"><buttonclass="btn btn-secondary btn-sm"type="button"> Small split button </button><buttontype="button"class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split"data-bs-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropdown</span></button><ulclass="dropdown-menu"> ... </ul></div>Темные выпадающие списки
Выберите более темные раскрывающиеся списки, чтобы они соответствовали темной панели навигации или индивидуальному стилю, добавив .dropdown-menu-dark в существующее .dropdown-menu. Никаких изменений в раскрывающихся элементах не требуется.
<divclass="dropdown"><buttonclass="btn btn-secondary dropdown-toggle"type="button"id="dropdownMenuButton2"data-bs-toggle="dropdown"aria-expanded="false"> Dropdown button </button><ulclass="dropdown-menu dropdown-menu-dark"aria-labelledby="dropdownMenuButton2"><li><aclass="dropdown-item active"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li><li><hrclass="dropdown-divider"></li><li><aclass="dropdown-item"href="#">Separated link</a></li></ul></div>И использовать его в навигационной панели:
<navclass="navbar navbar-expand-lg navbar-dark bg-dark"><divclass="container-fluid"><aclass="navbar-brand"href="#">Navbar</a><buttonclass="navbar-toggler"type="button"data-bs-toggle="collapse"data-bs-target="#navbarNavDarkDropdown"aria-controls="navbarNavDarkDropdown"aria-expanded="false"aria-label="Toggle navigation"><spanclass="navbar-toggler-icon"></span></button><divclass="collapse navbar-collapse"id="navbarNavDarkDropdown"><ulclass="navbar-nav"><liclass="nav-item dropdown"><aclass="nav-link dropdown-toggle"href="#"id="navbarDarkDropdownMenuLink"role="button"data-bs-toggle="dropdown"aria-expanded="false"> Dropdown </a><ulclass="dropdown-menu dropdown-menu-dark"aria-labelledby="navbarDarkDropdownMenuLink"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li></ul></li></ul></div></div></nav>Направления
RTL
При использовании Bootstrap в RTL направления зеркалируются, добавляя класс .dropstart данные отображаются справа.
«Выпадающий вверх»
Добавьте класс .dropup и выпадающий элемент будет «выпадать» вверх.
<!-- Default dropup button --><divclass="btn-group dropup"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-bs-toggle="dropdown"aria-expanded="false"> Dropup </button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div><!-- Split dropup button --><divclass="btn-group dropup"><buttontype="button"class="btn btn-secondary"> Split dropup </button><buttontype="button"class="btn btn-secondary dropdown-toggle dropdown-toggle-split"data-bs-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropdown</span></button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div>«Выпадающий вправо»
Добавьте класс .dropright и выпадающий элемент будет «выпадать» вправо.
<!-- Default dropend button --><divclass="btn-group dropend"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-bs-toggle="dropdown"aria-expanded="false"> Dropright </button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div><!-- Split dropend button --><divclass="btn-group dropend"><buttontype="button"class="btn btn-secondary"> Split dropend </button><buttontype="button"class="btn btn-secondary dropdown-toggle dropdown-toggle-split"data-bs-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropright</span></button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div>«Выпадающий влево»
Добавьте класс .dropleft и выпадающий элемент будет «выпадать» влево.
<!-- Default dropstart button --><divclass="btn-group dropstart"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-bs-toggle="dropdown"aria-expanded="false"> Dropstart </button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div><!-- Split dropstart button --><divclass="btn-group"><divclass="btn-group dropstart"role="group"><buttontype="button"class="btn btn-secondary dropdown-toggle dropdown-toggle-split"data-bs-toggle="dropdown"aria-expanded="false"><spanclass="visually-hidden">Toggle Dropstart</span></button><ulclass="dropdown-menu"><!-- Dropdown menu links --></ul></div><buttontype="button"class="btn btn-secondary"> Split dropstart </button></div>Пункты меню
Исторически содержимым выпадающих элементов всегда были ссылки, но с версии v4 были внесены изменения. Сейчас вы можете использовать в качестве содержимого выпадающих элементов <button>, а не только <a>.
<divclass="dropdown"><buttonclass="btn btn-secondary dropdown-toggle"type="button"id="dropdownMenu2"data-bs-toggle="dropdown"aria-expanded="false"> Dropdown </button><ulclass="dropdown-menu"aria-labelledby="dropdownMenu2"><li><buttonclass="dropdown-item"type="button">Action</button></li><li><buttonclass="dropdown-item"type="button">Another action</button></li><li><buttonclass="dropdown-item"type="button">Something else here</button></li></ul></div>Вы также можете создать неинтерактивные выпадающие элементы класса .dropdown-item-text. Свободно стилизуйте их обычным CSS.
<ulclass="dropdown-menu"><li><spanclass="dropdown-item-text">Dropdown item text</span></li><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li></ul>Активные элементы меню
Добавьте класс .active к элементу выпадающего меню для его стилизации как «активированного». Чтобы передать активное состояние вспомогательным технологиям, используйте атрибут aria-current - используя значение страницы для текущей страницы page или true для текущего элемента в наборе.
<ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Regular link</a></li><li><aclass="dropdown-item active"href="#"aria-current="true">Active link</a></li><li><aclass="dropdown-item"href="#">Another link</a></li></ul>Неактивные элементы меню
Добавьте класс .disabled к элементу выпадающего меню для его стилизации как «деактивированного».
<ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Regular link</a></li><li><aclass="dropdown-item disabled"href="#"tabindex="-1"aria-disabled="true">Disabled link</a></li><li><aclass="dropdown-item"href="#">Another link</a></li></ul>Выравнивание меню
По умолчанию раскрывающееся меню автоматически располагается на 100% сверху и слева от своего родителя. Вы можете изменить это с помощью направленных классов .drop*, но Вы также можете управлять ими с помощью дополнительных классов-модификаторов.
Добавьте .dropdown-menu-end в .dropdown-menu, чтобы выровнять раскрывающееся меню по правому краю. При использовании Bootstrap в RTL направления отражаются, то есть .dropdown-menu-end появится слева.
<divclass="btn-group"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-bs-toggle="dropdown"aria-expanded="false"> Right-aligned menu example </button><ulclass="dropdown-menu dropdown-menu-end"><li><buttonclass="dropdown-item"type="button">Action</button></li><li><buttonclass="dropdown-item"type="button">Another action</button></li><li><buttonclass="dropdown-item"type="button">Something else here</button></li></ul></div>Отзывчивое выравнивание
Если вы хотите использовать адаптивное выравнивание, отключите динамическое позиционирование, добавив атрибут data-bs-display="static", и используйте классы адаптивных вариантов.
Чтобы выровнять выпадающее меню вправо с заданной точкой останова или больше, добавьте .dropdown-menu{-sm|-md|-lg|-xl|-xxl}-end.
<divclass="btn-group"><buttontype="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><ulclass="dropdown-menu dropdown-menu-lg-end"><li><buttonclass="dropdown-item"type="button">Action</button></li><li><buttonclass="dropdown-item"type="button">Another action</button></li><li><buttonclass="dropdown-item"type="button">Something else here</button></li></ul></div>Чтобы выровнять выпадающее меню влево с заданной точкой останова или более, добавьте .dropdown-menu-end и .dropdown-menu{-sm|-md|-lg|-xl|-xxl}-start.
<divclass="btn-group"><buttontype="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><ulclass="dropdown-menu dropdown-menu-end dropdown-menu-lg-start"><li><buttonclass="dropdown-item"type="button">Action</button></li><li><buttonclass="dropdown-item"type="button">Another action</button></li><li><buttonclass="dropdown-item"type="button">Something else here</button></li></ul></div>Обратите внимание, что вам не нужно добавлять атрибут data-bs-display="static" к выпадающим кнопкам на панелях навигации, поскольку Popper.js не используется на панелях навигации.
Варианты выравнивания
Можете воспользоваться примерами с различными вариантами выравнивания раскрывающегося списка.
<divclass="btn-group"><buttonclass="btn btn-secondary dropdown-toggle"type="button"id="dropdownMenuButton"data-bs-toggle="dropdown"aria-expanded="false"> Dropdown </button><ulclass="dropdown-menu"aria-labelledby="dropdownMenuButton"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-bs-toggle="dropdown"aria-expanded="false"> Right-aligned menu </button><ulclass="dropdown-menu dropdown-menu-end"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-bs-toggle="dropdown"data-bs-display="static"aria-expanded="false"> Left-aligned, right-aligned lg </button><ulclass="dropdown-menu dropdown-menu-lg-end"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-bs-toggle="dropdown"data-bs-display="static"aria-expanded="false"> Right-aligned, left-aligned lg </button><ulclass="dropdown-menu dropdown-menu-end dropdown-menu-lg-start"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group dropstart"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-bs-toggle="dropdown"aria-expanded="false"> Dropstart </button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group dropend"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-bs-toggle="dropdown"aria-expanded="false"> Dropend </button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div><divclass="btn-group dropup"><buttontype="button"class="btn btn-secondary dropdown-toggle"data-bs-toggle="dropdown"aria-expanded="false"> Dropup </button><ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li><li><aclass="dropdown-item"href="#">Menu item</a></li></ul></div>Содержание меню
Заголовки меню
Добавьте заголовок, чтобы обозначить секции действий любого выпадающего меню.
<ulclass="dropdown-menu"><li><h6class="dropdown-header">Dropdown header</h6></li><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li></ul>Разделители меню
Разделяйте группы родственных элементов меню разделителем.
<ulclass="dropdown-menu"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li><li><hrclass="dropdown-divider"></li><li><aclass="dropdown-item"href="#">Separated link</a></li></ul>Текст
Размещайте любой текст внутри выпадающего меню с текстом, используя утилиты отступа. Заметьте, что вам понадобится дополнительная настройка размеров для ограничения ширины меню.
<divclass="dropdown-menu p-4 text-muted"style="max-width: 200px;"><p> Some example text that's free-flowing within the dropdown menu. </p><pclass="mb-0"> And this is more example text. </p></div>Формы
Расположите форму внутри выпадающего меню, и используйте утилиты отступа для ее уплотнения.
<divclass="dropdown-menu"><formclass="px-4 py-3"><divclass="mb-3"><labelfor="exampleDropdownFormEmail1"class="form-label">Email address</label><inputtype="email"class="form-control"id="exampleDropdownFormEmail1"placeholder="email@example.com"></div><divclass="mb-3"><labelfor="exampleDropdownFormPassword1"class="form-label">Password</label><inputtype="password"class="form-control"id="exampleDropdownFormPassword1"placeholder="Password"></div><divclass="mb-3"><divclass="form-check"><inputtype="checkbox"class="form-check-input"id="dropdownCheck"><labelclass="form-check-label"for="dropdownCheck"> Remember me </label></div></div><buttontype="submit"class="btn btn-primary">Sign in</button></form><divclass="dropdown-divider"></div><aclass="dropdown-item"href="#">New around here? Sign up</a><aclass="dropdown-item"href="#">Forgot password?</a></div><formclass="dropdown-menu p-4"><divclass="mb-3"><labelfor="exampleDropdownFormEmail2"class="form-label">Email address</label><inputtype="email"class="form-control"id="exampleDropdownFormEmail2"placeholder="email@example.com"></div><divclass="mb-3"><labelfor="exampleDropdownFormPassword2"class="form-label">Password</label><inputtype="password"class="form-control"id="exampleDropdownFormPassword2"placeholder="Password"></div><divclass="mb-3"><divclass="form-check"><inputtype="checkbox"class="form-check-input"id="dropdownCheck2"><labelclass="form-check-label"for="dropdownCheck2"> Remember me </label></div></div><buttontype="submit"class="btn btn-primary">Sign in</button></form>Параметры раскрывающегося списка
Используйте data-bs-offset или data-bs-reference, чтобы изменить местоположение раскрывающегося списка.
<divclass="d-flex"><divclass="dropdown me-1"><buttontype="button"class="btn btn-secondary dropdown-toggle"id="dropdownMenuOffset"data-bs-toggle="dropdown"aria-expanded="false"data-bs-offset="10,20"> Offset </button><ulclass="dropdown-menu"aria-labelledby="dropdownMenuOffset"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li></ul></div><divclass="btn-group"><buttontype="button"class="btn btn-secondary">Reference</button><buttontype="button"class="btn btn-secondary dropdown-toggle dropdown-toggle-split"id="dropdownMenuReference"data-bs-toggle="dropdown"aria-expanded="false"data-bs-reference="parent"><spanclass="visually-hidden">Toggle Dropdown</span></button><ulclass="dropdown-menu"aria-labelledby="dropdownMenuReference"><li><aclass="dropdown-item"href="#">Action</a></li><li><aclass="dropdown-item"href="#">Another action</a></li><li><aclass="dropdown-item"href="#">Something else here</a></li><li><hrclass="dropdown-divider"></li><li><aclass="dropdown-item"href="#">Separated link</a></li></ul></div></div>Поведение автоматического закрытия
По умолчанию раскрывающееся меню закрывается при нажатии внутри или вне раскрывающегося меню. Вы можете использовать опцию autoClose, чтобы изменить поведение раскрывающегося списка.
<divclass="btn-group"><buttonclass="btn btn-secondary dropdown-toggle"type="button"id="defaultDropdown"data-bs-toggle="dropdown"data-bs-auto-close="true"aria-expanded="false"> Раскрывающийся список по умолчанию </button><ulclass="dropdown-menu"aria-labelledby="defaultDropdown"><li><aclass="dropdown-item"href="#">Элемент меню</a></li><li><aclass="dropdown-item"href="#">Элемент меню</a></li><li><aclass="dropdown-item"href="#">Элемент меню</a></li></ul></div><divclass="btn-group"><buttonclass="btn btn-secondary dropdown-toggle"type="button"id="dropdownMenuClickableOutside"data-bs-toggle="dropdown"data-bs-auto-close="inside"aria-expanded="false"> Кликабельно снаружи </button><ulclass="dropdown-menu"aria-labelledby="dropdownMenuClickableOutside"><li><aclass="dropdown-item"href="#">Элемент меню</a></li><li><aclass="dropdown-item"href="#">Элемент меню</a></li><li><aclass="dropdown-item"href="#">Элемент меню</a></li></ul></div><divclass="btn-group"><buttonclass="btn btn-secondary dropdown-toggle"type="button"id="dropdownMenuClickableInside"data-bs-toggle="dropdown"data-bs-auto-close="outside"aria-expanded="false"> Кликабельно внутри </button><ulclass="dropdown-menu"aria-labelledby="dropdownMenuClickableInside"><li><aclass="dropdown-item"href="#">Элемент меню</a></li><li><aclass="dropdown-item"href="#">Элемент меню</a></li><li><aclass="dropdown-item"href="#">Элемент меню</a></li></ul></div><divclass="btn-group"><buttonclass="btn btn-secondary dropdown-toggle"type="button"id="dropdownMenuClickable"data-bs-toggle="dropdown"data-bs-auto-close="false"aria-expanded="false"> Ручное закрытие </button><ulclass="dropdown-menu"aria-labelledby="dropdownMenuClickable"><li><aclass="dropdown-item"href="#">Элемент меню</a></li><li><aclass="dropdown-item"href="#">Элемент меню</a></li><li><aclass="dropdown-item"href="#">Элемент меню</a></li></ul></div>Sass
Переменные
Переменные для всех выпадающих списков:
$dropdown-min-width:10rem;$dropdown-padding-x:0;$dropdown-padding-y:.5rem;$dropdown-spacer:.125rem;$dropdown-font-size:$font-size-base;$dropdown-color:$body-color;$dropdown-bg:$white;$dropdown-border-color:rgba($black,.15);$dropdown-border-radius:$border-radius;$dropdown-border-width:$border-width;$dropdown-inner-border-radius:subtract($dropdown-border-radius,$dropdown-border-width);$dropdown-divider-bg:$dropdown-border-color;$dropdown-divider-margin-y:$spacer*.5;$dropdown-box-shadow:$box-shadow;$dropdown-link-color:$gray-900;$dropdown-link-hover-color:shade-color($gray-900,10%);$dropdown-link-hover-bg:$gray-200;$dropdown-link-active-color:$component-active-color;$dropdown-link-active-bg:$component-active-bg;$dropdown-link-disabled-color:$gray-500;$dropdown-item-padding-y:$spacer*.25;$dropdown-item-padding-x:$spacer;$dropdown-header-color:$gray-600;$dropdown-header-padding:$dropdown-padding-y$dropdown-item-padding-x;Переменные для темного раскрывающегося списка:
$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;Миксины
Миксины используются для генерации курсоров на основе CSS и могут быть найдены в scss/mixins/_caret.scss.
@mixin caret-down{border-top:$caret-widthsolid;border-right:$caret-widthsolidtransparent;border-bottom:0;border-left:$caret-widthsolidtransparent;}@mixin caret-up{border-top:0;border-right:$caret-widthsolidtransparent;border-bottom:$caret-widthsolid;border-left:$caret-widthsolidtransparent;}@mixin caret-end{border-top:$caret-widthsolidtransparent;border-right:0;border-bottom:$caret-widthsolidtransparent;border-left:$caret-widthsolid;}@mixin caret-start{border-top:$caret-widthsolidtransparent;border-right:$caret-widthsolid;border-bottom:$caret-widthsolidtransparent;}@mixin caret($direction:down){@if$enable-caret{&::after{display:inline-block;margin-left:$caret-spacing;vertical-align:$caret-vertical-align;content:"";@if$direction==down{@include caret-down();}@else if$direction==up{@include caret-up();}@else if$direction==end{@include caret-end();}}@if$direction==start{&::after{display:none;}&::before{display:inline-block;margin-right:$caret-spacing;vertical-align:$caret-vertical-align;content:"";@include caret-start();}}&:empty::after{margin-left:0;}}}Использование
Через атрибуты или JavaScript, плагин выпадающих элементов изменяет (показывает скрытое содержимое) состояние содержимого (выпадающие меню) изменением класса .show элемента родительского списка. Атрибут data-toggle="dropdown" отвечает за закрытие выпадающих меню на уровне приложения, так что будет неплохой идеей всегда использовать данный атрибут.
На устройствах, активируемых касанием, открытие выпадающего элемента добавляет пустые обработчики mouseover к непосредственным «детям» элемента <body>. Этот, по общему мнению, некрасивый хак (без которого любое касание в iOS вне выпадающего элемента не закроет выпадающий элемент) необходим для обработки проблемы с делегированием событий в iOS. После закрытия раскрывающегося списка эти дополнительные пустые обработчики наведения указателя мыши mouseover удаляются.
Через атрибуты
Добавьте к ссылке или кнопке атрибут data-bs-toggle="dropdown" для скрытия\показа выпадающего элемента.
<divclass="dropdown"><buttonid="dLabel"type="button"data-bs-toggle="dropdown"aria-expanded="false"> Dropdown trigger </button><ulclass="dropdown-menu"aria-labelledby="dLabel"> ... </ul></div>Через JavaScript
Управляйте выпадающими элементами с помощью JavaScript:
vardropdownElementList=[].slice.call(document.querySelectorAll('.dropdown-toggle'))vardropdownList=dropdownElementList.map(function(dropdownToggleEl){returnnewbootstrap.Dropdown(dropdownToggleEl)})data-bs-toggle="dropdown" все еще требуется
Независимо от того, управляете вы выпадающим элементом через JavaScript или атрибутами, атрибут data-bs-toggle="dropdown" всегда необходим в элементе, запускающем выпадающий элемент.
Параметры
Параметры можно передавать через атрибуты данных или JavaScript. Для атрибутов данных добавьте имя параметра к data-bs-, как в data-bs-offset="". Обязательно измените тип case имени параметра с camelCase на kebab-case при передаче параметров через атрибуты данных. Например, вместо использования data-bs-autoClose="false" используйте data-bs-auto-close="false".
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
boundary | string | element | 'clippingParents' | Граница ограничения переполнения раскрывающегося меню (применяется только к модификатору Popper preventOverflow). По умолчанию это 'clippingParents' и может принимать ссылку HTMLElement (только через JavaScript). Дополнительную информацию можно найти в detectOverflow документации Popper. |
reference | string | element | object | 'toggle' | Справочный элемент раскрывающегося меню. Принимает значения 'toggle', 'parent', ссылки HTMLElement или объекта, предоставляющего getBoundingClientRect. Дополнительную информацию смотрите в документации по конструктору и документации виртуальных элементов Popper. |
display | string | 'dynamic' | По умолчанию мы используем Popper для динамического позиционирования. Отключите это с помощью static. |
offset | array | string | function | [0, 0] | Смещение раскрывающегося списка относительно его цели. Вы можете передать строку в атрибутах данных со значениями, разделенными запятыми, например: Когда функция используется для определения смещения, она вызывается с объектом, содержащим размещение popper, ссылку и popper rects в качестве первого аргумента. Узел DOM запускающего элемента передается в качестве второго аргумента. Функция должна возвращать массив с двумя числами: Дополнительную информацию смотрите в offset документации Popper. |
offset | array | string | function | [0, 2] | Смещение раскрывающегося списка относительно его цели. Вы можете передать строку в атрибутах данных со значениями, разделенными запятыми, например: Когда функция используется для определения смещения, она вызывается с объектом, содержащим размещение popper, ссылку и popper rects в качестве первого аргумента. Узел DOM запускающего элемента передается в качестве второго аргумента. Функция должна возвращать массив с двумя числами: Дополнительную информацию смотрите в offset документации Popper. |
autoClose | boolean | string | true | Настройте поведение автоматического закрытия раскрывающегося списка:
|
autoClose | boolean | string | true | Настройте поведение автоматического закрытия раскрывающегося списка:
|
popperConfig | null | object | function | null | Чтобы изменить конфигурацию Popper по умолчанию для Bootstrap, смотрите конфигурацию Popper. Когда функция используется для создания конфигурации Popper, она вызывается с объектом, который содержит конфигурацию Popper по умолчанию для Bootstrap. Это поможет Вам использовать и объединить настройки по умолчанию с Вашей собственной конфигурацией. Функция должна возвращать объект конфигурации для Popper. |
Использование функции с popperConfig
vardropdown=newbootstrap.Dropdown(element,{popperConfig:function(defaultBsPopperConfig){// var newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}})Методы
| Метод | Описание |
|---|---|
toggle | Переключает выпадающее меню данной панели навигации или навигации с вкладками. |
show | Показывает выпадающее меню данной панели навигации или навигации с вкладками. |
hide | Скрывает выпадающее меню данной панели навигации или навигации с вкладками. |
update | Обновляет положение выпадающего списка элемента. |
dispose | Уничтожает выпадающий список элемента. (Удаляет сохраненные данные в элементе DOM) |
getInstance | Статический метод, который позволяет вам получить экземпляр раскрывающегося списка, связанный с элементом DOM, вы можете использовать его следующим образом: bootstrap.Dropdown.getInstance(element) |
getOrCreateInstance | Статический метод, который возвращает раскрывающийся список, связанный с элементом DOM, или создает новый, если он не был инициализирован. Вы можете использовать это так: bootstrap.Dropdown.getOrCreateInstance(element) |
События
Все события раскрывающегося списка запускаются в родительском элементе класса .dropdown-menu и несут свойство relatedTarget, значение которого является переключаемым элементом привязки. События hide.bs.dropdown и hidden.bs.dropdown имеют свойство clickEvent (только если исходным типом события является click), которое содержит объект события для события щелчка.
| Метод | Описание |
|---|---|
show.bs.dropdown | Срабатывает немедленно при вызове метода экземпляра show. |
shown.bs.dropdown | Запускается, когда выпадающий список становится видимым для пользователя и переходы CSS завершены. |
hide.bs.dropdown | Срабатывает немедленно при вызове метода экземпляра hide. |
hidden.bs.dropdown | Запускается, когда выпадающий список перестает быть скрытым от пользователя и переходы CSS завершены. |
varmyDropdown=document.getElementById('myDropdown')myDropdown.addEventListener('show.bs.dropdown',function(){// сделайте что-нибудь...
})