Fuori tela
Crea barre laterali nascoste nel tuo progetto per la navigazione, i carrelli della spesa e altro ancora con alcune classi e il nostro plug-in JavaScript.
Come funziona
Offcanvas è un componente della barra laterale che può essere attivato tramite JavaScript in modo che appaia dal bordo sinistro, destro, superiore o inferiore della finestra. I pulsanti o gli ancoraggi vengono utilizzati come trigger collegati a elementi specifici che si attivano e data
gli attributi vengono utilizzati per richiamare il nostro JavaScript.
- Offcanvas condivide parte dello stesso codice JavaScript di modali. Concettualmente, sono abbastanza simili, ma sono plugin separati.
- Allo stesso modo, alcune variabili Sass di origine per gli stili e le dimensioni di offcanvas vengono ereditate dalle variabili del modale.
- Quando viene mostrato, offcanvas include uno sfondo predefinito su cui è possibile fare clic per nascondere il offcanvas.
- Simile alle modali, è possibile mostrare solo una tela alla volta.
Dritta! Dato il modo in cui CSS gestisce le animazioni, non puoi usare margin
o translate
su un .offcanvas
elemento. Utilizzare invece la classe come elemento di avvolgimento indipendente.
prefers-reduced-motion
media query. Vedi la
sezione movimento ridotto della nostra documentazione sull'accessibilità .
Esempi
Componenti fuori tela
Di seguito è riportato un esempio offcanvas che viene mostrato per impostazione predefinita (tramite .show
on .offcanvas
). Offcanvas include il supporto per un'intestazione con un pulsante di chiusura e una classe body opzionale per alcuni iniziali padding
. Ti suggeriamo di includere le intestazioni offcanvas con azioni di eliminazione quando possibile o di fornire un'azione di eliminazione esplicita.
Fuori tela
<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>
Dimostrazione dal vivo
Usa i pulsanti sottostanti per mostrare e nascondere un elemento offcanvas tramite JavaScript che alterna la .show
classe su un elemento con la .offcanvas
classe.
.offcanvas
nasconde il contenuto (predefinito).offcanvas.show
mostra il contenuto
È possibile utilizzare un collegamento con l' href
attributo o un pulsante con l' data-bs-target
attributo. In entrambi i casi data-bs-toggle="offcanvas"
è richiesto.
Fuori tela
<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>
Scorrimento del corpo
Lo scorrimento <body>
dell'elemento è disabilitato quando sono visibili una tela e il relativo sfondo. Utilizzare l' data-bs-scroll
attributo per abilitare lo <body>
scorrimento.
Fuori tela con scorrimento del corpo
Prova a scorrere il resto della pagina per vedere questa opzione in azione.
<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>
Scorrimento del corpo e sfondo
Puoi anche abilitare lo <body>
scorrimento con uno sfondo visibile.
Sfondo con scorrimento
Prova a scorrere il resto della pagina per vedere questa opzione in azione.
<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>
Sfondo statico
Quando lo sfondo è impostato su statico, la tela non si chiude quando si fa clic al di fuori di essa.
Fuori tela
<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>
Tela scura
Aggiunto nella v5.2.0Modifica l'aspetto dei telai esterni con le utilità per adattarli meglio a contesti diversi come le barre di navigazione scure. Qui aggiungiamo .text-bg-dark
a .offcanvas
e .btn-close-white
per .btn-close
uno styling corretto con una tela di canapa scura. Se hai dei menu a discesa all'interno, considera anche l'aggiunta .dropdown-menu-dark
a .dropdown-menu
.
Fuori tela
Inserisci qui i contenuti fuori tela.
<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>
reattivo
Aggiunto nella v5.2.0Le classi offcanvas reattive nascondono il contenuto all'esterno della finestra da un punto di interruzione specificato e verso il basso. Al di sopra di tale punto di interruzione, i contenuti all'interno si comporteranno come al solito. Ad esempio, .offcanvas-lg
nasconde il contenuto in un'area secondaria al di sotto del punto di lg
interruzione, ma mostra il contenuto al di sopra del punto di lg
interruzione.
Fuori tela reattivo
Questo è contenuto all'interno di 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>
Le classi offcanvas reattive sono disponibili per ogni punto di interruzione.
.offcanvas
.offcanvas-sm
.offcanvas-md
.offcanvas-lg
.offcanvas-xl
.offcanvas-xxl
Posizionamento
Non esiste un posizionamento predefinito per i componenti fuori tela, quindi devi aggiungere una delle classi di modificatori seguenti.
.offcanvas-start
posiziona fuori tela a sinistra del viewport (mostrato sopra).offcanvas-end
posiziona fuori tela a destra del viewport.offcanvas-top
posiziona fuori tela nella parte superiore del viewport.offcanvas-bottom
posiziona fuori tela nella parte inferiore della finestra
Prova gli esempi in alto, a destra e in basso di seguito.
Parte superiore in tela
<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>
Fuori tela a destra
<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 in tela
<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>
Accessibilità
Poiché il pannello fuori tela è concettualmente una finestra di dialogo modale, assicurati di aggiungere aria-labelledby="..."
, facendo riferimento al titolo fuori tela, a .offcanvas
. Nota che non è necessario aggiungere role="dialog"
poiché lo aggiungiamo già tramite JavaScript.
CSS
Variabili
Aggiunto nella v5.2.0Come parte dell'approccio in evoluzione delle variabili CSS di Bootstrap, offcanvas ora utilizza le variabili CSS locali .offcanvas
per una migliore personalizzazione in tempo reale. I valori per le variabili CSS vengono impostati tramite Sass, quindi anche la personalizzazione di Sass è ancora supportata.
--#{$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};
variabili Sas
$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;
Utilizzo
Il plug-in offcanvas utilizza alcune classi e attributi per gestire il sollevamento di carichi pesanti:
.offcanvas
nasconde il contenuto.offcanvas.show
mostra il contenuto.offcanvas-start
nasconde la tela a sinistra.offcanvas-end
nasconde il fuori tela a destra.offcanvas-top
nasconde la tela sulla parte superiore.offcanvas-bottom
nasconde la tela sul fondo
Aggiungi un pulsante Ignora con l' data-bs-dismiss="offcanvas"
attributo, che attiva la funzionalità JavaScript. Assicurati di utilizzare l' <button>
elemento con esso per un comportamento corretto su tutti i dispositivi.
Tramite attributi di dati
Attiva/disattiva
Aggiungi data-bs-toggle="offcanvas"
e a data-bs-target
o href
all'elemento per assegnare automaticamente il controllo di un elemento fuori tela. L' data-bs-target
attributo accetta un selettore CSS a cui applicare l'offcanvas. Assicurati di aggiungere la classe offcanvas
all'elemento offcanvas. Se desideri che sia aperto di default, aggiungi la classe aggiuntiva show
.
Congedare
Il licenziamento può essere ottenuto con l' data
attributo su un pulsante all'interno dell'offcanvas come mostrato di seguito:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
o su un pulsante fuori tela usando il data-bs-target
come mostrato di seguito:
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#my-offcanvas" aria-label="Close"></button>
Tramite JavaScript
Abilita manualmente con:
const offcanvasElementList = document.querySelectorAll('.offcanvas')
const offcanvasList = [...offcanvasElementList].map(offcanvasEl => new bootstrap.Offcanvas(offcanvasEl))
Opzioni
Poiché le opzioni possono essere passate tramite attributi di dati o JavaScript, puoi aggiungere un nome di opzione a data-bs-
, come in data-bs-animation="{value}"
. Assicurati di cambiare il tipo di caso del nome dell'opzione da " camelCase " a " kebab-case " quando passi le opzioni tramite attributi di dati. Ad esempio, utilizzare data-bs-custom-class="beautifier"
invece di data-bs-customClass="beautifier"
.
A partire da Bootstrap 5.2.0, tutti i componenti supportano un attributo di dati riservato sperimentaledata-bs-config
che può ospitare una semplice configurazione del componente come una stringa JSON. Quando un elemento ha data-bs-config='{"delay":0, "title":123}'
e data-bs-title="456"
attributi, il title
valore finale sarà 456
e gli attributi di dati separati sovrascriveranno i valori forniti su data-bs-config
. Inoltre, gli attributi di dati esistenti sono in grado di ospitare valori JSON come data-bs-delay='{"show":0,"hide":150}'
.
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
backdrop |
booleano o la stringastatic |
true |
Applicare uno sfondo sul corpo mentre la tela è aperta. In alternativa, specifica static uno sfondo che non chiude la tela quando viene fatto clic. |
keyboard |
booleano | true |
Chiude l'offcanvas quando viene premuto il tasto Esc. |
scroll |
booleano | false |
Consenti lo scorrimento del corpo mentre Offcanvas è aperto. |
Metodi
Metodi e transizioni asincrone
Tutti i metodi API sono asincroni e avviano una transizione . Ritornano al chiamante non appena la transizione è iniziata ma prima che termini . Inoltre, una chiamata al metodo su un componente in transizione verrà ignorata .
Consulta la nostra documentazione JavaScript per ulteriori informazioni .
Attiva il tuo contenuto come elemento offcanvas. Accetta opzioni opzionali object
.
Puoi creare un'istanza offcanvas con il costruttore, ad esempio:
const bsOffcanvas = new bootstrap.Offcanvas('#myOffcanvas')
Metodo | Descrizione |
---|---|
getInstance |
Metodo statico che consente di ottenere l'istanza offcanvas associata a un elemento DOM. |
getOrCreateInstance |
Metodo statico che ti consente di ottenere l'istanza offcanvas associata a un elemento DOM o di crearne una nuova nel caso non sia stata inizializzata. |
hide |
Nasconde un elemento fuori tela. Ritorna al chiamante prima che l'elemento offcanvas sia stato effettivamente nascosto (cioè prima hidden.bs.offcanvas che si verifichi l'evento). |
show |
Mostra un elemento fuori tela. Ritorna al chiamante prima che l'elemento offcanvas sia stato effettivamente mostrato (cioè prima shown.bs.offcanvas che si verifichi l'evento). |
toggle |
Attiva o disattiva un elemento fuori tela da mostrare o nascondere. Ritorna al chiamante prima che l'elemento offcanvas sia stato effettivamente mostrato o nascosto (cioè prima che si verifichi l' evento shown.bs.offcanvas o hidden.bs.offcanvas ). |
Eventi
La classe offcanvas di Bootstrap espone alcuni eventi per l'aggancio alla funzionalità offcanvas.
Tipo di evento | Descrizione |
---|---|
hide.bs.offcanvas |
Questo evento viene generato immediatamente quando il hide metodo è stato chiamato. |
hidden.bs.offcanvas |
Questo evento viene attivato quando un elemento offcanvas è stato nascosto all'utente (attenderà il completamento delle transizioni CSS). |
hidePrevented.bs.offcanvas |
Questo evento viene attivato quando viene mostrato il fuori tela, il suo sfondo è static e viene eseguito un clic all'esterno del fuori tela. L'evento viene attivato anche quando viene premuto il tasto Esc e l' keyboard opzione è impostata su false . |
show.bs.offcanvas |
Questo evento viene attivato immediatamente quando show viene chiamato il metodo dell'istanza. |
shown.bs.offcanvas |
Questo evento viene attivato quando un elemento offcanvas è stato reso visibile all'utente (attenderà il completamento delle transizioni CSS). |
const myOffcanvas = document.getElementById('myOffcanvas')
myOffcanvas.addEventListener('hidden.bs.offcanvas', event => {
// do something...
})