Offcanvas
Construiți bare laterale ascunse în proiectul dvs. pentru navigare, coșuri de cumpărături și multe altele cu câteva clase și pluginul nostru JavaScript.
Cum functioneaza
Offcanvas este o componentă a barei laterale care poate fi comutată prin JavaScript pentru a apărea din marginea din stânga, dreapta, de sus sau de jos a ferestrei de vizualizare. Butoanele sau ancorele sunt folosite ca declanșatori care sunt atașate la anumite elemente pe care le comutați, iar data
atributele sunt folosite pentru a invoca JavaScript-ul nostru.
- Offcanvas partajează o parte din același cod JavaScript ca modal. Conceptual, sunt destul de asemănătoare, dar sunt pluginuri separate.
- În mod similar, unele variabile Sass sursă pentru stilurile și dimensiunile offcanvas sunt moștenite din variabilele modalului.
- Când este afișat, offcanvas include un fundal implicit pe care se poate face clic pentru a ascunde offcanvasul.
- Similar cu modalele, doar un singur canvas poate fi afișat la un moment dat.
Atenție! Având în vedere modul în care CSS gestionează animațiile, nu puteți utiliza margin
sau translate
pe un .offcanvas
element. În schimb, utilizați clasa ca element independent de împachetare.
prefers-reduced-motion
interogarea media. Consultați
secțiunea cu mișcare redusă a documentației noastre de accesibilitate .
Exemple
Componente offcanvas
Mai jos este un exemplu offcanvas care este afișat implicit (prin .show
pornit .offcanvas
). Offcanvas include suport pentru un antet cu un buton de închidere și o clasă de corp opțională pentru unele inițiale padding
. Vă sugerăm să includeți antete offcanvas cu acțiuni de respingere ori de câte ori este posibil sau să furnizați o acțiune explicită de respingere.
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 live
Utilizați butoanele de mai jos pentru a afișa și a ascunde un element offcanvas prin JavaScript care comută .show
clasa într-un element cu .offcanvas
clasa.
.offcanvas
ascunde conținutul (implicit).offcanvas.show
afișează conținut
Puteți folosi un link cu href
atributul sau un buton cu data-bs-target
atributul. În ambele cazuri, data-bs-toggle="offcanvas"
este necesar.
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>
Derularea corpului
Derularea <body>
elementului este dezactivată atunci când sunt vizibile un offcanvas și fundalul acestuia. Utilizați data-bs-scroll
atributul pentru a activa <body>
derularea.
Offcanvas cu derulare corporală
Încercați să defilați restul paginii pentru a vedea această opțiune în acțiune.
<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>
Defilare corporală și fundal
De asemenea, puteți activa <body>
derularea cu un fundal vizibil.
Fundal cu defilare
Încercați să defilați restul paginii pentru a vedea această opțiune în acțiune.
<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>
Fundal static
Când fundalul este setat la static, offcanvasul nu se va închide când faceți clic în afara acestuia.
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>
Pânză întunecată
Adăugat în v5.2.0Schimbați aspectul offcanvaselor cu utilitare pentru a le potrivi mai bine cu diferite contexte, cum ar fi barele de navigare întunecate. Aici adăugăm .text-bg-dark
la .offcanvas
și .btn-close-white
la .btn-close
pentru un stil adecvat cu o pânză întunecată. Dacă aveți meniuri derulante, luați în considerare adăugarea și .dropdown-menu-dark
la .dropdown-menu
.
Offcanvas
Plasați conținut offcanvas aici.
<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>
Receptiv
Adăugat în v5.2.0Clasele responsive offcanvas ascund conținutul din afara ferestrei de vizualizare de la un punct de întrerupere specificat și în jos. Peste acel punct de întrerupere, conținutul din interior se va comporta ca de obicei. De exemplu, .offcanvas-lg
ascunde conținutul într-un offcanvas sub punctul de lg
întrerupere, dar arată conținutul deasupra punctului de lg
întrerupere.
Offcanvas receptiv
Acesta este conținut într-un .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>
Clasele responsive offcanvas sunt disponibile pentru fiecare punct de întrerupere.
.offcanvas
.offcanvas-sm
.offcanvas-md
.offcanvas-lg
.offcanvas-xl
.offcanvas-xxl
Plasarea
Nu există o plasare prestabilită pentru componentele offcanvas, așa că trebuie să adăugați una dintre clasele modificatoare de mai jos.
.offcanvas-start
plasează offcanvas în partea stângă a ferestrei de vizualizare (arată mai sus).offcanvas-end
plasează offcanvas în dreapta ferestrei de vizualizare.offcanvas-top
plasează offcanvas în partea de sus a ferestrei de vizualizare.offcanvas-bottom
plasează offcanvas în partea de jos a ferestrei de vizualizare
Încercați exemplele de sus, din dreapta și de jos de mai jos.
Top din pânză
<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 dreapta
<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>
Parte de jos din pânză
<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>
Accesibilitate
Deoarece panoul offcanvas este conceptual un dialog modal, asigurați-vă că adăugați aria-labelledby="..."
— făcând referire la titlul offcanvas — la .offcanvas
. Rețineți că nu trebuie să adăugați role="dialog"
, deoarece îl adăugăm deja prin JavaScript.
CSS
Variabile
Adăugat în v5.2.0Ca parte a abordării în evoluție a variabilelor CSS a Bootstrap, offcanvas utilizează acum variabile CSS locale on .offcanvas
pentru personalizare îmbunătățită în timp real. Valorile pentru variabilele CSS sunt setate prin Sass, astfel încât personalizarea Sass este încă acceptată.
--#{$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};
Variabile 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;
Utilizare
Pluginul offcanvas utilizează câteva clase și atribute pentru a face față sarcinilor grele:
.offcanvas
ascunde conținutul.offcanvas.show
arata continutul.offcanvas-start
ascunde offcanvasul din stânga.offcanvas-end
ascunde offcanvasul din dreapta.offcanvas-top
ascunde offpânza în partea de sus.offcanvas-bottom
ascunde offcanvasul de jos
Adăugați un buton de respingere cu data-bs-dismiss="offcanvas"
atributul, care declanșează funcționalitatea JavaScript. Asigurați-vă că utilizați <button>
elementul cu acesta pentru un comportament adecvat pe toate dispozitivele.
Prin atribute de date
Comutare
Adăugați data-bs-toggle="offcanvas"
și a data-bs-target
sau href
la element pentru a atribui automat controlul unui element offcanvas. Atributul data-bs-target
acceptă un selector CSS la care să se aplice offcanvasul. Asigurați-vă că adăugați clasa offcanvas
la elementul offcanvas. Dacă doriți să se deschidă implicit, adăugați clasa suplimentară show
.
Respingeți
Demiterea poate fi realizată cu data
atributul de pe un buton din offcanvas , așa cum se arată mai jos:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
sau pe un buton din afara pânzei utilizând după data-bs-target
cum se arată mai jos:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#my-offcanvas" aria-label="Close"></button>
Prin JavaScript
Activați manual cu:
const offcanvasElementList = document.querySelectorAll('.offcanvas')
const offcanvasList = [...offcanvasElementList].map(offcanvasEl => new bootstrap.Offcanvas(offcanvasEl))
Opțiuni
Deoarece opțiunile pot fi transmise prin atribute de date sau JavaScript, puteți adăuga un nume de opțiune la data-bs-
, ca în data-bs-animation="{value}"
. Asigurați-vă că schimbați tipul de caz al numelui opțiunii din „ camelCase ” în „ kebab-case ” atunci când treceți opțiunile prin atributele de date. De exemplu, utilizați data-bs-custom-class="beautifier"
în loc de data-bs-customClass="beautifier"
.
Începând cu Bootstrap 5.2.0, toate componentele acceptă un atribut de date rezervat experimentaldata-bs-config
care poate găzdui configurarea simplă a componentelor ca șir JSON. Când un element are data-bs-config='{"delay":0, "title":123}'
și data-bs-title="456"
atribute, valoarea finală title
va fi 456
și atributele de date separate vor înlocui valorile date pe data-bs-config
. În plus, atributele de date existente pot găzdui valori JSON precum data-bs-delay='{"show":0,"hide":150}'
.
Nume | Tip | Mod implicit | Descriere |
---|---|---|---|
backdrop |
boolean sau șirulstatic |
true |
Aplicați un fundal pe corp în timp ce offcanvas este deschis. Ca alternativă, specificați static pentru un fundal care nu închide offcanvasul atunci când faceți clic. |
keyboard |
boolean | true |
Închide offcanvas când este apăsată tasta Escape. |
scroll |
boolean | false |
Permite derularea corpului în timp ce offcanvas este deschis. |
Metode
Metode și tranziții asincrone
Toate metodele API sunt asincrone și încep o tranziție . Ei revin la apelant imediat ce tranziția este începută, dar înainte ca aceasta să se încheie . În plus, un apel de metodă pentru o componentă de tranziție va fi ignorat .
Consultați documentația noastră JavaScript pentru mai multe informații .
Activează conținutul dvs. ca element offcanvas. Acceptă opțiuni opționale object
.
Puteți crea o instanță offcanvas cu constructorul, de exemplu:
const bsOffcanvas = new bootstrap.Offcanvas('#myOffcanvas')
Metodă | Descriere |
---|---|
getInstance |
Metodă statică care vă permite să obțineți instanța offcanvas asociată cu un element DOM. |
getOrCreateInstance |
Metodă statică care vă permite să obțineți instanța offcanvas asociată cu un element DOM sau să creați unul nou în cazul în care nu a fost inițializat. |
hide |
Ascunde un element offcanvas. Se întoarce la apelant înainte ca elementul offcanvas să fi fost efectiv ascuns (adică înainte de apariția hidden.bs.offcanvas evenimentului). |
show |
Afișează un element offcanvas. Se întoarce la apelant înainte ca elementul offcanvas să fie afișat efectiv (adică înainte de apariția shown.bs.offcanvas evenimentului). |
toggle |
Comută un element offcanvas la afișat sau ascuns. Revine la apelant înainte ca elementul offcanvas să fi fost efectiv afișat sau ascuns (adică înainte ca evenimentul shown.bs.offcanvas sau să hidden.bs.offcanvas apară). |
Evenimente
Clasa offcanvas a Bootstrap expune câteva evenimente pentru conectarea la funcționalitatea offcanvas.
Tip de eveniment | Descriere |
---|---|
hide.bs.offcanvas |
Acest eveniment este declanșat imediat când hide metoda a fost apelată. |
hidden.bs.offcanvas |
Acest eveniment este declanșat atunci când un element offcanvas a fost ascuns utilizatorului (va aștepta finalizarea tranzițiilor CSS). |
hidePrevented.bs.offcanvas |
Acest eveniment este declanșat atunci când este afișat offcanvasul, fundalul său este static și se efectuează un clic în afara offcanvasului. Evenimentul este declanșat și atunci când tasta de evacuare este apăsată și keyboard opțiunea este setată la false . |
show.bs.offcanvas |
Acest eveniment se declanșează imediat când show este apelată metoda instanței. |
shown.bs.offcanvas |
Acest eveniment este declanșat atunci când un element offcanvas a fost făcut vizibil pentru utilizator (va aștepta finalizarea tranzițiilor CSS). |
const myOffcanvas = document.getElementById('myOffcanvas')
myOffcanvas.addEventListener('hidden.bs.offcanvas', event => {
// do something...
})