Listes déroulantes
Basculez les superpositions contextuelles pour afficher des listes de liens et plus encore avec le plugin déroulant Bootstrap.
Aperçu
Les listes déroulantes sont des superpositions contextuelles basculables pour afficher des listes de liens et plus encore. Ils sont rendus interactifs avec le plugin JavaScript déroulant Bootstrap inclus. Ils sont activés en cliquant, pas en survolant ; il s'agit d'une décision de conception intentionnelle .
Les listes déroulantes sont construites sur une bibliothèque tierce, Popper , qui fournit un positionnement dynamique et une détection de la fenêtre d'affichage. Assurez-vous d'inclure popper.min.js avant le JavaScript de Bootstrap ou utilisez bootstrap.bundle.min.js
/ bootstrap.bundle.js
qui contient Popper. Popper n'est pas utilisé pour positionner les listes déroulantes dans les barres de navigation, car le positionnement dynamique n'est pas requis.
Si vous construisez notre JavaScript à partir de la source, cela nécessiteutil.js
.
Accessibilité
La norme WAI ARIA définit un role="menu"
widget réel , mais cela est spécifique aux menus de type application qui déclenchent des actions ou des fonctions. Les menus ARIA ne peuvent contenir que des éléments de menu, des éléments de menu de cases à cocher, des éléments de menu de boutons radio, des groupes de boutons radio et des sous-menus.
Les listes déroulantes de Bootstrap, en revanche, sont conçues pour être génériques et applicables à une variété de situations et de structures de balisage. Par exemple, il est possible de créer des listes déroulantes contenant des entrées supplémentaires et des contrôles de formulaire, tels que des champs de recherche ou des formulaires de connexion. Pour cette raison, Bootstrap n'attend (ni n'ajoute automatiquement) aucun des attributs role
et requis pour les vrais menus ARIA . Les auteurs devront inclure eux-mêmes ces attributs plus spécifiques.aria-
Cependant, Bootstrap ajoute une prise en charge intégrée pour la plupart des interactions de menu clavier standard, telles que la possibilité de parcourir des .dropdown-item
éléments individuels à l'aide des touches du curseur et de fermer le menu avec la ESCtouche .
Exemples
Enveloppez la bascule de la liste déroulante (votre bouton ou lien) et le menu déroulant dans .dropdown
, ou un autre élément qui déclare position: relative;
. Les listes déroulantes peuvent être déclenchées à partir de <a>
ou d' <button>
éléments pour mieux répondre à vos besoins potentiels.
Bouton unique
Tout single .btn
peut être transformé en une bascule déroulante avec quelques modifications de balisage. Voici comment vous pouvez les utiliser avec l'un ou l'autre des <button>
éléments :
<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>
Et avec <a>
des éléments :
<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 meilleure partie est que vous pouvez également le faire avec n'importe quelle variante de bouton :
<!-- 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>
Bouton Fractionner
De même, créez des listes déroulantes de boutons divisés avec pratiquement le même balisage que les listes déroulantes à un seul bouton, mais avec l'ajout d' .dropdown-toggle-split
un espacement approprié autour du curseur déroulant.
Nous utilisons cette classe supplémentaire pour réduire l'horizontale padding
de chaque côté du caret de 25 % et supprimer ce margin-left
qui est ajouté pour les listes déroulantes de boutons régulières. Ces modifications supplémentaires maintiennent le caret centré dans le bouton partagé et fournissent une zone de frappe de taille plus appropriée à côté du bouton principal.
<!-- 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>
Dimensionnement
Les listes déroulantes de boutons fonctionnent avec des boutons de toutes tailles, y compris les boutons déroulants par défaut et divisés.
<!-- 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>
les directions
Déposer jusqu'à
Déclenchez des menus déroulants au-dessus des éléments en ajoutant .dropup
à l'élément parent.
<!-- 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
Déclenchez des menus déroulants à droite des éléments en ajoutant .dropright
à l'élément parent.
<!-- 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
Déclenchez des menus déroulants à gauche des éléments en ajoutant .dropleft
à l'élément parent.
<!-- 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>
Éléments de menu
Historiquement, le contenu du menu déroulant devait être des liens, mais ce n'est plus le cas avec la v4. Maintenant, vous pouvez éventuellement utiliser des <button>
éléments dans vos listes déroulantes au lieu de simplement <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>
Vous pouvez également créer des éléments déroulants non interactifs avec .dropdown-item-text
. N'hésitez pas à styliser davantage avec des utilitaires CSS ou de texte personnalisés.
<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>
Actif
Ajoutez .active
aux éléments dans la liste déroulante pour les définir comme actifs .
<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>
Handicapé
Ajoutez .disabled
des éléments dans la liste déroulante pour les définir comme désactivés .
<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>
Alignement des menus
Par défaut, un menu déroulant est automatiquement positionné à 100 % du haut et le long du côté gauche de son parent. Ajouter .dropdown-menu-right
à a .dropdown-menu
pour aligner à droite le menu déroulant.
<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>
Alignement réactif
Si vous souhaitez utiliser l'alignement réactif, désactivez le positionnement dynamique en ajoutant l' data-display="static"
attribut et utilisez les classes de variantes réactives.
Pour aligner à droite le menu déroulant avec le point d'arrêt donné ou plus, ajoutez .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>
Pour aligner à gauche le menu déroulant avec le point d'arrêt donné ou plus, ajoutez .dropdown-menu-right
et .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>
Notez que vous n'avez pas besoin d'ajouter un data-display="static"
attribut aux boutons déroulants dans les barres de navigation, puisque Popper n'est pas utilisé dans les barres de navigation.
Contenu des menus
En-têtes
Ajoutez un en-tête pour étiqueter les sections d'actions dans n'importe quel menu déroulant.
<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>
Diviseurs
Séparez les groupes d'éléments de menu associés avec un séparateur.
<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>
Texte
Placez n'importe quel texte de forme libre dans un menu déroulant avec du texte et utilisez des utilitaires d'espacement . Notez que vous aurez probablement besoin de styles de dimensionnement supplémentaires pour limiter la largeur du 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>
Formes
Placez un formulaire dans un menu déroulant ou transformez-le en menu déroulant et utilisez des utilitaires de marge ou de remplissage pour lui donner l'espace négatif dont vous avez besoin.
<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>
Options de liste déroulante
Utilisez data-offset
ou data-reference
pour modifier l'emplacement de la liste déroulante.
<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>
Usage
Via les attributs de données ou JavaScript, le plugin déroulant bascule le contenu caché (menus déroulants) en basculant la .show
classe sur le parent .dropdown-menu
. L' data-toggle="dropdown"
attribut est utilisé pour fermer les menus déroulants au niveau de l'application, c'est donc une bonne idée de toujours l'utiliser.
$.noop
)
mouseover
aux enfants immédiats de l'
<body>
élément. Ce piratage, certes laid, est nécessaire pour contourner une
bizarrerie dans la délégation d'événements d'iOS , ce qui empêcherait autrement un appui n'importe où en dehors de la liste déroulante de déclencher le code qui ferme la liste déroulante. Une fois la liste déroulante fermée, ces
mouseover
gestionnaires vides supplémentaires sont supprimés.
Via les attributs de données
Ajouter data-toggle="dropdown"
à un lien ou à un bouton pour basculer vers une liste déroulante.
<div class="dropdown">
<button type="button" data-toggle="dropdown" aria-expanded="false">
Dropdown trigger
</button>
<div class="dropdown-menu">
...
</div>
</div>
Via Javascript
Appelez les listes déroulantes via JavaScript :
$('.dropdown-toggle').dropdown()
data-toggle="dropdown"
encore nécessaire
Que vous appeliez votre liste déroulante via JavaScript ou que vous utilisiez à la place l'API de données, data-toggle="dropdown"
il doit toujours être présent sur l'élément déclencheur de la liste déroulante.
Choix
Les options peuvent être transmises via des attributs de données ou JavaScript. Pour les attributs de données, ajoutez le nom de l'option à data-
, comme dans data-offset=""
.
Nom | Taper | Défaut | La description |
---|---|---|---|
décalage | nombre | chaîne | fonction | 0 | Décalage de la liste déroulante par rapport à sa cible. Lorsqu'une fonction est utilisée pour déterminer le décalage, elle est appelée avec un objet contenant les données de décalage comme premier argument. La fonction doit retourner un objet avec la même structure. Le nœud DOM de l'élément déclencheur est passé comme second argument. Pour plus d'informations, reportez-vous à la documentation de décalage de Popper . |
retourner | booléen | vrai | Autoriser Dropdown à basculer en cas de chevauchement sur l'élément de référence. Pour plus d'informations, reportez-vous aux flip docs de Popper . |
frontière | chaîne | élément | 'scrollParent' | Limite de contrainte de débordement du menu déroulant. Accepte les valeurs de 'viewport' , 'window' , 'scrollParent' ou une référence HTMLElement (JavaScript uniquement). Pour plus d'informations, reportez-vous à la documentation preventOverflow de Popper . |
référence | chaîne | élément | 'basculer' | Elément de référence du menu déroulant. Accepte les valeurs de 'toggle' , 'parent' ou une référence HTMLElement. Pour plus d'informations, reportez-vous à la documentation referenceObject de Popper . |
affichage | chaîne de caractères | 'dynamique' | Par défaut, nous utilisons Popper pour le positionnement dynamique. Désactivez-le avec static . |
popperConfig | nul | objet | nul | Pour modifier la configuration Popper par défaut de Bootstrap, consultez la configuration de Popper |
Notez que lorsque boundary
est défini sur une valeur autre que 'scrollParent'
, le style position: static
est appliqué au .dropdown
conteneur.
Méthodes
Méthode | La description |
---|---|
$().dropdown('toggle') |
Bascule le menu déroulant d'une barre de navigation donnée ou d'une navigation par onglets. |
$().dropdown('show') |
Affiche le menu déroulant d'une barre de navigation donnée ou d'une navigation par onglets. |
$().dropdown('hide') |
Masque le menu déroulant d'une barre de navigation donnée ou d'une navigation par onglets. |
$().dropdown('update') |
Met à jour la position de la liste déroulante d'un élément. |
$().dropdown('dispose') |
Détruit la liste déroulante d'un élément. |
Événements
Tous les événements de liste déroulante sont déclenchés sur l' .dropdown-menu
élément parent de et ont une relatedTarget
propriété, dont la valeur est l'élément d'ancrage basculant. hide.bs.dropdown
et hidden.bs.dropdown
les événements ont une clickEvent
propriété (uniquement lorsque le type d'événement d'origine est click
) qui contient un objet événement pour l'événement click.
Événement | La description |
---|---|
show.bs.dropdown |
Cet événement se déclenche immédiatement lorsque la méthode d'instance show est appelée. |
shown.bs.dropdown |
Cet événement est déclenché lorsque la liste déroulante a été rendue visible à l'utilisateur (attendra que les transitions CSS se terminent). |
hide.bs.dropdown |
Cet événement est déclenché immédiatement lorsque la méthode d'instance de masquage a été appelée. |
hidden.bs.dropdown |
Cet événement est déclenché lorsque la liste déroulante a fini d'être masquée pour l'utilisateur (attendra que les transitions CSS se terminent). |
$('#myDropdown').on('show.bs.dropdown', function () {
// do something...
})