Dropdown
Attiva/disattiva le sovrapposizioni contestuali per la visualizzazione di elenchi di collegamenti e altro con il plug-in a discesa Bootstrap.
Panoramica
I menu a discesa sono sovrapposizioni contestuali attivabili per visualizzare elenchi di collegamenti e altro. Sono resi interattivi con il plug-in JavaScript a discesa Bootstrap incluso. Vengono attivati facendo clic, non passando con il mouse; questa è una decisione progettuale intenzionale .
I menu a discesa sono basati su una libreria di terze parti, Popper , che fornisce posizionamento dinamico e rilevamento del viewport. Assicurati di includere popper.min.js prima di JavaScript di Bootstrap o usa bootstrap.bundle.min.js
/ bootstrap.bundle.js
che contiene Popper. Popper non viene utilizzato per posizionare i menu a discesa nelle barre di navigazione, anche se non è richiesto il posizionamento dinamico.
Se stai creando il nostro JavaScript dal sorgente, richiedeutil.js
.
Accessibilità
Lo standard WAI ARIA definisce un vero e proprio role="menu"
widget , ma questo è specifico per i menu simili a applicazioni che attivano azioni o funzioni. I menu ARIA possono contenere solo voci di menu, voci di menu checkbox, voci di menu di pulsanti di opzione, gruppi di pulsanti di opzione e sottomenu.
I menu a discesa di Bootstrap, d'altra parte, sono progettati per essere generici e applicabili a una varietà di situazioni e strutture di markup. Ad esempio, è possibile creare menu a discesa che contengono input aggiuntivi e controlli dei moduli, come campi di ricerca o moduli di accesso. Per questo motivo, Bootstrap non si aspetta (né aggiunge automaticamente) nessuno degli attributi role
e richiesti per i veri menu ARIA . Gli autori dovranno includere essi stessi questi attributi più specifici.aria-
Tuttavia, Bootstrap aggiunge il supporto integrato per la maggior parte delle interazioni standard del menu della tastiera, come la possibilità di spostarsi tra i singoli .dropdown-item
elementi utilizzando i tasti cursore e chiudere il menu con il ESCtasto.
Esempi
Avvolgi l'interruttore del menu a discesa (il tuo pulsante o collegamento) e il menu a discesa all'interno di .dropdown
, o un altro elemento che dichiara position: relative;
. I menu a discesa possono essere attivati da <a>
o <button>
elementi per soddisfare meglio le tue potenziali esigenze.
Pulsante singolo
Qualsiasi singolo .btn
può essere trasformato in un interruttore a discesa con alcune modifiche al markup. Ecco come puoi metterli in funzione con entrambi <button>
gli elementi:
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown button
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
E con <a>
elementi:
<div class="dropdown">
<a class="btn btn-secondary dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-expanded="false">
Dropdown link
</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
La parte migliore è che puoi farlo anche con qualsiasi variante di pulsante:
<!-- Example single danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Action
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
Pulsante Dividi
Allo stesso modo, crea menu a discesa dei pulsanti divisi con praticamente lo stesso markup dei menu a discesa dei pulsanti singoli, ma con l'aggiunta di .dropdown-toggle-split
una spaziatura adeguata attorno al cursore a discesa.
Usiamo questa classe extra per ridurre l'orizzontale padding
su entrambi i lati del cursore del 25% e rimuovere margin-left
quello aggiunto per i normali menu a discesa dei pulsanti. Queste modifiche extra mantengono il cursore centrato nel pulsante di divisione e forniscono un'area di successo di dimensioni più appropriate accanto al pulsante principale.
<!-- Example split danger button -->
<div class="btn-group">
<button type="button" class="btn btn-danger">Action</button>
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
Dimensionamento
I menu a discesa dei pulsanti funzionano con pulsanti di tutte le dimensioni, inclusi i pulsanti a discesa predefiniti e divisi.
<!-- Large button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Large button
</button>
<div class="dropdown-menu">
...
</div>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-lg" type="button">
Large split button
</button>
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
...
</div>
</div>
<!-- Small button groups (default and split) -->
<div class="btn-group">
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Small button
</button>
<div class="dropdown-menu">
...
</div>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-sm" type="button">
Small split button
</button>
<button type="button" class="btn btn-sm btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
...
</div>
</div>
Indicazioni
Ritiro
Attiva i menu a discesa sopra gli elementi aggiungendoli .dropup
all'elemento padre.
<!-- Default dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropup
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<!-- Split dropup button -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary">
Split dropup
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
Dropright
Attiva i menu a discesa a destra degli elementi aggiungendoli .dropright
all'elemento padre.
<!-- Default dropright button -->
<div class="btn-group dropright">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropright
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<!-- Split dropright button -->
<div class="btn-group dropright">
<button type="button" class="btn btn-secondary">
Split dropright
</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropright</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
Dropleft
Attiva i menu a discesa a sinistra degli elementi aggiungendoli .dropleft
all'elemento padre.
<!-- Default dropleft button -->
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Dropleft
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<!-- Split dropleft button -->
<div class="btn-group">
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false">
<span class="sr-only">Toggle Dropleft</span>
</button>
<div class="dropdown-menu">
<!-- Dropdown menu links -->
</div>
</div>
<button type="button" class="btn btn-secondary">
Split dropleft
</button>
</div>
Voci del menu
Storicamente i contenuti del menu a discesa dovevano essere collegamenti, ma non è più il caso della v4. Ora puoi opzionalmente utilizzare <button>
elementi nei tuoi menu a discesa anziché solo <a>
s.
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<div class="dropdown-menu">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Puoi anche creare elementi a discesa non interattivi con .dropdown-item-text
. Sentiti libero di personalizzare ulteriormente lo stile con CSS o utilità di testo personalizzati.
<div class="dropdown-menu">
<span class="dropdown-item-text">Dropdown item text</span>
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
Attivo
Aggiungi .active
agli elementi nel menu a discesa per impostarli come attivi .
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Regular link</a>
<a class="dropdown-item active" href="#">Active link</a>
<a class="dropdown-item" href="#">Another link</a>
</div>
Disabilitato
Aggiungi .disabled
agli elementi nel menu a discesa per impostarli come disabilitati .
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Regular link</a>
<a class="dropdown-item disabled">Disabled link</a>
<a class="dropdown-item" href="#">Another link</a>
</div>
Allineamento menu
Per impostazione predefinita, un menu a discesa viene posizionato automaticamente al 100% dall'alto e lungo il lato sinistro del suo genitore. Aggiungi .dropdown-menu-right
a a .dropdown-menu
per allineare a destra il menu a discesa.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
Right-aligned menu
</button>
<div class="dropdown-menu dropdown-menu-right">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Allineamento reattivo
Se desideri utilizzare l'allineamento reattivo, disabilita il posizionamento dinamico aggiungendo l' data-display="static"
attributo e utilizza le classi di variazione reattive.
Per allineare a destra il menu a discesa con il punto di interruzione specificato o più grande, aggiungi .dropdown-menu{-sm|-md|-lg|-xl}-right
.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-expanded="false">
Left-aligned but right aligned when large screen
</button>
<div class="dropdown-menu dropdown-menu-lg-right">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Per allineare a sinistra il menu a discesa con il punto di interruzione specificato o più grande, aggiungi .dropdown-menu-right
e .dropdown-menu{-sm|-md|-lg|-xl}-left
.
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" data-display="static" aria-expanded="false">
Right-aligned but left aligned when large screen
</button>
<div class="dropdown-menu dropdown-menu-right dropdown-menu-lg-left">
<button class="dropdown-item" type="button">Action</button>
<button class="dropdown-item" type="button">Another action</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Nota che non è necessario aggiungere un data-display="static"
attributo ai pulsanti a discesa nelle barre di navigazione, poiché Popper non viene utilizzato nelle barre di navigazione.
Contenuto del menu
Intestazioni
Aggiungi un'intestazione per etichettare sezioni di azioni in qualsiasi menu a discesa.
<div class="dropdown-menu">
<h6 class="dropdown-header">Dropdown header</h6>
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
</div>
Divisori
Separare i gruppi di voci di menu correlate con un divisore.
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
Testo
Posiziona qualsiasi testo a mano libera all'interno di un menu a discesa con testo e utilizza le utilità di spaziatura . Tieni presente che probabilmente avrai bisogno di stili di ridimensionamento aggiuntivi per limitare la larghezza del menu.
<div class="dropdown-menu p-4 text-muted" style="max-width: 200px;">
<p>
Some example text that's free-flowing within the dropdown menu.
</p>
<p class="mb-0">
And this is more example text.
</p>
</div>
Le forme
Inserisci un modulo all'interno di un menu a discesa o trasformalo in un menu a discesa e utilizza le utilità di margine o riempimento per dargli lo spazio negativo necessario.
<div class="dropdown-menu">
<form class="px-4 py-3">
<div class="form-group">
<label for="exampleDropdownFormEmail1">Email address</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail1" placeholder="[email protected]">
</div>
<div class="form-group">
<label for="exampleDropdownFormPassword1">Password</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Password">
</div>
<div class="form-group">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="dropdownCheck">
<label class="form-check-label" for="dropdownCheck">
Remember me
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">New around here? Sign up</a>
<a class="dropdown-item" href="#">Forgot password?</a>
</div>
<form class="dropdown-menu p-4">
<div class="form-group">
<label for="exampleDropdownFormEmail2">Email address</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail2" placeholder="[email protected]">
</div>
<div class="form-group">
<label for="exampleDropdownFormPassword2">Password</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword2" placeholder="Password">
</div>
<div class="form-group">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="dropdownCheck2">
<label class="form-check-label" for="dropdownCheck2">
Remember me
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
Opzioni a discesa
Utilizzare data-offset
o data-reference
per modificare la posizione del menu a discesa.
<div class="d-flex">
<div class="dropdown mr-1">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-expanded="false" data-offset="10,20">
Offset
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary">Reference</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-expanded="false" data-reference="parent">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Separated link</a>
</div>
</div>
</div>
Utilizzo
Tramite attributi di dati o JavaScript, il plug-in a discesa attiva o disattiva il contenuto nascosto (menu a discesa) attivando la .show
classe sul genitore .dropdown-menu
. L' data-toggle="dropdown"
attributo viene utilizzato per la chiusura dei menu a discesa a livello di applicazione, quindi è una buona idea utilizzarlo sempre.
$.noop
)
mouseover
ai figli immediati
<body>
dell'elemento. Questo hack certamente brutto è necessario per aggirare una
stranezza nella delega dell'evento di iOS , che altrimenti impedirebbe a un tocco in qualsiasi punto al di fuori del menu a discesa di attivare il codice che chiude il menu a discesa. Una volta chiuso il menu a discesa, questi
mouseover
gestori vuoti aggiuntivi vengono rimossi.
Tramite attributi di dati
Aggiungi data-toggle="dropdown"
a un link o un pulsante per attivare un menu a discesa.
<div class="dropdown">
<button type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown trigger
</button>
<div class="dropdown-menu">
...
</div>
</div>
Tramite JavaScript
Chiama i menu a discesa tramite JavaScript:
$('.dropdown-toggle').dropdown()
data-toggle="dropdown"
ancora richiesto
Indipendentemente dal fatto che chiami il menu a discesa tramite JavaScript o utilizzi invece data-api, data-toggle="dropdown"
è sempre necessario essere presente sull'elemento trigger del menu a discesa.
Opzioni
Le opzioni possono essere passate tramite attributi di dati o JavaScript. Per gli attributi dei dati, aggiungere il nome dell'opzione a data-
, come in data-offset=""
.
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
compensare | numero | stringa | funzione | 0 | Offset del menu a discesa rispetto al suo target. Quando una funzione viene utilizzata per determinare l'offset, viene chiamata con un oggetto contenente i dati dell'offset come primo argomento. La funzione deve restituire un oggetto con la stessa struttura. Il nodo DOM dell'elemento di attivazione viene passato come secondo argomento. Per ulteriori informazioni, fare riferimento ai documenti di offset di Popper . |
Flip | booleano | VERO | Consenti a Dropdown di capovolgersi in caso di sovrapposizione sull'elemento di riferimento. Per ulteriori informazioni, fare riferimento ai documenti flip di Popper . |
confine | stringa | elemento | 'scorri Genitore' | Limite del vincolo di overflow del menu a discesa. Accetta i valori di 'viewport' , 'window' , 'scrollParent' o un riferimento HTMLElement (solo JavaScript). Per ulteriori informazioni, fare riferimento ai documenti preventOverflow di Popper . |
riferimento | stringa | elemento | 'attiva' | Elemento di riferimento del menu a tendina. Accetta i valori di 'toggle' , 'parent' o un riferimento HTMLElement. Per ulteriori informazioni, fare riferimento ai documenti referenceObject di Popper . |
Schermo | corda | 'dinamico' | Per impostazione predefinita, utilizziamo Popper per il posizionamento dinamico. Disabilita questo con static . |
popperConfig | nullo | oggetto | nullo | Per modificare la configurazione di Popper predefinita di Bootstrap, vedere la configurazione di Popper |
Nota quando boundary
è impostato su un valore diverso da 'scrollParent'
, lo stile position: static
viene applicato al .dropdown
contenitore.
Metodi
Metodo | Descrizione |
---|---|
$().dropdown('toggle') |
Attiva o disattiva il menu a discesa di una determinata barra di navigazione o la navigazione a schede. |
$().dropdown('show') |
Mostra il menu a discesa di una determinata barra di navigazione o navigazione a schede. |
$().dropdown('hide') |
Nasconde il menu a discesa di una determinata barra di navigazione o navigazione a schede. |
$().dropdown('update') |
Aggiorna la posizione del menu a discesa di un elemento. |
$().dropdown('dispose') |
Distrugge il menu a discesa di un elemento. |
Eventi
Tutti gli eventi a discesa vengono attivati .dropdown-menu
sull'elemento padre di ' e hanno una relatedTarget
proprietà, il cui valore è l'elemento di ancoraggio commutante. hide.bs.dropdown
e hidden.bs.dropdown
gli eventi hanno una clickEvent
proprietà (solo quando il tipo di evento originale è click
) che contiene un oggetto evento per l'evento click.
Evento | Descrizione |
---|---|
show.bs.dropdown |
Questo evento viene attivato immediatamente quando viene chiamato il metodo show instance. |
shown.bs.dropdown |
Questo evento viene attivato quando il menu a discesa è stato reso visibile all'utente (attenderà il completamento delle transizioni CSS). |
hide.bs.dropdown |
Questo evento viene generato immediatamente quando viene chiamato il metodo dell'istanza hide. |
hidden.bs.dropdown |
Questo evento viene attivato quando il menu a discesa ha finito di essere nascosto all'utente (attenderà il completamento delle transizioni CSS). |
$('#myDropdown').on('show.bs.dropdown', function () {
// do something...
})