Off lenzo
Crea barras laterais ocultas no teu proxecto para navegar, carros da compra e moito máis con algunhas clases e o noso complemento de JavaScript.
Cómo funciona
Offcanvas é un compoñente da barra lateral que se pode alternar mediante JavaScript para que apareza dende o bordo esquerdo, dereito, superior ou inferior da ventana gráfica. Os botóns ou áncoras utilízanse como disparadores que se anexan a elementos específicos que alternas, e data
os atributos úsanse para invocar o noso JavaScript.
- Offcanvas comparte parte do mesmo código JavaScript que os modais. Conceptualmente, son bastante similares, pero son complementos separados.
- Do mesmo xeito, algunhas variables de orixe Sass para os estilos e dimensións de offcanvas herdanse das variables do modal.
- Cando se mostra, offcanvas inclúe un fondo predeterminado no que se pode facer clic para ocultar o offcanvas.
- Do mesmo xeito que os modais, só se pode mostrar un offcanvas á vez.
Aviso! Dado como CSS manexa as animacións, non pode usar margin
nin translate
nun .offcanvas
elemento. En vez diso, use a clase como un elemento de envoltura independente.
prefers-reduced-motion
consulta multimedia. Consulta a
sección de movemento reducido da nosa documentación de accesibilidade .
Exemplos
Compoñentes offcanvas
A continuación móstrase un exemplo fóra do lenzo que se mostra por defecto (a través .show
de on .offcanvas
). Offcanvas inclúe soporte para un encabezado cun botón de peche e unha clase de corpo opcional para algúns padding
. Suxerímoslle que inclúas cabeceiras fóra do lenzo con accións de exclusión sempre que sexa posible ou proporciones unha acción de exclusión explícita.
Off lenzo
<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 directo
Use os botóns de abaixo para mostrar e ocultar un elemento fóra do lenzo mediante JavaScript que alterna a .show
clase a un elemento coa .offcanvas
clase.
.offcanvas
oculta o contido (predeterminado).offcanvas.show
mostra o contido
Podes usar unha ligazón co href
atributo ou un botón co data-bs-target
atributo. En ambos os casos, data-bs-toggle="offcanvas"
é necesario.
Off lenzo
<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>
Desprazamento corporal
O desprazamento do <body>
elemento está desactivado cando un fóra do lenzo e o seu fondo son visibles. Use o data-bs-scroll
atributo para activar o <body>
desprazamento.
Off lenzo con desprazamento corporal
Proba a desprazarte polo resto da páxina para ver esta opción en acción.
<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>
Desprazamento corporal e pano de fondo
Tamén podes activar <body>
o desprazamento cun fondo visible.
Fondo con desprazamento
Proba a desprazarte polo resto da páxina para ver esta opción en acción.
<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>
Fondo estático
Cando o fondo está configurado como estático, o offcanvas non se pechará ao facer clic fóra del.
Off lenzo
<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>
Off lenzo escuro
Engadido na v5.2.0Cambia a aparencia dos lenzos con utilidades para adaptalos mellor a diferentes contextos, como as barras de navegación escuras. Aquí engadimos .text-bg-dark
ao .offcanvas
e .btn-close-white
ao .btn-close
para un estilo axeitado cun lenzo escuro. Se tes menús despregables dentro, considera engadir tamén .dropdown-menu-dark
a .dropdown-menu
.
Off lenzo
Coloca aquí contido fóra do lenzo.
<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>
Sensible
Engadido na v5.2.0As clases sensibles offcanvas ocultan contido fóra da ventana gráfica desde un punto de interrupción especificado e cara abaixo. Por riba dese punto de interrupción, os contidos dentro comportaranse como de costume. Por exemplo, .offcanvas-lg
oculta o contido nun lenzo debaixo do lg
punto de interrupción, pero mostra o contido enriba do punto de lg
interrupción.
Offcanvas sensible
Este é contido dentro dun .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>
Están dispoñibles clases offcanvas responsivas para cada punto de interrupción.
.offcanvas
.offcanvas-sm
.offcanvas-md
.offcanvas-lg
.offcanvas-xl
.offcanvas-xxl
Colocación
Non hai unha colocación predeterminada para os compoñentes offcanvas, polo que debes engadir unha das clases de modificadores a continuación.
.offcanvas-start
coloca fóra do lenzo á esquerda da ventana gráfica (mostrada arriba).offcanvas-end
coloca fóra do lenzo á dereita da ventana gráfica.offcanvas-top
coloca fóra do lenzo na parte superior da ventana gráfica.offcanvas-bottom
coloca fóra do lenzo na parte inferior da ventana gráfica
Proba os exemplos superior, dereito e inferior que aparecen a continuación.
Parte superior 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>
Off canvas dereita
<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>
Fondo fóra 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>
Accesibilidade
Dado que o panel offcanvas é conceptualmente un diálogo modal, asegúrate de engadir aria-labelledby="..."
, facendo referencia ao título offcanvas, a .offcanvas
. Teña en conta que non precisa engadir role="dialog"
xa que xa o engadimos mediante JavaScript.
CSS
Variables
Engadido na v5.2.0Como parte do enfoque de variables CSS en evolución de Bootstrap, offcanvas agora usa variables CSS locais activadas .offcanvas
para mellorar a personalización en tempo real. Os valores para as variables CSS establécense a través de Sass, polo que a personalización de Sass tamén se admite.
--#{$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;
Uso
O complemento offcanvas utiliza algunhas clases e atributos para xestionar o traballo pesado:
.offcanvas
oculta o contido.offcanvas.show
mostra o contido.offcanvas-start
esconde o off lenzo da esquerda.offcanvas-end
esconde o off lenzo á dereita.offcanvas-top
esconde o off lenzo na parte superior.offcanvas-bottom
esconde o off lenzo na parte inferior
Engade un botón de exclusión co data-bs-dismiss="offcanvas"
atributo, que activa a funcionalidade de JavaScript. Asegúrate de usar o <button>
elemento con el para un comportamento correcto en todos os dispositivos.
A través de atributos de datos
Alterna
Engade data-bs-toggle="offcanvas"
e a data-bs-target
ou href
ao elemento para asignar automaticamente o control dun elemento fóra do lenzo. O data-bs-target
atributo acepta un selector CSS para aplicar o offcanvas. Asegúrate de engadir a clase offcanvas
ao elemento offcanvas. Se queres que se abra por defecto, engade a clase adicional show
.
Descartar
A destitución pódese conseguir co data
atributo nun botón dentro do offcanvas como se demostra a continuación:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
ou nun botón fóra do lenzo usando o data-bs-target
como se mostra a continuación:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#my-offcanvas" aria-label="Close"></button>
Vía JavaScript
Habilitar manualmente con:
const offcanvasElementList = document.querySelectorAll('.offcanvas')
const offcanvasList = [...offcanvasElementList].map(offcanvasEl => new bootstrap.Offcanvas(offcanvasEl))
Opcións
Como as opcións se poden pasar a través de atributos de datos ou JavaScript, pode engadir un nome de opción a data-bs-
, como en data-bs-animation="{value}"
. Asegúrate de cambiar o tipo de maiúsculas e minúsculas do nome da opción de " camelCase " a " kebab-case " ao pasar as opcións a través dos atributos de datos. Por exemplo, use data-bs-custom-class="beautifier"
en lugar de data-bs-customClass="beautifier"
.
A partir de Bootstrap 5.2.0, todos os compoñentes admiten un atributo de datos reservados experimentaisdata-bs-config
que pode albergar unha configuración sinxela de compoñentes como cadea JSON. Cando un elemento ten data-bs-config='{"delay":0, "title":123}'
e data-bs-title="456"
atributos, o title
valor final será 456
e os atributos de datos separados anularán os valores indicados en data-bs-config
. Ademais, os atributos de datos existentes poden albergar valores JSON como data-bs-delay='{"show":0,"hide":150}'
.
Nome | Tipo | Por defecto | Descrición |
---|---|---|---|
backdrop |
booleano ou a cadeastatic |
true |
Aplique un fondo ao corpo mentres está aberto o offcanvas. Alternativamente, especifica static un fondo que non pecha o lenzo cando se fai clic. |
keyboard |
booleano | true |
Pecha o offcanvas cando se preme a tecla Esc. |
scroll |
booleano | false |
Permitir o desprazamento do corpo mentres está aberto fóra do lenzo. |
Métodos
Métodos asíncronos e transicións
Todos os métodos da API son asíncronos e inician unha transición . Volven ao interlocutor en canto se inicia a transición pero antes de que remate . Ademais, ignorarase unha chamada de método nun compoñente en transición .
Consulte a nosa documentación de JavaScript para obter máis información .
Activa o teu contido como elemento fóra do lenzo. Acepta opcións opcionais object
.
Podes crear unha instancia offcanvas co construtor, por exemplo:
const bsOffcanvas = new bootstrap.Offcanvas('#myOffcanvas')
Método | Descrición |
---|---|
getInstance |
Método estático que che permite obter a instancia offcanvas asociada a un elemento DOM. |
getOrCreateInstance |
Método estático que che permite obter a instancia offcanvas asociada a un elemento DOM ou crear unha nova no caso de que non se inicializou. |
hide |
Oculta un elemento fóra do lenzo. Volve ao interlocutor antes de que o elemento offcanvas fose realmente oculto (é dicir, antes de hidden.bs.offcanvas que ocorra o evento). |
show |
Mostra un elemento fóra do lenzo. Volve á persoa que chama antes de que se amosara realmente o elemento offcanvas (é dicir, antes de shown.bs.offcanvas que ocorra o evento). |
toggle |
Alterna un elemento fóra do lenzo para mostrar ou ocultar. Regresa ao interlocutor antes de que o elemento offcanvas fose realmente mostrado ou escondido (é dicir, antes de que se produza o evento shown.bs.offcanvas ou ).hidden.bs.offcanvas |
Eventos
A clase offcanvas de Bootstrap expón algúns eventos para conectarse á funcionalidade offcanvas.
Tipo de evento | Descrición |
---|---|
hide.bs.offcanvas |
Este evento desenvólvese inmediatamente cando hide se chamou ao método. |
hidden.bs.offcanvas |
Este evento desenvólvese cando se ocultou ao usuario un elemento offcanvas (esperará a que se completen as transicións CSS). |
hidePrevented.bs.offcanvas |
Este evento desenvólvese cando se mostra o offcanvas, o seu telón de fondo static e faise un clic fóra do offcanvas. O evento tamén se dispara cando se preme a tecla de escape e a keyboard opción está configurada como false . |
show.bs.offcanvas |
Este evento desenvólvese inmediatamente cando show se chama ao método de instancia. |
shown.bs.offcanvas |
Este evento desenvólvese cando un elemento fóra do lenzo se fixo visible para o usuario (esperará a que se completen as transicións CSS). |
const myOffcanvas = document.getElementById('myOffcanvas')
myOffcanvas.addEventListener('hidden.bs.offcanvas', event => {
// do something...
})