Offcanvas
Creeu barres laterals amagades al vostre projecte per a la navegació, els carretons de la compra i molt més amb algunes classes i el nostre connector de JavaScript.
Com funciona
Offcanvas és un component de la barra lateral que es pot canviar mitjançant JavaScript per aparèixer des de la vora esquerra, dreta, superior o inferior de la finestra gràfica. Els botons o ancoratges s'utilitzen com a activadors que s'adjunten a elements específics que activeu i data
els atributs s'utilitzen per invocar el nostre JavaScript.
- Offcanvas comparteix part del mateix codi JavaScript que els modals. Conceptualment, són força similars, però són complements separats.
- De la mateixa manera, algunes variables Sass d'origen per als estils i dimensions d'offcanvas s'hereten de les variables del modal.
- Quan es mostra, offcanvas inclou un fons predeterminat en el qual es pot fer clic per ocultar el offcanvas.
- De manera semblant als modals, només es pot mostrar un fora de llenç alhora.
Caps amunt! Tenint en compte com CSS gestiona les animacions, no podeu utilitzar margin
ni translate
en un .offcanvas
element. En comptes d'això, utilitzeu la classe com a element d'embolcall independent.
prefers-reduced-motion
consulta de mitjans. Consulteu la
secció de moviment reduït de la nostra documentació d'accessibilitat .
Exemples
Components offcanvas
A continuació es mostra un exemple fora del llenç que es mostra de manera predeterminada (mitjançant .show
on .offcanvas
). Offcanvas inclou suport per a una capçalera amb un botó de tancament i una classe de cos opcional per a algunes inicials padding
. Us recomanem que inclogueu capçaleres fora del llenç amb accions d'ignorar sempre que sigui possible o proporcioneu una acció d'ignoració explícita.
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 en directe
Utilitzeu els botons següents per mostrar i amagar un element fora del llenç mitjançant JavaScript que alterna la .show
classe a un element amb la .offcanvas
classe.
.offcanvas
amaga el contingut (per defecte).offcanvas.show
mostra contingut
Podeu utilitzar un enllaç amb l' href
atribut o un botó amb l' data-bs-target
atribut. En ambdós casos, data-bs-toggle="offcanvas"
és necessari.
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>
Desplaçament corporal
El desplaçament de l' <body>
element està desactivat quan un llenç i el seu fons són visibles. Utilitzeu l' data-bs-scroll
atribut per activar el <body>
desplaçament.
Offcanvas amb desplaçament corporal
Proveu de desplaçar-vos per la resta de la pàgina per veure aquesta opció en acció.
<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>
Desplaçament corporal i teló de fons
També podeu habilitar el <body>
desplaçament amb un teló de fons visible.
Teló de fons amb desplaçament
Proveu de desplaçar-vos per la resta de la pàgina per veure aquesta opció en acció.
<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>
Teló de fons estàtic
Quan el fons s'estableix com a estàtic, l'offcanvas no es tancarà en fer clic fora d'ell.
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>
Offcanvas fosc
Afegit a la v5.2.0Canvieu l'aspecte dels llenços amb utilitats per adaptar-los millor a diferents contextos, com ara barres de navegació fosques. Aquí afegim .text-bg-dark
a .offcanvas
i .btn-close-white
per .btn-close
a un estil adequat amb un llenç fosc. Si teniu menús desplegables, penseu a afegir-los també .dropdown-menu-dark
a .dropdown-menu
.
Offcanvas
Col·loca aquí contingut fora del llenç.
<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>
Responent
Afegit a la v5.2.0Les classes offcanvas responsives amaguen contingut fora de la finestra gràfica des d'un punt d'interrupció especificat i cap avall. Per sobre d'aquest punt d'interrupció, els continguts es comportaran com de costum. Per exemple, .offcanvas-lg
amaga el contingut en un llenç fora del lg
punt d'interrupció, però mostra el contingut a sobre del punt d' lg
interrupció.
Offcanvas responsiu
Això és contingut dins d'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>
Les classes responsives offcanvas estan disponibles per a cada punt d'interrupció.
.offcanvas
.offcanvas-sm
.offcanvas-md
.offcanvas-lg
.offcanvas-xl
.offcanvas-xxl
Col·locació
No hi ha cap ubicació predeterminada per als components fora del llenç, de manera que heu d'afegir una de les classes modificadores a continuació.
.offcanvas-start
col·loca fora del llenç a l'esquerra de la finestra gràfica (que es mostra a dalt).offcanvas-end
col·loca fora del llenç a la dreta de la finestra gràfica.offcanvas-top
col·loca fora del llenç a la part superior de la finestra.offcanvas-bottom
col·loca fora del llenç a la part inferior de la finestra gràfica
Proveu els exemples superior, dret i inferior a continuació.
Top fora de lona
<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 a la dreta
<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>
Fons fora de lona
<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>
Accessibilitat
Atès que el tauler fora del llenç és conceptualment un diàleg modal, assegureu-vos d'afegir aria-labelledby="..."
—fer referència al títol del llenç— a .offcanvas
. Tingueu en compte que no cal que l'afegiu role="dialog"
, ja que ja l'afegim mitjançant JavaScript.
CSS
Les variables
Afegit a la v5.2.0Com a part de l'enfocament de variables CSS en evolució de Bootstrap, ara offcanvas utilitza variables CSS locals activades .offcanvas
per a una personalització millorada en temps real. Els valors de les variables CSS s'estableixen mitjançant Sass, de manera que la personalització de Sass encara és compatible.
--#{$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};
Variables 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;
Ús
El connector offcanvas utilitza algunes classes i atributs per gestionar el treball pesat:
.offcanvas
amaga el contingut.offcanvas.show
mostra el contingut.offcanvas-start
amaga el llenç fora de l'esquerra.offcanvas-end
amaga el llenç fora de la dreta.offcanvas-top
amaga el llenç fora de la part superior.offcanvas-bottom
amaga el llenç fora de la part inferior
Afegiu un botó d'ignorar amb l' data-bs-dismiss="offcanvas"
atribut, que activa la funcionalitat de JavaScript. Assegureu-vos d'utilitzar l' <button>
element amb ell per a un comportament adequat en tots els dispositius.
Mitjançant atributs de dades
Commuta
Afegiu data-bs-toggle="offcanvas"
i a data-bs-target
o href
a l'element per assignar automàticament el control d'un element fora del llenç. L' data-bs-target
atribut accepta un selector CSS per aplicar-hi l'offcanvas. Assegureu-vos d'afegir la classe offcanvas
a l'element offcanvas. Si voleu que s'obri per defecte, afegiu la classe addicional show
.
Descartar
L'acomiadament es pot aconseguir amb l' data
atribut d'un botó dins de l'offcanvas , tal com es mostra a continuació:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
o en un botó fora del llenç mitjançant el data-bs-target
que es mostra a continuació:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#my-offcanvas" aria-label="Close"></button>
Mitjançant JavaScript
Habilita manualment amb:
const offcanvasElementList = document.querySelectorAll('.offcanvas')
const offcanvasList = [...offcanvasElementList].map(offcanvasEl => new bootstrap.Offcanvas(offcanvasEl))
Opcions
Com que les opcions es poden passar mitjançant atributs de dades o JavaScript, podeu afegir un nom d'opció a data-bs-
, com a data-bs-animation="{value}"
. Assegureu-vos de canviar el tipus de cas del nom de l'opció de " camelCase " a " kebab-case " quan passeu les opcions mitjançant atributs de dades. Per exemple, utilitzeu data-bs-custom-class="beautifier"
en comptes de data-bs-customClass="beautifier"
.
A partir de Bootstrap 5.2.0, tots els components admeten un atribut de dades reservades experimentalsdata-bs-config
que pot albergar una configuració senzilla de components com a cadena JSON. Quan un element té data-bs-config='{"delay":0, "title":123}'
i data-bs-title="456"
atributs, el title
valor final serà 456
i els atributs de dades independents substituiran els valors donats a data-bs-config
. A més, els atributs de dades existents poden albergar valors JSON com data-bs-delay='{"show":0,"hide":150}'
.
Nom | Tipus | Per defecte | Descripció |
---|---|---|---|
backdrop |
booleà o la cadenastatic |
true |
Apliqueu un teló de fons al cos mentre l'offcanvas està obert. Alternativament, especifiqueu static un teló de fons que no tanqui el llenç fora de pantalla quan feu clic. |
keyboard |
booleà | true |
Tanca l'offcanvas quan es prem la tecla d'escapada. |
scroll |
booleà | false |
Permet el desplaçament corporal mentre l'offcanvas està obert. |
Mètodes
Mètodes asíncrons i transicions
Tots els mètodes de l'API són asíncrons i comencen una transició . Tornen a la persona que truca tan bon punt s'inicia la transició però abans que acabi . A més, s'ignorarà una trucada de mètode en un component en transició .
Consulteu la nostra documentació de JavaScript per obtenir més informació .
Activa el teu contingut com a element fora del llenç. Accepta opcions opcionals object
.
Podeu crear una instància offcanvas amb el constructor, per exemple:
const bsOffcanvas = new bootstrap.Offcanvas('#myOffcanvas')
Mètode | Descripció |
---|---|
getInstance |
Mètode estàtic que us permet obtenir la instància offcanvas associada a un element DOM. |
getOrCreateInstance |
Mètode estàtic que us permet obtenir la instància offcanvas associada a un element DOM o crear-ne una de nova en cas que no s'hagi inicialitzat. |
hide |
Amaga un element fora del llenç. Torna a la persona que truca abans que l'element offcanvas s'hagi amagat (és a dir, abans hidden.bs.offcanvas que es produeixi l'esdeveniment). |
show |
Mostra un element fora del llenç. Torna a la persona que truca abans que s'hagi mostrat realment l'element offcanvas (és a dir, abans shown.bs.offcanvas que es produeixi l'esdeveniment). |
toggle |
Commuta un element fora del llenç per mostrar-lo o amagar-lo. Torna a la persona que truca abans que l'element offcanvas hagi estat mostrat o amagat (és a dir, abans que es produeixi l'esdeveniment shown.bs.offcanvas o ).hidden.bs.offcanvas |
Esdeveniments
La classe offcanvas de Bootstrap exposa alguns esdeveniments per connectar-se a la funcionalitat offcanvas.
Tipus d'esdeveniment | Descripció |
---|---|
hide.bs.offcanvas |
Aquest esdeveniment s'activa immediatament quan hide s'ha cridat el mètode. |
hidden.bs.offcanvas |
Aquest esdeveniment s'activa quan un element fora del llenç s'ha amagat per a l'usuari (esperarà que finalitzin les transicions CSS). |
hidePrevented.bs.offcanvas |
Aquest esdeveniment s'activa quan es mostra l'offcanvas, el seu teló de fons static i es realitza un clic fora de l'offcanvas. L'esdeveniment també s'activa quan es prem la tecla d'escapament i l' keyboard opció s'estableix a false . |
show.bs.offcanvas |
Aquest esdeveniment s'activa immediatament quan show es crida al mètode d'instància. |
shown.bs.offcanvas |
Aquest esdeveniment s'activa quan un element fora del llenç s'ha fet visible per a l'usuari (esperarà que finalitzin les transicions CSS). |
const myOffcanvas = document.getElementById('myOffcanvas')
myOffcanvas.addEventListener('hidden.bs.offcanvas', event => {
// do something...
})