Aller au contenu
BDU Cauri, accueilv0.1.0
ComposantsJavaScript requis

Toasts

Un toast est une notification brève et non bloquante : confirmation d’un virement, enregistrement d’un brouillon. Il s’affiche dans un coin de l’écran, puis disparaît seul ou à la demande.

Exemple de base#

Un toast comporte un en-tête facultatif (titre, horodatage, bouton de fermeture) et un corps. Ici il est déjà visible avec la classe .show. Le bouton de fermeture fonctionne sans script.

<div class="toast show" role="alert" aria-live="assertive" aria-atomic="true">
  <div class="toast-header">
    <strong class="me-auto">BDU CI</strong>
    <small class="text-body-secondary">à l'instant</small>
    <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Fermer"></button>
  </div>
  <div class="toast-body">Votre virement de 150 000 FCFA a bien été envoyé.</div>
</div>

Sans en-tête et couleurs#

Le toast peut se limiter au corps. Pour le colorer, utilisez .text-bg-* avec .border-0, et .btn-close-white pour le bouton. Rappel : text-bg-secondary et text-bg-success donnent le même vert.

<div class="d-flex flex-column gap-3">
  <div class="toast show align-items-center text-bg-primary border-0" role="alert" aria-live="assertive" aria-atomic="true">
    <div class="d-flex">
      <div class="toast-body">Opération enregistrée.</div>
      <button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Fermer"></button>
    </div>
  </div>
  <div class="toast show align-items-center text-bg-success border-0" role="alert" aria-live="assertive" aria-atomic="true">
    <div class="d-flex">
      <div class="toast-body">Votre carte a été activée.</div>
      <button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Fermer"></button>
    </div>
  </div>
  <div class="toast show align-items-center text-bg-danger border-0" role="alert" aria-live="assertive" aria-atomic="true">
    <div class="d-flex">
      <div class="toast-body">Le virement a échoué : solde insuffisant.</div>
      <button type="button" class="btn-close btn-close-white me-2 m-auto" data-bs-dismiss="toast" aria-label="Fermer"></button>
    </div>
  </div>
</div>

Empilement#

.toast-container regroupe plusieurs toasts et les espace. Les toasts qui se suivent s’empilent dans l’ordre du HTML. Ajoutez .position-static pour garder le conteneur dans la page ; sinon voyez la section suivante.

<div class="toast-container position-static">
  <div class="toast show" role="alert" aria-live="assertive" aria-atomic="true">
    <div class="toast-header">
      <strong class="me-auto">Virement reçu</strong>
      <small class="text-body-secondary">il y a 2 min</small>
      <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Fermer"></button>
    </div>
    <div class="toast-body">75 000 FCFA ont été crédités sur votre compte courant.</div>
  </div>
  <div class="toast show" role="alert" aria-live="assertive" aria-atomic="true">
    <div class="toast-header">
      <strong class="me-auto">Rappel</strong>
      <small class="text-body-secondary">à l'instant</small>
      <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Fermer"></button>
    </div>
    <div class="toast-body">Votre mensualité de prêt est prélevée demain.</div>
  </div>
</div>

Positionner et afficher par JavaScript#

Placez un conteneur fixe en bas à droite et affichez les toasts depuis le code. Ce modèle n’est pas exécuté dans l’aperçu : copiez-le dans votre page. La zone aria-live doit exister dans le HTML avant l’apparition des toasts.

<button type="button" class="btn btn-primary" id="bouton-toast">Envoyer le virement</button>

<div class="toast-container position-fixed bottom-0 end-0 p-3">
  <div id="toast-virement" class="toast" role="status" aria-live="polite" aria-atomic="true">
    <div class="toast-header">
      <strong class="me-auto">BDU CI</strong>
      <small>à l'instant</small>
      <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Fermer"></button>
    </div>
    <div class="toast-body">Virement envoyé.</div>
  </div>
</div>

Script d'affichage#

Un toast n’est jamais ouvert automatiquement : créez l’instance puis appelez show(). Les options peuvent venir du constructeur ou des attributs data-bs-*.

const element = document.getElementById('toast-virement');
const toast = bootstrap.Toast.getOrCreateInstance(element, {
  autohide: true,
  delay: 6000,
});

document.getElementById('bouton-toast').addEventListener('click', () => toast.show());

element.addEventListener('hidden.bs.toast', () => {
  console.log('Toast masqué');
});

Disparition automatique#

Par défaut, un toast disparaît après 5 secondes. Le survol ou le focus du toast suspend le compte à rebours. data-bs-autohide="false" le laisse affiché jusqu’à ce que l’utilisateur le ferme ; data-bs-delay change la durée en millisecondes.

