Navigation✨ Premium

Toast Stack

Trois types de toast (succès, erreur, info) s'empilent avec 300 ms d'écart et disparaissent seuls — séquence orchestrée par de simples setTimeouts.

JSStackQueue

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Navigation comprend 36 effets, dont 4 gratuits. Découvrir la catégorie →

3 exemples d'usage

Tableau de bord DevOps — Alertes de déploiement en cascade — Toast Stack exemple 1

① Tableau de bord DevOps — Alertes de déploiement en cascade

QuandL'opérateur déclenche un déploiement depuis le dashboard ; le pipeline renvoie plusieurs événements successifs (build réussi, cache invalidé, erreur réseau).
PourquoiLes trois types de toast apparaissent en file et documentent chaque étape sans interrompre le workflow — l'opérateur voit l'état complet en un coup d'œil sans quitter sa vue courante.
Réglages3 toasts espacés de 300 ms : success « Build terminé », info « Cache purgé », error « Timeout CDN #3 ».
Outil d'import CSV — Résultats du traitement batch — Toast Stack exemple 2

② Outil d'import CSV — Résultats du traitement batch

QuandL'utilisateur soumet un fichier de données ; le back-end répond avec plusieurs résultats simultanés (lignes traitées, doublons ignorés, rapport généré).
PourquoiTrois toasts synthétisent le résultat d'une opération complexe sans rediriger vers une nouvelle page ni imposer un scroll vers un bandeau de statut.
Réglagessuccess « 382 lignes importées », info « 14 doublons ignorés », success « Rapport Excel disponible » — délai 300 ms entre chaque.
Tunnel de commande — Confirmation en trois étapes — Toast Stack exemple 3

③ Tunnel de commande — Confirmation en trois étapes

QuandL'acheteur valide son panier ; le système confirme successivement l'adresse, le paiement et la date de livraison.
PourquoiEspacer les confirmations de 300 ms crée un sentiment de progression : l'utilisateur perçoit un traitement réel plutôt qu'une page de succès monolithique.
Réglagesinfo « Adresse validée », success « Paiement confirmé », success « Livraison planifiée J+2 » — dismiss automatique à 3 s.

Comment ça marche

showToast(type, message) crée un <div class="toast {type}"> avec une icône SVG inline (checkmark pour success, croix pour error, info-cercle pour info) et le message en texte brut, puis l'ajoute à #toastContainer via appendChild. Un premier setTimeout à 3 000 ms ajoute la classe hiding, déclenchant la transition CSS de sortie ; un second setTimeout à 300 ms supprime l'élément du DOM.

showMultipleToasts() enchaîne trois appels à showToast avec des délais de 0, 300 et 600 ms. L'empilement résulte du comportement naturel du container flex-colonne : chaque toast s'insère en bas de la pile sans calcul de position — la hauteur du container s'adapte automatiquement et les toasts déjà visibles restent en place.

L'animation d'entrée est portée par CSS : un keyframe fait glisser le toast depuis la droite (translateX(100% + gap), opacity 0 → 1) en ~300 ms. La sortie inverse ce mouvement quand hiding est appliqué. Le délai de 300 ms entre l'ajout de hiding et la suppression du DOM laisse la transition se compléter proprement avant que le reflow se produise.

Le JS n'utilise aucune bibliothèque externe : uniquement document.createElement, appendChild, classList et setTimeout. Les icônes sont entièrement inline en SVG — aucun import de sprite, aucune font-icon.

Accessibilité

  • prefers-reduced-motion : absent du code — l'animation de glissement s'applique toujours, y compris pour les utilisateurs qui ont activé la préférence système. À corriger en ajoutant @media (prefers-reduced-motion: reduce) { .toast { animation: none; } }.
  • #toastContainer n'est pas déclaré aria-live ni role="status" : les lecteurs d'écran (NVDA, VoiceOver) n'annoncent pas les toasts automatiquement. Ajoutez aria-live="polite" ou aria-live="assertive" selon l'urgence du message.
  • Les icônes SVG n'ont ni aria-label ni <title>, et ne portent pas aria-hidden="true" — elles sont transmises aux technologies d'assistance comme des graphiques sans nom.
  • Le bouton déclencheur (.toast-trigger) est un <button> natif, clavier-accessible et focusable sans JavaScript supplémentaire.
  • Le contraste fond/texte des toasts doit être vérifié en contexte d'intégration : la valeur de fond #1a1a2e sur fond sombre du site peut dégrader la lisibilité si le container n'est pas opaque.

Compatibilité navigateur

Repose uniquement sur des APIs DOM standard (createElement, classList, setTimeout) et des transitions CSS — aucun polyfill requis.

Chrome 90+✓ Complet
Firefox 88+✓ Complet
Safari 14+✓ Complet
Edge 90+✓ Complet
Mobile iOS✓ Complet
Android Chrome✓ Complet

Sans JS, le bouton est inactif et aucun toast n'apparaît — la page reste fonctionnelle. Si <code>#toastContainer</code> est absent du DOM, <code>showToast()</code> retourne silencieusement (<code>if (!s) return</code>) sans erreur JS.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="toast-container" id="toastContainer"></div>

<div class="component-demo">
  <button class="toast-trigger stack" onclick="showMultipleToasts()">
    Afficher Toasts Empilés
  </button>
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
setTimeout 3000 3 000 ms Durée d'affichage avant dismiss automatique. Modifiez 3e3 (premier setTimeout dans showToast) par la valeur souhaitée en millisecondes.
Délais 300 / 600 ms 300 ms / 600 ms Écarts entre les toasts 2 et 3 dans showMultipleToasts(). Réduisez à 150/300 pour une rafale rapide, augmentez à 600/1200 pour un rythme narratif.
CSS .toast.success border-left #10b981 Couleur emerald de la bordure gauche et de l'icône pour les toasts de succès. Remplacez par votre couleur brand.
CSS .toast.error border-left #ef4444 Couleur rouge de la bordure gauche et de l'icône pour les toasts d'erreur.
CSS .toast.info border-left #6366f1 Couleur indigo de la bordure gauche et de l'icône pour les toasts d'information.
showToast(type, msg) Appelez directement cette fonction pour un toast unique. type accepte 'success', 'error' ou 'info' — la string devient la classe CSS du toast.
Icônes SVG inline dans showToast() Modifiez les blocs SVG dans showToast() par branche conditionnelle pour adapter les icônes à votre design system (Heroicons, Lucide, Phosphor...).

FAQ

Oui — showToast() le cherche via getElementById('toastContainer') et retourne silencieusement si l'élément est absent (if (!s) return). Ajoutez <div id="toastContainer" class="toast-container"></div> n'importe où dans le <body>, idéalement juste avant </body>.
Oui — appelez showToast(type, message) directement plutôt que showMultipleToasts(). Pour un singleton strict (un seul toast visible), videz le container avant chaque appel : document.getElementById('toastContainer').innerHTML = '', ou filtrez via une variable de verrou côté appelant.
Branchez showToast() dans les callbacks .then() / .catch(). Exemple : fetch('/api/save').then(r => r.ok ? showToast('success','Sauvegardé !') : showToast('error','Echec')).catch(() => showToast('error','Erreur réseau')). Pour une séquence multi-étapes, enchaînez plusieurs .then() avec des setTimeout imbriqués pour respecter le timing visuel.