Offcanvas
Створіть у свій проект приховані бічні панелі для навігації, візків для покупок тощо за допомогою кількох класів і нашого плагіна JavaScript.
Як це працює
Offcanvas — це компонент бічної панелі, який можна перемикати за допомогою JavaScript, щоб він з’являвся з лівого, правого, верхнього чи нижнього краю вікна перегляду. Кнопки або прив’язки використовуються як тригери, які прикріплюються до певних елементів, які ви перемикаєте, а data
атрибути використовуються для виклику нашого JavaScript.
- Offcanvas використовує деякий той самий код JavaScript, що й модальні. Концептуально вони досить схожі, але це окремі плагіни.
- Подібним чином деякі вихідні змінні Sass для стилів і розмірів offcanvas успадковуються від модальних змінних.
- Коли відображається, offcanvas містить фон за замовчуванням, який можна клацнути, щоб приховати offcanvas.
- Подібно до модалів, одночасно може бути показано лише одне полотно.
Голови вгору! Зважаючи на те, як CSS обробляє анімацію, ви не можете використовувати margin
або translate
на .offcanvas
елементі. Замість цього використовуйте клас як незалежний елемент обгортки.
prefers-reduced-motion
медіа-запиту. Перегляньте розділ про
обмежений рух нашої документації щодо спеціальних можливостей .
Приклади
Компоненти Offcanvas
Нижче наведено приклад поза полотном, який відображається за замовчуванням (через .show
on .offcanvas
). Offcanvas включає підтримку заголовка з кнопкою закриття та додатковий клас тіла для деяких ініціалів padding
. Ми пропонуємо вам включити заголовки offcanvas із діями відхилення, коли це можливо, або надати явну дію відхилення.
Offcanvas
<div class="offcanvas offcanvas-start show" tabindex="-1" id="offcanvas" aria-labelledby="offcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasLabel">Offcanvas</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
Content for the offcanvas goes here. You can place just about any Bootstrap component or custom elements here.
</div>
</div>
Жива демонстрація
Використовуйте кнопки нижче, щоб показати або приховати елемент offcanvas за допомогою JavaScript, який перемикає .show
клас на елементі з .offcanvas
класом.
.offcanvas
приховує вміст (за замовчуванням).offcanvas.show
показує вміст
Ви можете використовувати посилання з href
атрибутом або кнопку з data-bs-target
атрибутом. В обох випадках data-bs-toggle="offcanvas"
потрібно.
Offcanvas
<a class="btn btn-primary" data-bs-toggle="offcanvas" href="#offcanvasExample" role="button" aria-controls="offcanvasExample">
Link with href
</a>
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample" aria-controls="offcanvasExample">
Button with data-bs-target
</button>
<div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasExample" aria-labelledby="offcanvasExampleLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasExampleLabel">Offcanvas</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<div>
Some text as placeholder. In real life you can have the elements you have chosen. Like, text, images, lists, etc.
</div>
<div class="dropdown mt-3">
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown">
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>
</div>
</div>
Прокручування тіла
Прокручування <body>
елемента вимкнено, коли видно позаполотно та його фон. Використовуйте data-bs-scroll
атрибут, щоб увімкнути <body>
прокручування.
Offcanvas із прокруткою тіла
Спробуйте прокрутити решту сторінки, щоб побачити цю опцію в дії.
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasScrolling" aria-controls="offcanvasScrolling">Enable body scrolling</button>
<div class="offcanvas offcanvas-start" data-bs-scroll="true" data-bs-backdrop="false" tabindex="-1" id="offcanvasScrolling" aria-labelledby="offcanvasScrollingLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasScrollingLabel">Offcanvas with body scrolling</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<p>Try scrolling the rest of the page to see this option in action.</p>
</div>
</div>
Прокрутка тіла та фон
Ви також можете ввімкнути <body>
прокручування з видимим фоном.
Задник із прокруткою
Спробуйте прокрутити решту сторінки, щоб побачити цю опцію в дії.
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasWithBothOptions" aria-controls="offcanvasWithBothOptions">Enable both scrolling & backdrop</button>
<div class="offcanvas offcanvas-start" data-bs-scroll="true" tabindex="-1" id="offcanvasWithBothOptions" aria-labelledby="offcanvasWithBothOptionsLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasWithBothOptionsLabel">Backdrop with scrolling</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<p>Try scrolling the rest of the page to see this option in action.</p>
</div>
</div>
Статичний фон
Якщо для фону встановлено статичний режим, зовнішнє полотно не закриватиметься, якщо клацати поза ним.
Offcanvas
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#staticBackdrop" aria-controls="staticBackdrop">
Toggle static offcanvas
</button>
<div class="offcanvas offcanvas-start" data-bs-backdrop="static" tabindex="-1" id="staticBackdrop" aria-labelledby="staticBackdropLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="staticBackdropLabel">Offcanvas</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<div>
I will not close if you click outside of me.
</div>
</div>
</div>
Темне неткане полотно
Додано у v5.2.0Змінюйте зовнішній вигляд offcanvases за допомогою утиліт, щоб краще відповідати їм у різних контекстах, як-от темні навігаційні панелі. Тут ми додаємо .text-bg-dark
до .offcanvas
і .btn-close-white
до .btn-close
для правильного стилізації з темним офканвою. Якщо у вас є спадні списки, подумайте про додавання .dropdown-menu-dark
до .dropdown-menu
.
Offcanvas
Розмістіть тут вміст offcanvas.
<div class="offcanvas offcanvas-start show text-bg-dark" tabindex="-1" id="offcanvasDark" aria-labelledby="offcanvasDarkLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasDarkLabel">Offcanvas</h5>
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvasDark" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<p>Place offcanvas content here.</p>
</div>
</div>
Чуйний
Додано у v5.2.0Чуйні класи offcanvas приховують вміст за межами вікна перегляду від зазначеної точки зупинки й вниз. Вище цієї точки зупинки вміст у ньому працюватиме як зазвичай. Наприклад, .offcanvas-lg
приховує вміст у offcanvas нижче lg
точки розриву, але показує вміст над lg
точкою розриву.
Чуйний offcanvas
Це вміст у .offcanvas-lg
.
<button class="btn btn-primary d-lg-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasResponsive" aria-controls="offcanvasResponsive">Toggle offcanvas</button>
<div class="alert alert-info d-none d-lg-block">Resize your browser to show the responsive offcanvas toggle.</div>
<div class="offcanvas-lg offcanvas-end" tabindex="-1" id="offcanvasResponsive" aria-labelledby="offcanvasResponsiveLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasResponsiveLabel">Responsive offcanvas</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#offcanvasResponsive" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<p class="mb-0">This is content within an <code>.offcanvas-lg</code>.</p>
</div>
</div>
Чуйні класи offcanvas доступні для кожної точки зупину.
.offcanvas
.offcanvas-sm
.offcanvas-md
.offcanvas-lg
.offcanvas-xl
.offcanvas-xxl
Розміщення
Немає стандартного розташування для компонентів offcanvas, тому ви повинні додати один із наведених нижче класів модифікаторів.
.offcanvas-start
розміщує offcanvas ліворуч від вікна перегляду (показано вище).offcanvas-end
розміщує offcanvas праворуч від вікна перегляду.offcanvas-top
розміщує offcanvas у верхній частині вікна перегляду.offcanvas-bottom
розміщує offcanvas у нижній частині вікна перегляду
Спробуйте наведені нижче приклади вгорі, праворуч і внизу.
Неканвасовий верх
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasTop" aria-controls="offcanvasTop">Toggle top offcanvas</button>
<div class="offcanvas offcanvas-top" tabindex="-1" id="offcanvasTop" aria-labelledby="offcanvasTopLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasTopLabel">Offcanvas top</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
...
</div>
</div>
Offcanvas справа
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasRight" aria-controls="offcanvasRight">Toggle right offcanvas</button>
<div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasRight" aria-labelledby="offcanvasRightLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasRightLabel">Offcanvas right</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
...
</div>
</div>
Нетканий низ
<button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasBottom" aria-controls="offcanvasBottom">Toggle bottom offcanvas</button>
<div class="offcanvas offcanvas-bottom" tabindex="-1" id="offcanvasBottom" aria-labelledby="offcanvasBottomLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="offcanvasBottomLabel">Offcanvas bottom</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body small">
...
</div>
</div>
Доступність
Оскільки панель offcanvas концептуально є модальним діалоговим вікном, обов’язково додайте aria-labelledby="..."
—з посиланням на назву offcanvas—до .offcanvas
. Зауважте, що вам не потрібно додавати, role="dialog"
оскільки ми вже додаємо це через JavaScript.
CSS
Змінні
Додано у v5.2.0Як частина змінного підходу Bootstrap до змінних CSS, offcanvas тепер використовує локальні змінні CSS .offcanvas
для покращеного налаштування в реальному часі. Значення для змінних CSS встановлюються через Sass, тому налаштування Sass все ще підтримується.
--#{$prefix}offcanvas-zindex: #{$zindex-offcanvas};
--#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width};
--#{$prefix}offcanvas-height: #{$offcanvas-vertical-height};
--#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x};
--#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y};
--#{$prefix}offcanvas-color: #{$offcanvas-color};
--#{$prefix}offcanvas-bg: #{$offcanvas-bg-color};
--#{$prefix}offcanvas-border-width: #{$offcanvas-border-width};
--#{$prefix}offcanvas-border-color: #{$offcanvas-border-color};
--#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow};
Змінні 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-backdrop-bg: $modal-backdrop-bg;
$offcanvas-backdrop-opacity: $modal-backdrop-opacity;
Використання
Плагін offcanvas використовує кілька класів і атрибутів для виконання важкої роботи:
.offcanvas
приховує вміст.offcanvas.show
показує вміст.offcanvas-start
ховає позаполотно зліва.offcanvas-end
ховає позаполотно праворуч.offcanvas-top
ховає позаполотно зверху.offcanvas-bottom
ховає offcanvas внизу
Додайте кнопку відхилення з data-bs-dismiss="offcanvas"
атрибутом, який запускає функцію JavaScript. Обов’язково використовуйте <button>
елемент із ним для належної роботи на всіх пристроях.
Через атрибути даних
Перемикач
Додайте data-bs-toggle="offcanvas"
та data-bs-target
або href
до елемента, щоб автоматично призначити керування одним елементом offcanvas. Атрибут data-bs-target
приймає селектор CSS для застосування offcanvas. Обов’язково додайте клас offcanvas
до елемента offcanvas. Якщо ви хочете, щоб він відкривався за умовчанням, додайте додатковий клас show
.
Відхилити
Відхилення можна досягти за допомогою data
атрибута на кнопці в межах offcanvas , як показано нижче:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
або на кнопці поза межами полотна, використовуючи, data-bs-target
як показано нижче:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#my-offcanvas" aria-label="Close"></button>
Через JavaScript
Увімкнути вручну за допомогою:
const offcanvasElementList = document.querySelectorAll('.offcanvas')
const offcanvasList = [...offcanvasElementList].map(offcanvasEl => new bootstrap.Offcanvas(offcanvasEl))
Опції
Оскільки параметри можна передати через атрибути даних або 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}'
.
Ім'я | Тип | За замовчуванням | опис |
---|---|---|---|
backdrop |
логічний або рядокstatic |
true |
Застосуйте фон до тіла, поки відкрито offcanvas. Крім того, вкажіть static для фону, який не закриває полотно після натискання. |
keyboard |
логічний | true |
Закриває offcanvas, коли натиснуто клавішу Escape. |
scroll |
логічний | false |
Дозволити прокручування тіла, коли відкрито offcanvas. |
методи
Асинхронні методи та переходи
Усі методи API є асинхронними та починають перехід . Вони повертаються до абонента, щойно перехід починається, але до його завершення . Крім того, виклик методу компонента, що переходить, ігноруватиметься .
Дивіться нашу документацію JavaScript для отримання додаткової інформації .
Активує ваш вміст як елемент offcanvas. Приймає додаткові параметри object
.
Ви можете створити екземпляр offcanvas за допомогою конструктора, наприклад:
const bsOffcanvas = new bootstrap.Offcanvas('#myOffcanvas')
метод | опис |
---|---|
getInstance |
Статичний метод, який дозволяє отримати екземпляр offcanvas, пов’язаний з елементом DOM. |
getOrCreateInstance |
Статичний метод, який дозволяє отримати екземпляр offcanvas, пов’язаний з елементом DOM, або створити новий, якщо він не був ініціалізований. |
hide |
Приховує елемент offcanvas. Повертається до абонента до того, як елемент offcanvas буде фактично приховано (тобто до того , як відбудеться hidden.bs.offcanvas подія). |
show |
Показує елемент поза полотном. Повертається до абонента до того, як елемент offcanvas буде фактично показано (тобто до того , як відбудеться shown.bs.offcanvas подія). |
toggle |
Перемикає елемент offcanvas на показ або приховування. Повертається до абонента до того, як елемент offcanvas буде фактично показано або приховано (тобто до того, як відбудеться подія shown.bs.offcanvas або ).hidden.bs.offcanvas |
Події
Клас offcanvas у Bootstrap надає кілька подій для підключення до функціональності offcanvas.
Тип події | опис |
---|---|
hide.bs.offcanvas |
Ця подія запускається відразу після виклику hide методу. |
hidden.bs.offcanvas |
Ця подія запускається, коли елемент offcanvas було приховано від користувача (чекатиме, поки завершаться переходи CSS). |
hidePrevented.bs.offcanvas |
Ця подія запускається, коли відображається offcanvas, його фон static і виконується клацання за межами offcanvas. Подія також запускається, коли натиснуто клавішу Escape і для keyboard параметра встановлено значення false . |
show.bs.offcanvas |
Ця подія запускається негайно, коли show викликається метод екземпляра. |
shown.bs.offcanvas |
Ця подія запускається, коли елемент offcanvas стає видимим для користувача (чекатиме, поки завершаться переходи CSS). |
const myOffcanvas = document.getElementById('myOffcanvas')
myOffcanvas.addEventListener('hidden.bs.offcanvas', event => {
// do something...
})