Aller au contenu
BDU Cauri, accueilv0.1.0
ComposantsJavaScript requis

Popovers

Un popover est une petite fenêtre flottante, avec titre et contenu, qui s’ouvre au clic sur un élément. Il convient à une aide un peu plus riche qu’une infobulle, sans quitter la page.

Initialisation#

Les popovers ne s’activent pas seuls : initialisez-les après le chargement de la page. Le site de cette documentation le fait déjà pour les aperçus.

const declencheurs = document.querySelectorAll('[data-bs-toggle="popover"]');
declencheurs.forEach((element) => new bootstrap.Popover(element));

Exemple de base#

Le titre vient de data-bs-title (ou title) et le contenu de data-bs-content. Un clic sur le déclencheur ouvre le popover, un second clic le ferme.

<button type="button" class="btn btn-primary" data-bs-toggle="popover" data-bs-title="Frais de virement" data-bs-content="Les virements entre comptes BDU CI sont gratuits. Vers une autre banque : 500 FCFA.">Voir les frais</button>

Positions#

data-bs-placement accepte top, right (valeur par défaut), bottom et left. Si la place manque, le popover bascule de l’autre côté.

<div class="d-flex flex-wrap gap-2">
  <button type="button" class="btn btn-secondary" data-bs-toggle="popover" data-bs-placement="top" data-bs-title="En haut" data-bs-content="Contenu du popover placé au-dessus.">Haut</button>
  <button type="button" class="btn btn-secondary" data-bs-toggle="popover" data-bs-placement="right" data-bs-title="À droite" data-bs-content="Contenu du popover placé à droite.">Droite</button>
  <button type="button" class="btn btn-secondary" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-title="En bas" data-bs-content="Contenu du popover placé en dessous.">Bas</button>
  <button type="button" class="btn btn-secondary" data-bs-toggle="popover" data-bs-placement="left" data-bs-title="À gauche" data-bs-content="Contenu du popover placé à gauche.">Gauche</button>
</div>

Fermeture au clic suivant#

Avec data-bs-trigger="focus", le popover se ferme dès que l’utilisateur clique ailleurs. Utilisez un <a> avec tabindex="0" et role="button" : certains navigateurs (Safari) ne donnent pas le focus à un <button> au clic.

<a tabindex="0" class="btn btn-outline-primary" role="button" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-title="Plafond de carte" data-bs-content="Le plafond mensuel de paiement est de 2 000 000 FCFA.">Plafond de carte</a>

Éléments désactivés#

Un élément désactivé ne reçoit aucun événement. Placez le popover sur un conteneur focalisable.

<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Ce service sera disponible après la validation de votre identité.">
  <button class="btn btn-primary" type="button" disabled style="pointer-events: none;">Ouvrir un compte</button>
</span>

Contenu HTML#

Avec data-bs-html="true", titre et contenu acceptent du HTML simple (nettoyé pour des raisons de sécurité). Les liens et boutons restent utilisables au clavier tant que le popover est ouvert.

<button type="button" class="btn btn-primary" data-bs-toggle="popover" data-bs-html="true" data-bs-title="Besoin d'aide ?" data-bs-content="Appelez le &lt;strong&gt;27 20 00 00 00&lt;/strong&gt; ou rendez-vous &lt;a href='#'&gt;en agence&lt;/a&gt;.">Contacter la banque</button>

Options passées en JavaScript#

Les options peuvent être fournies à la création, y compris sous forme de fonctions. Elles priment sur les attributs data-bs-*.

const popover = new bootstrap.Popover('#bouton-aide', {
  title: 'Besoin d\'aide ?',
  content: () => document.getElementById('modele-aide').innerHTML,
  html: true,
  placement: 'bottom',
  trigger: 'focus',
  customClass: 'popover-bdu',
});

popover.show();
popover.setContent({
  '.popover-header': 'Nouveau titre',
  '.popover-body': 'Nouveau contenu',
});

// Fermer tous les popovers ouverts avec Échap
document.addEventListener('keydown', (evenement) => {
  if (evenement.key !== 'Escape') return;
  document.querySelectorAll('[data-bs-toggle="popover"]').forEach((el) => {
    const instance = bootstrap.Popover.getInstance(el);
    if (instance) instance.hide();
  });
});

Options

Le popover reprend toutes les options des infobulles, avec quatre valeurs par défaut différentes (content, offset, placement, trigger). Les noms d’attributs s’obtiennent en préfixant l’option en kebab-case par data-bs- ; allowList, popperConfig, sanitize, sanitizeFn, selector et template ne se passent pas par attribut.

