Сворачивание
Переключайте видимость контента в вашем проекте несколькими классами, нашим плагином переключения видимости и JavaScript.
Как работает
Плагин свертывания JavaScript используется для показа\скрытия контента. Кнопки или ссылки используются как триггеры, «нацеленные» на определенные элементы, которые надо скрыть\показать. Изменение состояния элемента происходит с помощью height
- изменением его с текущего до 0
. В связи с тем, как CSS обрабатывает анимации, мы не можете использовать padding
в элементе класса .collapse
. Вместо padding
используйте независимый «оборачивающий» элемент.
prefers-reduced-motion
. Смотрите раздел специальных возможностей в нашей документации по редукции анимации.
Примеры
Кликните по кнопке внизу, чтобы показать и скрыть элемент с помощью изменения его класса:
.collapse
скрывает содержимое.collapsing
применяется во время переходов.collapse.show
показывает содержимое
Вы можете использовать ссылку с атрибутом href
или кнопку с атрибутом data-target
. В обоих случаях требуется атрибут data-toggle="collapse"
.
<p>
<a class="btn btn-primary" data-toggle="collapse" href="#collapseExample" role="button" aria-expanded="false" aria-controls="collapseExample">
Ссылка с атрибутом href
</a>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
Кнопка с атрибутом data-target
</button>
</p>
<div class="collapse" id="collapseExample">
<div class="card card-body">
Некоторый заполнитель для компонента сворачивания. Эта панель по умолчанию скрыта, но открывается, когда пользователь активирует соответствующий триггер.
</div>
</div>
Взаимодействие со множественными объектами
Кнопки и ссылки <button>
и <a>
могут показывать и прятать сразу несколько элементов, обращаясь к их атрибутам href
или data-target
через селектор jQuery. Несколько <button>
или <a>
могут показывать или прятать один элемент, если каждый из них обращается к элементу через свои атрибуты href
или data-target
.
<p>
<a class="btn btn-primary" data-toggle="collapse" href="#multiCollapseExample1" role="button" aria-expanded="false" aria-controls="multiCollapseExample1">Переключить первый элемент</a>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#multiCollapseExample2" aria-expanded="false" aria-controls="multiCollapseExample2">Переключить второй элемент</button>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target=".multi-collapse" aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Переключить оба элемента</button>
</p>
<div class="row">
<div class="col">
<div class="collapse multi-collapse" id="multiCollapseExample1">
<div class="card card-body">
Некоторый заполнитель для первого компонента сворачивания в этом примере множественного сворачивания. Эта панель по умолчанию скрыта, но открывается, когда пользователь активирует соответствующий триггер.
</div>
</div>
</div>
<div class="col">
<div class="collapse multi-collapse" id="multiCollapseExample2">
<div class="card card-body">
Некоторое содержимое заполнителя для второго компонента сворачивания в этом примере множественного сворачивания. Эта панель по умолчанию скрыта, но открывается, когда пользователь активирует соответствующий триггер.
</div>
</div>
</div>
</div>
Разворачиваемые панели
Используя компонент карточки, Вы можете расширить стандартное поведение сворачивания для создания аккордеона. Чтобы правильно добиться стиля аккордеона, обязательно используйте .accordion
в качестве оболочки.
.show
.
<div class="accordion" id="accordionExample">
<div class="card">
<div class="card-header" id="headingOne">
<h2 class="mb-0">
<button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Сворачиваемый групповой элемент #1
</button>
</h2>
</div>
<div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordionExample">
<div class="card-body">
Некоторый заполнитель для первой панели аккордеона. Эта панель отображается по умолчанию благодаря классу <code>.show</code>.
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingTwo">
<h2 class="mb-0">
<button class="btn btn-link btn-block text-left collapsed" type="button" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
Сворачиваемый групповой элемент #2
</button>
</h2>
</div>
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionExample">
<div class="card-body">
Некоторый заполнитель для второй панели аккордеона. По умолчанию эта панель скрыта.
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingThree">
<h2 class="mb-0">
<button class="btn btn-link btn-block text-left collapsed" type="button" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
Сворачиваемый групповой элемент #3
</button>
</h2>
</div>
<div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-parent="#accordionExample">
<div class="card-body">
И, наконец, заполнитель для третьей и последней панели аккордеона. По умолчанию эта панель скрыта.
</div>
</div>
</div>
</div>
Доступность
Добавьте aria-expanded
к «контролирующему» элементу. Этот атрибут явно передает текущее состояние скрываемого элемента, привязанного к «контролирующему» элементу, «экранным читалкам» и прочим вспомогательным технологиям. Если скрываемый элемент скрыт по умолчанию, его aria-expanded должен быть "false" aria-expanded="false"
. Если раньше вы определяли скрываемый элемент показываемым по умолчанию через класс show
, теперь используйте вместо этого класса aria-expanded="true"
в «контролирующем» элементе. Основываясь на том, показан или скрыт элемент, плагин будет автоматически переключать этот атрибут (через JavaScript либо через отслеживание клика по другому «контролирующему» элементу, связанному с данным скрываемым элементом). Если элемент HTML элемента управления не является кнопкой (например <a>
или <div>
), атрибут role="button"
должен быть добавлен к элементу.
Дополнение: если ваш «контролирующий» элемент взаимодействует с одним скрываемым элементом – т.е. атрибут data-target
указывает на #id
– вы можете добавить дополнительный атрибут aria-controls
к «контролирующему» элементу, содержащему #id
этого скрываемого элемента.
Заметим, что текущая версия Bootstrap не работает с различными событиями взаимодействия с клавиатурой, описанными в WAI-ARIA Authoring Practices 1.1 accordion pattern - и вам потребуется подключить эти события с помощью обычного JavaScript.
Использование
Плагин «скрытия\показа» использует несколько классов для работы c даже «тяжелыми» элементами:
.collapse
прячет содержимое.collapse.show
показывает содержимое.collapsing
добавляется, когда переход начинается и удаляется с его завершением
Эти классы можно найти в _transitions.scss
.
Через атрибуты
Добавьте в элемент атрибуты data-toggle="collapse"
и data-target
для автоматического контроля одного или более скрываемых элементов. Атрибут data-target
принимает CSS-селектор для применения к нему поведения toggle’a. Удостоверьтесь, что добавили в скрываемый элемент класс collapse
. Если он должен быть показан по умолчанию, добавьте в него класс show
.
Для добавления компактно расположенной (см. Разворачиваемые панели для экономии места) группы «контролирующих» элементов добавьте атрибут data-parent="#selector"
. Обратитесь к демо для просмотра в действии.
Через JavaScript
Активируйте вручную:
$('.collapse').collapse()
Параметры
Параметры можно передавать через атрибуты или JavaScript. Чтобы сделать это через атрибуты, добавьте имя параметра к data-
, например data-parent=""
.
Имя | Тип | По умолч. | Описание |
---|---|---|---|
parent | selector | jQuery object | DOM element | false | Если есть родительский элемент, все скрываемые элементы под определенным «родителем» закроются, когда он открыт (как в «аккордеоне» - это зависит от класса card ). Атрибут нужно устанавливать в скрываемой зоне. |
toggle | boolean | true | Взаимодействует с скрываемым элементом по обращению |
Методы
Асинхронные методы и переходы
Все методы API асинхронны и запускают переход. Они возвращаются функции, вызвавшей их, с началом перехода, но до его конца. Плюс, вызов метода к компоненту, выполняющему переход, будет проигнорирован.
.collapse(options)
Задействует ваше содержимое как скрываемый элемент. Принимает object
дополнительных опций.
$('#myCollapsible').collapse({
toggle: false
})
.collapse('toggle')
Задействует на скрываемом элементе функциональность toggle’а (hide\show). Возвращается к функции-вызову до того, как элемент показан или скрыт (т.е. до отработки событий shown.bs.collapse
или hidden.bs.collapse
event occurs).
.collapse('show')
Показывает скрываемый элемент. Возвращается к функции-вызову до того, как элемент показан или скрыт (т.е. до отработки события shown.bs.collapse
).
.collapse('hide')
Прячет скрываемый элемент. Возвращается к функции-вызову до того, как элемент показан или скрыт (т.е. до отработки события hidden.bs.collapse
).
.collapse('dispose')
Уничтожает «коллпас» элемента.
События
Класс «коллапса» в Bootstrap содержит несколько событий для вовлечения, взаимодействия и связи иных событий JS с функциональностью «коллапса».
Тип события | Описание |
---|---|
show.bs.collapse | Это событие наступает немедленно по вызову экземпляра метода show . |
shown.bs.collapse | Это событие наступает, когда элемент «коллапса» сделан видимым пользователю (будет ждать выполнения CSS-переходов). |
hide.bs.collapse | Это событие наступает немедленно по вызову метода hide . |
hidden.bs.collapse | Это событие наступает как только элемент «коллапса» скрыт от пользователя (будет ждать выполнения CSS-переходов). |
$('#myCollapsible').on('hidden.bs.collapse', function () {
// сделайте что-нибудь...
})