Offcanvas
Wbuduj w swój projekt ukryte paski boczne do nawigacji, koszyków na zakupy i nie tylko dzięki kilku klasom i naszej wtyczce JavaScript.
Jak to działa
Offcanvas to komponent paska bocznego, który można przełączać za pomocą JavaScript, aby pojawiał się z lewej, prawej, górnej lub dolnej krawędzi obszaru roboczego. Przyciski lub kotwice są używane jako wyzwalacze, które są dołączone do określonych elementów, które przełączasz, a data
atrybuty są używane do wywoływania naszego JavaScript.
- Offcanvas udostępnia niektóre z tego samego kodu JavaScript, co modalne. Koncepcyjnie są one dość podobne, ale są to osobne wtyczki.
- Podobnie, niektóre zmienne źródłowe Sassa dla stylów i wymiarów offcanvas są dziedziczone ze zmiennych modalnych.
- Po wyświetleniu offcanvas zawiera domyślne tło, które można kliknąć, aby ukryć offcanvas.
- Podobnie jak w przypadku modów, naraz może być wyświetlany tylko jeden obraz poza kanwą.
Heads-up! Biorąc pod uwagę, jak CSS obsługuje animacje, nie możesz używać margin
ani translate
na .offcanvas
elemencie. Zamiast tego użyj klasy jako niezależnego elementu opakowującego.
prefers-reduced-motion
zapytania o media. Zobacz
zmniejszoną sekcję ruchu w naszej dokumentacji ułatwień dostępu .
Przykłady
Komponenty Offcanvas
Poniżej znajduje się przykład offcanvas, który jest wyświetlany domyślnie (przez .show
on .offcanvas
). Offcanvas zawiera obsługę nagłówka z przyciskiem zamykania i opcjonalną klasę treści dla niektórych początkowych padding
. Sugerujemy, aby w miarę możliwości dołączać nagłówki offcanvas do działań odrzucających lub podać wyraźne działanie odrzucające.
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>
Demo na żywo
Użyj poniższych przycisków, aby pokazać i ukryć element offcanvas za pomocą JavaScript, który przełącza .show
klasę na element z .offcanvas
klasą.
.offcanvas
ukrywa zawartość (domyślnie).offcanvas.show
pokazuje treść
Możesz użyć linku z href
atrybutem lub przycisku z data-bs-target
atrybutem. W obu przypadkach data-bs-toggle="offcanvas"
jest to wymagane.
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>
Przewijanie ciała
Przewijanie <body>
elementu jest wyłączone, gdy widoczny jest offcanvas i jego tło. Użyj data-bs-scroll
atrybutu, aby włączyć <body>
przewijanie.
Offcanvas z przewijaniem ciała
Spróbuj przewinąć resztę strony, aby zobaczyć tę opcję w akcji.
<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>
Przewijanie ciała i tło
Możesz także włączyć <body>
przewijanie z widocznym tłem.
Tło z przewijaniem
Spróbuj przewinąć resztę strony, aby zobaczyć tę opcję w akcji.
<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>
Tło statyczne
Gdy tło jest ustawione jako statyczne, offcanvas nie zamknie się po kliknięciu poza nim.
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>
Ciemne płótno
Dodano w wersji 5.2.0Zmień wygląd płótna zewnętrznego za pomocą narzędzi, aby lepiej dopasować je do różnych kontekstów, takich jak ciemne paski nawigacyjne. Tutaj dodajemy .text-bg-dark
do .offcanvas
i .btn-close-white
do .btn-close
odpowiedniej stylizacji z ciemnym offcanvas. Jeśli masz listy rozwijane w obrębie, rozważ również dodanie .dropdown-menu-dark
do .dropdown-menu
.
Offcanvas
Umieść tutaj zawartość 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>
Czuły
Dodano w wersji 5.2.0Elastyczne klasy offcanvas ukrywają zawartość poza widocznym obszarem od określonego punktu przerwania i w dół. Powyżej tego punktu przerwania zawartość będzie zachowywać się normalnie. Na przykład .offcanvas-lg
ukrywa zawartość w offcanva poniżej lg
punktu przerwania, ale wyświetla zawartość powyżej lg
punktu przerwania.
Responsywne płótno
To jest treść w .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>
Dla każdego punktu przerwania dostępne są responsywne klasy offcanvas.
.offcanvas
.offcanvas-sm
.offcanvas-md
.offcanvas-lg
.offcanvas-xl
.offcanvas-xxl
Umieszczenie
Nie ma domyślnego rozmieszczenia komponentów offcanvas, więc musisz dodać jedną z poniższych klas modyfikatorów.
.offcanvas-start
umieszcza poza kanwą po lewej stronie rzutni (pokazane powyżej).offcanvas-end
umieszcza poza płótnem po prawej stronie okna widokowego.offcanvas-top
umieszcza płótno poza płótnem na górze okna widokowego.offcanvas-bottom
umieszcza poza płótnem na dole okna widokowego
Wypróbuj poniższe przykłady z góry, z prawej i z dołu.
Top na płótnie
<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 prawo
<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>
Dół Offcanvas
<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>
Dostępność
Ponieważ panel offcanvas jest koncepcyjnie modalnym oknem dialogowym, pamiętaj, aby dodać aria-labelledby="..."
— odwołując się do tytułu offcanvas — do .offcanvas
. Pamiętaj, że nie musisz dodawać role="dialog"
, ponieważ już dodajemy je za pomocą JavaScript.
CSS
Zmienne
Dodano w wersji 5.2.0W ramach ewoluującego podejścia Bootstrap do zmiennych CSS, offcanvas używa teraz lokalnych zmiennych CSS w .offcanvas
celu udoskonalenia dostosowywania w czasie rzeczywistym. Wartości zmiennych CSS są ustawiane przez Sass, więc dostosowywanie Sass jest nadal obsługiwane.
--#{$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};
Zmienne Sassa
$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;
Stosowanie
Wtyczka offcanvas wykorzystuje kilka klas i atrybutów do obsługi podnoszenia ciężkich przedmiotów:
.offcanvas
ukrywa treść.offcanvas.show
pokazuje treść.offcanvas-start
ukrywa offcanvas po lewej stronie.offcanvas-end
ukrywa offcanvas po prawej stronie.offcanvas-top
ukrywa offcanvas na górze.offcanvas-bottom
ukrywa offcanvas na dole
Dodaj przycisk odrzucenia z data-bs-dismiss="offcanvas"
atrybutem, który uruchamia funkcję JavaScript. Upewnij się, że używasz z <button>
nim elementu, aby zapewnić prawidłowe działanie na wszystkich urządzeniach.
Poprzez atrybuty danych
Przełącznik
Dodaj data-bs-toggle="offcanvas"
i data-bs-target
lub href
do elementu, aby automatycznie przypisać kontrolę nad jednym elementem offcanvas. data-bs-target
Atrybut akceptuje selektor CSS, do którego można zastosować offcanvas . Pamiętaj, aby dodać klasę offcanvas
do elementu offcanvas. Jeśli chcesz, aby była domyślnie otwarta, dodaj dodatkowe zajęcia show
.
Odrzucać
Zwolnienie można osiągnąć za pomocą data
atrybutu na przycisku w offcanvas , jak pokazano poniżej:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
lub na przycisku poza offcanvas , data-bs-target
jak pokazano poniżej:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#my-offcanvas" aria-label="Close"></button>
Przez JavaScript
Włącz ręcznie za pomocą:
const offcanvasElementList = document.querySelectorAll('.offcanvas')
const offcanvasList = [...offcanvasElementList].map(offcanvasEl => new bootstrap.Offcanvas(offcanvasEl))
Opcje
Ponieważ opcje mogą być przekazywane przez atrybuty danych lub JavaScript, możesz dołączyć nazwę opcji do data-bs-
, jak w data-bs-animation="{value}"
. Pamiętaj, aby zmienić typ wielkości liter w nazwie opcji z „ camelCase ” na „ kebab-case ” podczas przekazywania opcji przez atrybuty danych. Na przykład użyj data-bs-custom-class="beautifier"
zamiast data-bs-customClass="beautifier"
.
Od wersji Bootstrap 5.2.0 wszystkie komponenty obsługują eksperymentalny atrybut zarezerwowanych danych data-bs-config
, który może zawierać prostą konfigurację komponentu w postaci ciągu JSON. Gdy element ma atrybuty data-bs-config='{"delay":0, "title":123}'
i data-bs-title="456"
, ostateczną title
wartością będzie, 456
a oddzielne atrybuty danych zastąpią wartości podane w data-bs-config
. Ponadto istniejące atrybuty danych mogą zawierać wartości JSON, takie jak data-bs-delay='{"show":0,"hide":150}'
.
Nazwa | Rodzaj | Domyślna | Opis |
---|---|---|---|
backdrop |
wartość logiczna lub ciągstatic |
true |
Nałóż tło na ciało, gdy płótno jest otwarte. Możesz też określić static tło, które nie zamyka kanwy po kliknięciu. |
keyboard |
logiczne | true |
Zamyka obszar poza kanwą po naciśnięciu klawisza Escape. |
scroll |
logiczne | false |
Zezwalaj na przewijanie treści, gdy otwarte jest pole offcanvas. |
Metody
Metody asynchroniczne i przejścia
Wszystkie metody API są asynchroniczne i rozpoczynają przejście . Wracają do rozmówcy zaraz po rozpoczęciu przejścia, ale przed jego zakończeniem . Ponadto wywołanie metody na składniku przechodzącym zostanie zignorowane .
Zobacz naszą dokumentację JavaScript, aby uzyskać więcej informacji .
Aktywuje Twoje treści jako element offcanvas. Akceptuje opcjonalne opcje object
.
Możesz utworzyć instancję offcanvas za pomocą konstruktora, na przykład:
const bsOffcanvas = new bootstrap.Offcanvas('#myOffcanvas')
metoda | Opis |
---|---|
getInstance |
Metoda statyczna , która pozwala uzyskać instancję offcanvas skojarzoną z elementem DOM. |
getOrCreateInstance |
Metoda statyczna , która pozwala uzyskać instancję offcanvas skojarzoną z elementem DOM lub utworzyć nową w przypadku, gdy nie została zainicjowana. |
hide |
Ukrywa element offcanvas. Wraca do wywołującego, zanim element offcanvas został faktycznie ukryty (tj. przed hidden.bs.offcanvas wystąpieniem zdarzenia). |
show |
Pokazuje element offcanvas. Powraca do wywołującego, zanim element offcanvas został faktycznie wyświetlony (tj. przed shown.bs.offcanvas wystąpieniem zdarzenia). |
toggle |
Przełącza element poza kanwą do pokazywania lub ukrywania. Wraca do wywołującego, zanim element offcanvas został faktycznie pokazany lub ukryty (tj. przed wystąpieniem zdarzenia shown.bs.offcanvas lub ).hidden.bs.offcanvas |
Wydarzenia
Klasa Bootstrap offcanvas udostępnia kilka zdarzeń umożliwiających podłączenie do funkcjonalności offcanvas.
Typ wydarzenia | Opis |
---|---|
hide.bs.offcanvas |
To zdarzenie jest wywoływane natychmiast po hide wywołaniu metody. |
hidden.bs.offcanvas |
To zdarzenie jest uruchamiane, gdy element offcanvas został ukryty przed użytkownikiem (poczeka na zakończenie przejścia CSS). |
hidePrevented.bs.offcanvas |
To zdarzenie jest uruchamiane, gdy pokazywane jest offcanvas, jego tło jest static i wykonywane jest kliknięcie poza offcanvas. Zdarzenie jest również wywoływane po naciśnięciu klawisza Escape i ustawieniu keyboard opcji na false . |
show.bs.offcanvas |
To zdarzenie jest wyzwalane natychmiast po show wywołaniu metody wystąpienia. |
shown.bs.offcanvas |
To zdarzenie jest uruchamiane, gdy element offcanvas został udostępniony użytkownikowi (poczeka na zakończenie przejścia CSS). |
const myOffcanvas = document.getElementById('myOffcanvas')
myOffcanvas.addEventListener('hidden.bs.offcanvas', event => {
// do something...
})