Options
OptionTypeDéfautDescription
allowListobjectliste de balises et d’attributs autorisésÉléments HTML admis quand html est vrai.
animationbooleantrueApplique un fondu.
boundarystring | element'clippingParents'Limite de débordement.
containerstring | element | falsefalseInsère le popover dans cet élément (utile dans une modale ou un groupe de boutons).
contentstring | element | function''Contenu du corps du popover.
customClassstring | function''Classe(s) ajoutée(s) au popover.
delaynumber | object0Délai en ms ; objet { show, hide } pour les distinguer.
fallbackPlacementsarray['top', 'right', 'bottom', 'left']Positions de repli.
htmlbooleanfalseInterprète titre et contenu comme du HTML.
offsetarray | string | function[0, 8]Décalage [saut, distance].
placementstring | function'right'Position : top, right, bottom, left ou auto.
popperConfignull | object | functionnullConfiguration avancée du positionnement.
sanitizebooleantrueNettoie le HTML. Ne le désactivez jamais avec du contenu saisi par un utilisateur.
sanitizeFnnull | functionnullFonction de nettoyage personnalisée.
selectorstring | falsefalseDélègue le popover à des éléments créés plus tard.
templatestringvoir ci-dessousGabarit : .popover, .popover-arrow, .popover-header, .popover-body.
titlestring | element | function''Titre du popover.
triggerstring'click'Déclencheurs : click, hover, focus, manual (séparés par une espace).

Méthodes

Méthodes
MéthodeDescription
show()Affiche le popover.
hide()Masque le popover.
toggle()Bascule l’affichage.
dispose()Supprime le popover.
enable()Autorise l’affichage (état par défaut).
disable()Empêche l’affichage.
toggleEnabled()Alterne entre activé et désactivé.
update()Recalcule la position.
setContent(contenu)Remplace le contenu : objet { '.popover-header': '…', '.popover-body': '…' }.
bootstrap.Popover.getInstance(element)Renvoie l’instance liée à l’élément, ou null.
bootstrap.Popover.getOrCreateInstance(element, options)Renvoie l’instance, ou la crée.

Événements

Événements
ÉvénementDéclenché quand
show.bs.popoverL’affichage est demandé. Annulable avec preventDefault().
shown.bs.popoverLe popover est visible, transition terminée.
hide.bs.popoverLe masquage est demandé. Annulable avec preventDefault().
hidden.bs.popoverLe popover est masqué, transition terminée.
inserted.bs.popoverL’élément du popover vient d’être inséré dans la page.

Attributs data-bs-*

Attributs data-bs-*
AttributOption correspondante
data-bs-toggle="popover"Marque l’élément à initialiser.
data-bs-titletitle
data-bs-contentcontent
data-bs-placementplacement
data-bs-triggertrigger
data-bs-htmlhtml
data-bs-delaydelay
data-bs-animationanimation
data-bs-custom-classcustomClass
data-bs-containercontainer
data-bs-offsetoffset
data-bs-boundaryboundary
data-bs-fallback-placementsfallbackPlacements

Variables Sass

Variables Sass
VariableValeur par défaut
$popover-font-size$font-size-sm
$popover-bgvar(--bs-body-bg)
$popover-max-width276px
$popover-border-widthvar(--bs-border-width)
$popover-border-colorvar(--bs-border-color-translucent)
$popover-border-radiusvar(--bs-border-radius-lg)
$popover-box-shadowvar(--bs-box-shadow)
$popover-header-font-size$font-size-base
$popover-header-bgvar(--bs-secondary-bg)
$popover-header-color$headings-color
$popover-header-padding-y.5rem
$popover-header-padding-x$spacer
$popover-body-colorvar(--bs-body-color)
$popover-body-padding-y$spacer
$popover-body-padding-x$spacer
$popover-arrow-width1rem
$popover-arrow-height.5rem

Personnalisation#

Passez une classe avec customClass et surchargez les variables --bs-popover-* pour modifier une famille de popovers.

// Sass : popovers plus larges
$popover-max-width: 340px;
$popover-body-padding-x: 1.25rem;

// CSS : popover pour l'option customClass: 'popover-bdu'
.popover-bdu {
  --bs-popover-max-width: 340px;
  --bs-popover-header-bg: #2B62AA;
  --bs-popover-header-color: #fff;
  --bs-popover-border-color: #2B62AA;
}

Bonnes pratiques

À faire

  • Réservez le popover à un complément d’information court : définition, précision sur un tarif, aide à la saisie.
  • Utilisez un vrai bouton ou lien comme déclencheur, avec un libellé explicite.
  • Gardez le contenu à quelques lignes et un seul niveau d’information.
  • Proposez la même information ailleurs dans la page quand elle est importante.

À éviter

  • N’y placez pas de formulaire ou de contenu long : ouvrez une modale ou un offcanvas.
  • Ne basez pas une action essentielle (paiement, validation) sur un popover.
  • N’ouvrez pas plusieurs popovers en même temps : utilisez data-bs-trigger="focus" pour que chacun se ferme tout seul.
  • N’activez jamais sanitize: false avec un contenu qui vient de l’utilisateur.

Accessibilité

  • Le déclencheur doit être atteignable au clavier : <button>, <a href> ou un élément avec tabindex="0" et role="button".
  • Le popover est relié au déclencheur par aria-describedby quand il est ouvert ; son contenu n’est pas piégé au clavier.
  • Avec trigger: 'hover' seul, le contenu est inaccessible au clavier et au tactile : gardez click ou hover focus.
  • Échap ne ferme pas un popover par défaut : ajoutez l’écouteur du modèle ci-dessus si vos popovers contiennent des éléments interactifs.
Charte provisoire, déduite du site public de la BDU CI. Elle sera remplacée par la charte officielle.