<div class="toast show" data-bs-autohide="false" role="alert" aria-live="assertive" aria-atomic="true">
  <div class="toast-header">
    <strong class="me-auto">Action requise</strong>
    <button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Fermer"></button>
  </div>
  <div class="toast-body">Confirmez votre numéro de téléphone pour sécuriser vos paiements.</div>
</div>

Options

Options passées au constructeur ou par attribut sur le toast (data-bs-animation, data-bs-autohide, data-bs-delay).

Options
OptionTypeDéfautDescription
animationbooleantrueApplique un fondu à l’apparition et à la disparition.
autohidebooleantrueMasque le toast automatiquement après le délai.
delaynumber5000Délai en millisecondes avant le masquage automatique.

Méthodes

Méthodes
MéthodeDescription
show()Affiche le toast. À appeler explicitement : il n’est pas affiché automatiquement.
hide()Masque le toast. Sans effet s’il n’est pas affiché.
isShown()Renvoie true si le toast est affiché.
dispose()Détruit l’instance (masque d’abord le toast s’il est affiché).
bootstrap.Toast.getInstance(element)Renvoie l’instance liée à l’élément, ou null.
bootstrap.Toast.getOrCreateInstance(element, options)Renvoie l’instance, ou la crée.

Événements

Événements
ÉvénementDéclenché quand
show.bs.toastL’affichage est demandé. Annulable avec preventDefault().
shown.bs.toastLe toast est visible, transition terminée.
hide.bs.toastLe masquage est demandé. Annulable avec preventDefault().
hidden.bs.toastLe toast est masqué, transition terminée.

Attributs data-bs-*

Attributs data-bs-*
AttributÉlémentEffet
data-bs-dismiss="toast"Bouton dans le toastMasque le toast au clic.
data-bs-autohideToastOption autohide.
data-bs-delayToastOption delay.
data-bs-animationToastOption animation.

Variables Sass

Variables Sass
VariableValeur par défaut
$toast-max-width350px
$toast-padding-x.75rem
$toast-padding-y.5rem
$toast-font-size.875rem
$toast-colornull
$toast-background-colorrgba(var(--bs-body-bg-rgb), .85)
$toast-border-widthvar(--bs-border-width)
$toast-border-colorvar(--bs-border-color-translucent)
$toast-border-radiusvar(--bs-border-radius)
$toast-box-shadowvar(--bs-box-shadow)
$toast-spacing$container-padding-x
$toast-header-colorvar(--bs-secondary-color)
$toast-header-background-colorrgba(var(--bs-body-bg-rgb), .85)
$zindex-toast1090

Personnalisation#

Surchargez les variables CSS --bs-toast-* sur un toast précis, ou changez les variables Sass pour tous.

// Sass : toasts plus larges et plus opaques
$toast-max-width: 420px;
$toast-background-color: rgba($white, 0.97);

// CSS : un toast précis
.toast-confirmation {
  --bs-toast-max-width: 420px;
  --bs-toast-border-color: #387A1B;
  --bs-toast-header-color: #1f2a37;
}

Bonnes pratiques

À faire

  • Gardez le message court et factuel : ce qui s’est passé, sans action obligatoire.
  • Donnez à l’utilisateur le temps de lire : 5 secondes minimum, davantage si le message est long.
  • Placez les toasts dans un conteneur unique (.toast-container) pour qu’ils s’empilent proprement.
  • Prévoyez la zone aria-live dans le HTML dès le chargement de la page.

À éviter

  • N’utilisez pas un toast pour une information critique ou une erreur à corriger : préférez une alerte dans la page.
  • Ne mettez pas de bouton d’action indispensable dans un toast qui disparaît seul.
  • N’affichez pas plusieurs toasts à la fois pour un même événement.

Accessibilité

  • Un toast est une région vive : role="alert" avec aria-live="assertive" pour une information urgente, role="status" avec aria-live="polite" pour une information courante ; aria-atomic="true" pour lire le message en entier.
  • Le conteneur ou la zone aria-live doit déjà être dans la page avant l’apparition du message, sinon certains lecteurs d’écran ne l’annoncent pas.
  • Le survol et le focus suspendent le masquage automatique : un utilisateur au clavier a le temps de lire. Pour un message long, désactivez autohide.
  • Le bouton de fermeture doit avoir un aria-label (« Fermer »).
Charte provisoire, déduite du site public de la BDU CI. Elle sera remplacée par la charte officielle.