popovers
Documentation et exemples pour ajouter des popovers Bootstrap, comme ceux trouvés dans iOS, à n'importe quel élément de votre site.
Aperçu
Choses à savoir lors de l'utilisation du plugin popover :
- Les popovers s'appuient sur la bibliothèque tierce Popper pour le positionnement. Vous devez inclure popper.min.js avant
bootstrap.js
, ou en utiliser unbootstrap.bundle.min.js
qui contient Popper. - Les popovers nécessitent le plugin popover comme dépendance.
- Les popovers sont opt-in pour des raisons de performances, vous devez donc les initialiser vous -même .
- La longueur nulle
title
etcontent
les valeurs n'afficheront jamais de popover. - Spécifiez
container: 'body'
pour éviter les problèmes de rendu dans des composants plus complexes (comme nos groupes d'entrée, groupes de boutons, etc.). - Le déclenchement de popovers sur des éléments cachés ne fonctionnera pas.
- Les popovers pour les éléments
.disabled
ordisabled
doivent être déclenchés sur un élément wrapper. - Lorsqu'ils sont déclenchés à partir d'ancres qui s'étendent sur plusieurs lignes, les popovers seront centrés entre la largeur globale des ancres. Utilisez
.text-nowrap
sur votre<a>
s pour éviter ce comportement. - Les popovers doivent être masqués avant que leurs éléments correspondants ne soient supprimés du DOM.
- Les popovers peuvent être déclenchés grâce à un élément à l'intérieur d'un DOM shadow.
prefers-reduced-motion
requête multimédia. Voir la
section mouvement réduit de notre documentation sur l'accessibilité .
Continuez à lire pour voir comment les popovers fonctionnent avec quelques exemples.
Exemples
Activer les popovers
Comme mentionné ci-dessus, vous devez initialiser les popovers avant de pouvoir les utiliser. Une façon d'initialiser tous les popovers sur une page serait de les sélectionner par leur data-bs-toggle
attribut, comme ceci :
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
Démo en direct
Nous utilisons JavaScript similaire à l'extrait ci-dessus pour afficher le popover en direct suivant. Les titres sont définis via data-bs-title
et le contenu du corps est défini via data-bs-content
.
title
ou
data-bs-title
dans votre HTML. Lorsqu'il
title
est utilisé, Popper le remplacera automatiquement
data-bs-title
lors du rendu de l'élément.
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" data-bs-title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
Quatre directions
Quatre options sont disponibles : haut, droite, bas et gauche. Les directions sont mises en miroir lors de l'utilisation de Bootstrap dans RTL. Réglez data-bs-placement
pour changer la direction.
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Top popover">
Popover on top
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Right popover">
Popover on right
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Bottom popover">
Popover on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
Popover on left
</button>
Personnalisécontainer
Lorsque vous avez des styles sur un élément parent qui interfèrent avec un popover, vous voudrez spécifier une coutume container
afin que le HTML du popover apparaisse dans cet élément à la place. Ceci est courant dans les tableaux réactifs, les groupes d'entrée, etc.
const popover = new bootstrap.Popover('.example-popover', {
container: 'body'
})
Une autre situation où vous souhaiterez définir une personnalisation explicite container
concerne les popovers dans une boîte de dialogue modale , pour vous assurer que le popover lui-même est ajouté au modal. Ceci est particulièrement important pour les popovers qui contiennent des éléments interactifs - les dialogues modaux piégeront le focus, donc à moins que le popover ne soit un élément enfant du modal, les utilisateurs ne pourront pas focaliser ou activer ces éléments interactifs.
const popover = new bootstrap.Popover('.example-popover', {
container: '.modal-body'
})
Popovers personnalisés
Ajouté dans v5.2.0Vous pouvez personnaliser l'apparence des popovers à l'aide de variables CSS . Nous définissons une classe personnalisée avec data-bs-custom-class="custom-popover"
pour définir notre apparence personnalisée et l'utiliser pour remplacer certaines des variables CSS locales.
.custom-popover {
--bs-popover-max-width: 200px;
--bs-popover-border-color: var(--bs-primary);
--bs-popover-header-bg: var(--bs-primary);
--bs-popover-header-color: var(--bs-white);
--bs-popover-body-padding-x: 1rem;
--bs-popover-body-padding-y: .5rem;
}
<button type="button" class="btn btn-secondary"
data-bs-toggle="popover" data-bs-placement="right"
data-bs-custom-class="custom-popover"
data-bs-title="Custom popover"
data-bs-content="This popover is themed via CSS variables.">
Custom popover
</button>
Ignorer au prochain clic
Utilisez le focus
déclencheur pour fermer les popovers au prochain clic de l'utilisateur sur un élément différent de l'élément bascule.
Balisage spécifique requis pour le rejet au prochain clic
Pour un comportement correct entre navigateurs et plates-formes, vous devez utiliser la <a>
balise, pas la <button>
balise, et vous devez également inclure un tabindex
attribut.
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
const popover = new bootstrap.Popover('.popover-dismiss', {
trigger: 'focus'
})
Éléments désactivés
Les éléments avec l' disabled
attribut ne sont pas interactifs, ce qui signifie que les utilisateurs ne peuvent pas les survoler ou cliquer dessus pour déclencher un popover (ou une info-bulle). Comme solution de contournement, vous souhaiterez déclencher le popover à partir d'un wrapper <div>
ou <span>
, idéalement rendu focusable au clavier à l'aide de tabindex="0"
.
Pour les déclencheurs de popover désactivés, vous pouvez également préférer data-bs-trigger="hover focus"
que le popover apparaisse comme un retour visuel immédiat pour vos utilisateurs, car ils ne s'attendent peut-être pas à cliquer sur un élément désactivé.
<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Disabled popover">
<button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>
CSS
variables
Ajouté dans v5.2.0Dans le cadre de l'approche évolutive des variables CSS de Bootstrap, les popovers utilisent désormais des variables CSS locales .popover
pour une personnalisation améliorée en temps réel. Les valeurs des variables CSS sont définies via Sass, de sorte que la personnalisation de Sass est toujours prise en charge également.
--#{$prefix}popover-zindex: #{$zindex-popover};
--#{$prefix}popover-max-width: #{$popover-max-width};
@include rfs($popover-font-size, --#{$prefix}popover-font-size);
--#{$prefix}popover-bg: #{$popover-bg};
--#{$prefix}popover-border-width: #{$popover-border-width};
--#{$prefix}popover-border-color: #{$popover-border-color};
--#{$prefix}popover-border-radius: #{$popover-border-radius};
--#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};
--#{$prefix}popover-box-shadow: #{$popover-box-shadow};
--#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};
--#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};
@include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);
--#{$prefix}popover-header-color: #{$popover-header-color};
--#{$prefix}popover-header-bg: #{$popover-header-bg};
--#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};
--#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};
--#{$prefix}popover-body-color: #{$popover-body-color};
--#{$prefix}popover-arrow-width: #{$popover-arrow-width};
--#{$prefix}popover-arrow-height: #{$popover-arrow-height};
--#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);
Variables SSS
$popover-font-size: $font-size-sm;
$popover-bg: $white;
$popover-max-width: 276px;
$popover-border-width: $border-width;
$popover-border-color: var(--#{$prefix}border-color-translucent);
$popover-border-radius: $border-radius-lg;
$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow: $box-shadow;
$popover-header-font-size: $font-size-base;
$popover-header-bg: shade-color($popover-bg, 6%);
$popover-header-color: $headings-color;
$popover-header-padding-y: .5rem;
$popover-header-padding-x: $spacer;
$popover-body-color: $body-color;
$popover-body-padding-y: $spacer;
$popover-body-padding-x: $spacer;
$popover-arrow-width: 1rem;
$popover-arrow-height: .5rem;
Usage
Activez les popovers via JavaScript :
const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)
Faire en sorte que les popovers fonctionnent pour les utilisateurs de clavier et de technologie d'assistance
Pour permettre aux utilisateurs du clavier d'activer vos popovers, vous ne devez les ajouter qu'aux éléments HTML qui sont traditionnellement accessibles au clavier et interactifs (tels que des liens ou des contrôles de formulaire). Bien que des éléments HTML arbitraires (tels que <span>
s) puissent être rendus focalisables en ajoutant l' tabindex="0"
attribut, cela ajoutera des taquets de tabulation potentiellement gênants et déroutants sur les éléments non interactifs pour les utilisateurs de clavier, et la plupart des technologies d'assistance n'annoncent actuellement pas le contenu du popover dans cette situation. . De plus, ne comptez pas uniquement sur hover
le déclencheur pour vos popovers, car cela les rendra impossibles à d��clencher pour les utilisateurs de clavier.
Bien que vous puissiez insérer du HTML riche et structuré dans les popovers avec l' html
option, nous vous recommandons fortement d'éviter d'ajouter une quantité excessive de contenu. La façon dont les popovers fonctionnent actuellement est qu'une fois affichés, leur contenu est lié à l'élément déclencheur avec l' aria-describedby
attribut . En conséquence, l'intégralité du contenu de la fenêtre contextuelle sera annoncée aux utilisateurs de technologies d'assistance sous la forme d'un flux long et ininterrompu.
De plus, s'il est possible d'inclure également des contrôles interactifs (tels que des éléments de formulaire ou des liens) dans votre popover (en ajoutant ces éléments aux allowList
attributs et balises autorisés), sachez qu'actuellement, le popover ne gère pas l'ordre de focus du clavier. Lorsqu'un utilisateur du clavier ouvre un popover, le focus reste sur l'élément déclencheur, et comme le popover ne suit généralement pas immédiatement le déclencheur dans la structure du document, il n'y a aucune garantie qu'avancer/appuyer surTABdéplacera un utilisateur de clavier dans le popover lui-même. En bref, le simple fait d'ajouter des contrôles interactifs à un popover est susceptible de rendre ces contrôles inaccessibles/inutilisables pour les utilisateurs de clavier et les utilisateurs de technologies d'assistance, ou à tout le moins de créer un ordre de mise au point global illogique. Dans ces cas, envisagez plutôt d'utiliser une boîte de dialogue modale.
Choix
Comme les options peuvent être transmises via des attributs de données ou JavaScript, vous pouvez ajouter un nom d'option à data-bs-
, comme dans data-bs-animation="{value}"
. Assurez-vous de changer le type de casse du nom de l'option de " camelCase " à " kebab-case " lors du passage des options via les attributs de données. Par exemple, utilisez à la data-bs-custom-class="beautifier"
place de data-bs-customClass="beautifier"
.
Depuis Bootstrap 5.2.0, tous les composants prennent en charge un attribut de données expérimentaldata-bs-config
réservé pouvant héberger une configuration de composant simple sous forme de chaîne JSON. Lorsqu'un élément a des attributs data-bs-config='{"delay":0, "title":123}'
et , la valeur finale sera et les attributs de données séparés remplaceront les valeurs données sur . De plus, les attributs de données existants peuvent héberger des valeurs JSON telles que .data-bs-title="456"
title
456
data-bs-config
data-bs-delay='{"show":0,"hide":150}'
sanitize
options
,
sanitizeFn
et
ne peuvent pas être fournies à l'aide d'attributs de données.allowList
Nom | Taper | Défaut | La description |
---|---|---|---|
allowList |
objet | Valeur par défaut | Objet qui contient les attributs et balises autorisés. |
animation |
booléen | true |
Appliquez une transition de fondu CSS au popover. |
boundary |
chaîne, élément | 'clippingParents' |
Limite de contrainte de débordement du popover (s'applique uniquement au modificateur preventOverflow de Popper). Par défaut, c'est 'clippingParents' et peut accepter une référence HTMLElement (via JavaScript uniquement). Pour plus d'informations, reportez-vous à la documentation detectOverflow de Popper . |
container |
chaîne, élément, faux | false |
Ajoute le popover à un élément spécifique. Exemple : container: 'body' . Cette option est particulièrement utile car elle permet de positionner le popover dans le flux du document près de l'élément déclencheur - ce qui empêchera le popover de s'éloigner de l'élément déclencheur lors d'un redimensionnement de fenêtre. |
content |
chaîne, élément, fonction | '' |
Valeur de contenu par défaut si data-bs-content l'attribut n'est pas présent. Si une fonction est donnée, elle sera appelée avec sa this référence définie sur l'élément auquel le popover est attaché. |
customClass |
chaîne, fonction | '' |
Ajoutez des classes au popover lorsqu'il est affiché. Notez que ces classes seront ajoutées en plus de toutes les classes spécifiées dans le modèle. Pour ajouter plusieurs classes, séparez-les par des espaces : 'class-1 class-2' . Vous pouvez également passer une fonction qui doit renvoyer une seule chaîne contenant des noms de classe supplémentaires. |
delay |
nombre, objet | 0 |
Délai d'affichage et de masquage de la fenêtre contextuelle (ms) : ne s'applique pas au type de déclenchement manuel. Si un nombre est fourni, le délai est appliqué à la fois au masquage et à l'affichage. La structure de l'objet est : delay: { "show": 500, "hide": 100 } . |
fallbackPlacements |
chaîne, tableau | ['top', 'right', 'bottom', 'left'] |
Définissez les emplacements de remplacement en fournissant une liste d'emplacements dans le tableau (par ordre de préférence). Pour plus d'informations, reportez-vous à la documentation sur le comportement de Popper . |
html |
booléen | false |
Autoriser HTML dans le popover. Si vrai, les balises HTML dans le popover title seront rendues dans le popover. Si false, innerText la propriété sera utilisée pour insérer du contenu dans le DOM. Utilisez du texte si vous craignez les attaques XSS. |
offset |
nombre, chaîne, fonction | [0, 0] |
Décalage du popover par rapport à sa cible. Vous pouvez passer une chaîne dans les attributs de données avec des valeurs séparées par des virgules comme : data-bs-offset="10,20" . Lorsqu'une fonction est utilisée pour déterminer le décalage, elle est appelée avec un objet contenant le placement du popper, la référence et les rectangles du popper comme premier argument. Le nœud DOM de l'élément déclencheur est passé comme deuxième argument. La fonction doit retourner un tableau avec deux nombres : skidding , distance . Pour plus d'informations, reportez-vous à la documentation de décalage de Popper . |
placement |
chaîne, fonction | 'top' |
Comment positionner le popover : auto, haut, bas, gauche, droite. Lorsque auto est spécifié, il réorientera dynamiquement le popover. Lorsqu'une fonction est utilisée pour déterminer le placement, elle est appelée avec le nœud DOM popover comme premier argument et le nœud DOM de l'élément déclencheur comme second. Le this contexte est défini sur l'instance de popover. |
popperConfig |
null, objet, fonction | null |
Pour modifier la configuration Popper par défaut de Bootstrap, consultez Popper's configuration . Lorsqu'une fonction est utilisée pour créer la configuration Popper, elle est appelée avec un objet qui contient la configuration Popper par défaut de Bootstrap. Il vous aide à utiliser et à fusionner la valeur par défaut avec votre propre configuration. La fonction doit retourner un objet de configuration pour Popper. |
sanitize |
booléen | true |
Activez ou désactivez la désinfection. Si elles sont activées 'template' , les options 'content' et 'title' seront désinfectées. |
sanitizeFn |
null, fonction | null |
Ici, vous pouvez fournir votre propre fonction de désinfection. Cela peut être utile si vous préférez utiliser une bibliothèque dédiée pour effectuer la désinfection. |
selector |
chaîne, faux | false |
Si un sélecteur est fourni, les objets popover seront délégués aux cibles spécifiées. En pratique, cela est utilisé pour appliquer également des popovers aux éléments DOM ajoutés dynamiquement ( jQuery.on support). Voir ce numéro et un exemple informatif . |
template |
chaîne de caractères | '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' |
HTML de base à utiliser lors de la création du popover. Les popovers title seront injectés dans le fichier .popover-inner . .popover-arrow deviendra la flèche du popover. L'élément wrapper le plus externe doit avoir la .popover classe et role="popover" . |
title |
chaîne, élément, fonction | '' |
Valeur de titre par défaut si title l'attribut n'est pas présent. Si une fonction est donnée, elle sera appelée avec sa this référence définie sur l'élément auquel le popover est attaché. |
trigger |
chaîne de caractères | 'hover focus' |
Comment le popover est déclenché : clic, survol, focus, manuel. Vous pouvez passer plusieurs déclencheurs ; séparez-les par un espace. 'manual' indique que le popover sera déclenché par programmation via les méthodes .popover('show') , .popover('hide') et ; .popover('toggle') cette valeur ne peut être combinée avec aucun autre déclencheur. 'hover' à lui seul entraînera des popovers qui ne peuvent pas être déclenchés via le clavier et ne doivent être utilisés que si d'autres méthodes permettant de transmettre les mêmes informations aux utilisateurs du clavier sont présentes. |
Attributs de données pour les popovers individuels
Les options pour les popovers individuels peuvent également être spécifiées via l'utilisation d'attributs de données, comme expliqué ci-dessus.
Utilisation de la fonction avecpopperConfig
const popover = new bootstrap.Popover(element, {
popperConfig(defaultBsPopperConfig) {
// const newPopperConfig = {...}
// use defaultBsPopperConfig if needed...
// return newPopperConfig
}
})
Méthodes
Méthodes et transitions asynchrones
Toutes les méthodes API sont asynchrones et démarrent une transition . Ils reviennent à l'appelant dès que la transition est commencée mais avant qu'elle ne se termine . De plus, un appel de méthode sur un composant en transition sera ignoré .
Consultez notre documentation JavaScript pour plus d'informations .
Méthode | La description |
---|---|
disable |
Supprime la possibilité d'afficher le popover d'un élément. Le popover ne pourra s'afficher que s'il est réactivé. |
dispose |
Masque et détruit le popover d'un élément (supprime les données stockées sur l'élément DOM). Les popovers qui utilisent la délégation (créés à l'aide de l' selector option ) ne peuvent pas être détruits individuellement sur les éléments déclencheurs descendants. |
enable |
Donne au popover d'un élément la possibilité d'être affiché. Les popovers sont activés par défaut. |
getInstance |
Méthode statique qui permet d'obtenir l'instance popover associée à un élément DOM. |
getOrCreateInstance |
Méthode statique qui permet d'obtenir l'instance popover associée à un élément DOM, ou d'en créer une nouvelle au cas où elle n'aurait pas été initialisée. |
hide |
Masque le popover d'un élément. Retourne à l'appelant avant que le popover n'ait été masqué (c'est-à-dire avant que l' hidden.bs.popover événement ne se produise). Ceci est considéré comme un déclenchement "manuel" du popover. |
setContent |
Permet de modifier le contenu du popover après son initialisation. |
show |
Révèle le popover d'un élément. Retourne à l'appelant avant que le popover n'ait été affiché (c'est-à-dire avant que l' shown.bs.popover événement ne se produise). Ceci est considéré comme un déclenchement "manuel" du popover. Les popovers dont le titre et le contenu sont tous les deux de longueur nulle ne sont jamais affichés. |
toggle |
Bascule le popover d'un élément. Revient à l'appelant avant que le popover n'ait été réellement affiché ou masqué (c'est-à-dire avant que l' événement shown.bs.popover ou ne hidden.bs.popover se produise). Ceci est considéré comme un déclenchement "manuel" du popover. |
toggleEnabled |
Active/désactive la possibilité d'afficher ou de masquer le popover d'un élément. |
update |
Met à jour la position du popover d'un élément. |
// getOrCreateInstance example
const popover = bootstrap.Popover.getOrCreateInstance('#example') // Returns a Bootstrap popover instance
// setContent example
myPopover.setContent({
'.popover-header': 'another title',
'.popover-body': 'another content'
})
setContent
méthode accepte un
object
argument, où chaque clé de propriété est un
string
sélecteur valide dans le modèle de popover, et chaque valeur de propriété associée peut être
string
|
element
|
function
|
null
Événements
Événement | La description |
---|---|
hide.bs.popover |
Cet événement est déclenché immédiatement lorsque la hide méthode d'instance a été appelée. |
hidden.bs.popover |
Cet événement est déclenché lorsque le popover a fini d'être caché à l'utilisateur (il attendra que les transitions CSS soient terminées). |
inserted.bs.popover |
Cet événement est déclenché après l' show.bs.popover événement lorsque le modèle de popover a été ajouté au DOM. |
show.bs.popover |
Cet événement se déclenche immédiatement lorsque la show méthode d'instance est appelée. |
shown.bs.popover |
Cet événement est déclenché lorsque le popover a été rendu visible à l'utilisateur (il attendra que les transitions CSS soient terminées). |
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
// do something...
})