Вне холста
Встраивайте в свой проект скрытые боковые навигационные панели, корзины для покупок и многое другое с помощью нескольких классов и нашего плагина JavaScript.
Как это работает
Offcanvas - это компонент боковой панели, который можно переключить с помощью JavaScript, чтобы он отображался с левого, правого или нижнего края области просмотра. Кнопки или якоря используются в качестве триггеров, которые прикрепляются к определенным элементам, которые вы переключаете, а атрибуты data используются для вызова нашего JavaScript.
- Offcanvas использует тот же код JavaScript, что и модальные окна. Концептуально они очень похожи, но представляют собой отдельные плагины.
- Точно так же некоторые переменные источник Sass для стилей и размеров offcanvas наследуются от переменных модального окна.
- При отображении offcanvas включает фон по умолчанию, на который можно щелкнуть, чтобы скрыть offcanvas.
- Как и в модальных окнах, одновременно может отображаться только один неактивный холст.
Внимание! Учитывая, как CSS обрабатывает анимацию, Вы не можете использовать margin или translate в элементе .offcanvas. Вместо этого используйте класс как независимый элемент оболочки.
prefers-reduced-motion. См. раздел с уменьшенным движением в нашей документации по специальным возможностям.
Примеры
Компоненты Offcanvas
Ниже приведен пример offcanvas, который отображается по умолчанию (через .show на .offcanvas). Offcanvas включает поддержку заголовка с кнопкой закрытия и дополнительный класс тела для некоторого начального заполнения. Мы рекомендуем по возможности включать заголовки offcanvas с действиями по отклонению или предоставлять явное действие по отклонению.
Offcanvas
<divclass="offcanvas offcanvas-start"tabindex="-1"id="offcanvas"aria-labelledby="offcanvasLabel"><divclass="offcanvas-header"><h5class="offcanvas-title"id="offcanvasLabel">Offcanvas</h5><buttontype="button"class="btn-close text-reset"data-bs-dismiss="offcanvas"aria-label="Закрыть"></button></div><divclass="offcanvas-body"> Здесь размещается контент для offcanvas. Вы можете разместить здесь практически любой компонент Bootstrap или пользовательские элементы. </div></div>Живая демонстрация
Используйте кнопки ниже, чтобы отображать и скрывать элемент offcanvas с помощью JavaScript, который переключает класс .show на элемент с классом .offcanvas.
.offcanvasскрывает содержимое (по умолчанию).offcanvas.showпоказывает содержимое
Вы можете использовать ссылку с атрибутом href или кнопку с атрибутом data-bs-target. В обоих случаях требуется data-bs-toggle="offcanvas".
Вне холста
<aclass="btn btn-primary"data-bs-toggle="offcanvas"href="#offcanvasExample"role="button"aria-controls="offcanvasExample"> Ссылка с помощью атрибута href
</a><buttonclass="btn btn-primary"type="button"data-bs-toggle="offcanvas"data-bs-target="#offcanvasExample"aria-controls="offcanvasExample"> Кнопка с атрибутом data-bs-target
</button><divclass="offcanvas offcanvas-start"tabindex="-1"id="offcanvasExample"aria-labelledby="offcanvasExampleLabel"><divclass="offcanvas-header"><h5class="offcanvas-title"id="offcanvasExampleLabel">Вне холста</h5><buttontype="button"class="btn-close text-reset"data-bs-dismiss="offcanvas"aria-label="Закрыть"></button></div><divclass="offcanvas-body"><div> Какой-то текст в качестве заполнителя. В реальной жизни у вас могут быть элементы, которые Вы выбрали. Нравится, текст, изображения, списки и т. д. </div><divclass="dropdown mt-3"><buttonclass="btn btn-secondary dropdown-toggle"type="button"id="dropdownMenuButton"data-bs-toggle="dropdown"> Кнопка раскрывающегося списка </button><ulclass="dropdown-menu"aria-labelledby="dropdownMenuButton"><li><aclass="dropdown-item"href="#">Действие</a></li><li><aclass="dropdown-item"href="#">Другое действие</a></li><li><aclass="dropdown-item"href="#">Что-то еще здесь</a></li></ul></div></div></div>Размещение
Для компонентов вне холста нет размещения по умолчанию, поэтому Вы должны добавить один из классов модификаторов ниже;
.offcanvas-startпомещает offcanvas слева от области просмотра (показано выше).offcanvas-endпомещает offcanvas в правую часть области просмотра.offcanvas-topпомещает offcanvas в верхнюю часть области просмотра.offcanvas-bottomпомещает offcanvas в нижнюю часть области просмотра
Попробуйте верхний, правый и нижний примеры ниже.
Offcanvas вверху
<buttonclass="btn btn-primary"type="button"data-bs-toggle="offcanvas"data-bs-target="#offcanvasTop"aria-controls="offcanvasTop">Переключатель вверху offcanvas</button><divclass="offcanvas offcanvas-top"tabindex="-1"id="offcanvasTop"aria-labelledby="offcanvasTopLabel"><divclass="offcanvas-header"><h5id="offcanvasTopLabel">Offcanvas вверху</h5><buttontype="button"class="btn-close text-reset"data-bs-dismiss="offcanvas"aria-label="Close"></button></div><divclass="offcanvas-body"> ... </div></div>Offcanvas справа
<buttonclass="btn btn-primary"type="button"data-bs-toggle="offcanvas"data-bs-target="#offcanvasRight"aria-controls="offcanvasRight">Переключатель справа offcanvas</button><divclass="offcanvas offcanvas-end"tabindex="-1"id="offcanvasRight"aria-labelledby="offcanvasRightLabel"><divclass="offcanvas-header"><h5id="offcanvasRightLabel">Offcanvas справа</h5><buttontype="button"class="btn-close text-reset"data-bs-dismiss="offcanvas"aria-label="Закрыть"></button></div><divclass="offcanvas-body"> ... </div></div>Offcanvas снизу
<buttonclass="btn btn-primary"type="button"data-bs-toggle="offcanvas"data-bs-target="#offcanvasBottom"aria-controls="offcanvasBottom">Переключатель снизу offcanvas</button><divclass="offcanvas offcanvas-bottom"tabindex="-1"id="offcanvasBottom"aria-labelledby="offcanvasBottomLabel"><divclass="offcanvas-header"><h5class="offcanvas-title"id="offcanvasBottomLabel">Offcanvas снизу</h5><buttontype="button"class="btn-close text-reset"data-bs-dismiss="offcanvas"aria-label="Закрыть"></button></div><divclass="offcanvas-body small"> ... </div></div>Фон
Прокрутка элемента <body> отключена, когда видны вне холста и его фон. Используйте атрибут data-bs-scroll для переключения прокрутки <body> и data-bs-backdrop для переключения фона.
Цветной с прокруткой
Попробуйте прокрутить оставшуюся часть страницы, чтобы увидеть этот параметр в действии.
Offcanvas с фоном
.....
На фоне с прокруткой
Попробуйте прокрутить оставшуюся часть страницы, чтобы увидеть этот параметр в действии.
<buttonclass="btn btn-primary"type="button"data-bs-toggle="offcanvas"data-bs-target="#offcanvasScrolling"aria-controls="offcanvasScrolling">Включить прокрутку body</button><buttonclass="btn btn-primary"type="button"data-bs-toggle="offcanvas"data-bs-target="#offcanvasWithBackdrop"aria-controls="offcanvasWithBackdrop">Включить фон (по умолчанию)</button><buttonclass="btn btn-primary"type="button"data-bs-toggle="offcanvas"data-bs-target="#offcanvasWithBothOptions"aria-controls="offcanvasWithBothOptions">Включите прокрутку и фон</button><divclass="offcanvas offcanvas-start"data-bs-scroll="true"data-bs-backdrop="false"tabindex="-1"id="offcanvasScrolling"aria-labelledby="offcanvasScrollingLabel"><divclass="offcanvas-header"><h5class="offcanvas-title"id="offcanvasScrollingLabel">Цветной с прокруткой</h5><buttontype="button"class="btn-close text-reset"data-bs-dismiss="offcanvas"aria-label="Закрыть"></button></div><divclass="offcanvas-body"><p>Попробуйте прокрутить оставшуюся часть страницы, чтобы увидеть этот параметр в действии.</p></div></div><divclass="offcanvas offcanvas-start"tabindex="-1"id="offcanvasWithBackdrop"aria-labelledby="offcanvasWithBackdropLabel"><divclass="offcanvas-header"><h5class="offcanvas-title"id="offcanvasWithBackdropLabel">Offcanvas с фоном</h5><buttontype="button"class="btn-close text-reset"data-bs-dismiss="offcanvas"aria-label="Закрыть"></button></div><divclass="offcanvas-body"><p>.....</p></div></div><divclass="offcanvas offcanvas-start"data-bs-scroll="true"tabindex="-1"id="offcanvasWithBothOptions"aria-labelledby="offcanvasWithBothOptionsLabel"><divclass="offcanvas-header"><h5class="offcanvas-title"id="offcanvasWithBothOptionsLabel">На фоне с прокруткой</h5><buttontype="button"class="btn-close text-reset"data-bs-dismiss="offcanvas"aria-label="Закрыть"></button></div><divclass="offcanvas-body"><p>Попробуйте прокрутить оставшуюся часть страницы, чтобы увидеть этот параметр в действии.</p></div></div>Доступность
Так как панель offcanvas концептуально является модальным диалогом, не забудьте добавить aria-labelledby="..."—ссылку на заголовок offcanvas - в .offcanvas. Обратите внимание, что Вам не нужно добавлять role="dialog", поскольку мы уже добавляем его через JavaScript.
Sass
Переменные
$offcanvas-padding-y:$modal-inner-padding;$offcanvas-padding-x:$modal-inner-padding;$offcanvas-horizontal-width:400px;$offcanvas-vertical-height:30vh;$offcanvas-transition-duration:.3s;$offcanvas-border-color:$modal-content-border-color;$offcanvas-border-width:$modal-content-border-width;$offcanvas-title-line-height:$modal-title-line-height;$offcanvas-bg-color:$modal-content-bg;$offcanvas-color:$modal-content-color;$offcanvas-box-shadow:$modal-content-box-shadow-xs;Использование
Плагин offcanvas использует несколько классов и атрибутов для выполнения тяжелой работы:
.offcanvasскрывает содержимое.offcanvas.showпоказывает содержимое.offcanvas-startскрывает offcanvas слева.offcanvas-endскрывает offcanvas справа.offcanvas-bottomскрывает offcanvas внизу
Добавьте кнопку отклонения с атрибутом data-bs-dismiss="offcanvas", который запускает функциональность JavaScript. Обязательно используйте с ним элемент <button> для правильного поведения на всех устройствах.
Через атрибуты данных
Добавьте к элементу data-bs-toggle="offcanvas" и data-bs-target или href, чтобы автоматически назначить управление одним элементом вне холста. Атрибут data-bs-target принимает CSS-селектор для применения offcanvas. Не забудьте добавить класс offcanvas к элементу offcanvas. Если Вы хотите, чтобы он был открыт по умолчанию, добавьте дополнительный класс show.
Через JavaScript
Включить вручную с помощью:
varoffcanvasElementList=[].slice.call(document.querySelectorAll('.offcanvas'))varoffcanvasList=offcanvasElementList.map(function(offcanvasEl){returnnewbootstrap.Offcanvas(offcanvasEl)})Опции
Параметры можно передавать через атрибуты данных или JavaScript. Для атрибутов данных добавьте имя параметра к data-bs-, как в data-bs-backdrop="".
| Название | Тип | По умолчанию | Описание |
|---|---|---|---|
backdrop | boolean | true | Нанесите фон на тело, пока не открыт холст |
keyboard | boolean | true | Закрывает offcanvas при нажатии клавиши выхода |
scroll | boolean | false | Разрешить прокрутку тела при открытом вне холста |
Методы
Асинхронные методы и переходы
Все методы API асинхронны и запускают переход. Они возвращаются к вызывающей стороне, как только переход начинается, но до его завершения. Кроме того, вызов метода переходного компонента будет проигнорирован.
Дополнительную информацию см. в нашей документации по JavaScript.
Активирует Ваш контент как элемент вне холста. Принимает необязательные параметры object.
Вы можете создать экземпляр offcanvas с помощью конструктора, например:
varmyOffcanvas=document.getElementById('myOffcanvas')varbsOffcanvas=newbootstrap.Offcanvas(myOffcanvas)| Метод | Описание |
|---|---|
toggle | Переключает элемент вне холста на показанный или скрытый. Возврат к вызывающей стороне до того, как элемент offcanvas был фактически показан или скрыт (то есть до того, как произойдет событие shown.bs.offcanvas или hidden.bs.offcanvas). |
show | Показывает элемент вне холста. Возврат к вызывающей стороне до того, как элемент offcanvas был фактически показан (т.е. до того, как произойдет событие shown.bs.offcanvas). |
hide | Скрывает элемент вне холста. Возврат к вызывающей стороне до того, как элемент offcanvas был фактически скрыт (т.е. до того, как произойдет событие hidden.bs.offcanvas). |
_getInstance | Статический метод, который позволяет Вам получить экземпляр offcanvas, связанный с элементом DOM. |
События
Класс offcanvas в Bootstrap предоставляет несколько событий для подключения к функциональности offcanvas.
| Тип события | Описание |
|---|---|
show.bs.offcanvas | Это событие срабатывает немедленно, когда вызывается метод экземпляра show. |
shown.bs.offcanvas | Это событие запускается, когда элемент offcanvas стал видимым для пользователя (будет ждать завершения переходов CSS). |
hide.bs.offcanvas | Это событие запускается сразу после вызова метода hide. |
hidden.bs.offcanvas | Это событие запускается, когда элемент offcanvas был скрыт от пользователя (будет ждать завершения переходов CSS). |
varmyOffcanvas=document.getElementById('myOffcanvas')myOffcanvas.addEventListener('hidden.bs.offcanvas',function(){// сделай что-нибудь...
})