Navigation✨ Premium

Toast Success

Une notification verte glisse depuis la droite, reste 3 secondes et disparaît — feedback de succès instantané, non-bloquant.

JSAnimationFeedback

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

Formulaire de paramètres — Confirmation de sauvegarde — Toast Success exemple 1

① Formulaire de paramètres — Confirmation de sauvegarde

QuandL'utilisateur clique Enregistrer dans un formulaire de profil ou de configuration et le serveur répond 200.
PourquoiLe toast non-bloquant confirme l'action sans fermer le formulaire ni ouvrir une modale — l'utilisateur voit la confirmation instantanément et reprend son travail.
RéglagesshowToast('success', 'Paramètres enregistrés') ; couleurs par défaut (vert #10b981 → #059669) ; durée 3 s.
Export de rapport — Fichier CSV prêt — Toast Success exemple 2

② Export de rapport — Fichier CSV prêt

QuandUn job d'export en arrière-plan se termine ; le front détecte la fin via polling ou webhook et notifie l'utilisateur sans le rediriger.
PourquoiLe toast signale la disponibilité du fichier sans interrompre la navigation — l'utilisateur continue de filtrer ses données, le feedback arrive discrètement en coin.
RéglagesshowToast('success', 'Export prêt — 1 247 lignes') ; min-width: 320px pour messages plus longs ; délai conservé à 3 s.
Dropzone d'upload — Image téléversée avec succès — Toast Success exemple 3

③ Dropzone d'upload — Image téléversée avec succès

QuandL'upload se termine côté serveur et l'endpoint retourne l'URL de l'image stockée.
PourquoiLe glissement latéral attire l'œil sans couvrir la dropzone ni bloquer un second upload — l'utilisateur enchaîne les fichiers sans interruption.
RéglagesshowToast('success', 'Image uploadée avec succès') ; toasts empilés automatiquement si plusieurs uploads finissent simultanément.

Comment ça marche

La fonction globale showToast(type, message) cible #toastContainer via getElementById, crée un <div class="toast {type}"> et l'injecte dans le conteneur. L'icône SVG (coche, croix ou point d'info) est générée inline selon le type — aucune ressource externe n'est chargée.

L'animation d'entrée toastSlideIn fait glisser le toast depuis translateX(100%) jusqu'à sa position de repos en 0,4 s avec un cubic-bezier(0.4, 0, 0.2, 1) — un easing Material Design qui accélère puis freine. Au bout de 3 000 ms, un setTimeout ajoute la classe .hiding qui déclenche toastSlideOut (0,3 s ease vers translateX(100%)). Un second setTimeout de 300 ms retire le nœud du DOM via toast.remove().

Le .toast-container est position: fixed; top: 20px; right: 20px; z-index: 9999 — ancré en coin supérieur-droit quel que soit le scroll de la page. Des appels successifs à showToast() empilent les toasts verticalement via flex-direction: column; gap: 10px ; chacun gère sa propre minuterie de fermeture de façon indépendante.

Accessibilité

  • Pas de prefers-reduced-motion : les animations toastSlideIn et toastSlideOut s'exécutent systématiquement. Ajoutez @media (prefers-reduced-motion: reduce) { .toast { animation: none; } } pour les désactiver.
  • Le #toastContainer n'a pas d'aria-live dans le code fourni — les toasts ne sont pas annoncés aux lecteurs d'écran. Ajoutez aria-live="polite" aria-atomic="true" sur le conteneur pour corriger cela.
  • Contraste texte blanc sur fond vert #059669 : ratio ≥ 4,5:1, conforme WCAG AA.
  • Pas de mécanisme de fermeture au clavier — aucun bouton Fermer ni gestion de la touche Échap dans le JS.
  • Les icônes SVG inline ne portent ni aria-hidden ni aria-label — ajoutez aria-hidden="true" sur chaque <svg> pour éviter leur verbalisation par les AT.

Compatibilité navigateur

Nécessite createElement, classList et les animations CSS — supportés dans tous les navigateurs modernes.

Chrome 110+✓ Complet
Firefox 110+✓ Complet
Safari 16+✓ Complet
Edge 110+✓ Complet
Mobile iOS✓ Complet
Android Chrome✓ Complet

Sans CSS, le toast s'affiche en texte brut dans le flux — aucune erreur JS. Si <code>getElementById('toastContainer')</code> ne trouve pas le conteneur, la fonction retourne silencieusement.

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>

<!-- Bouton déclencheur (placez-le n'importe où dans votre UI) -->
<button class="toast-trigger" onclick="showToast('success', 'Action réussie !')">
  Déclencher le toast
</button>
🔒 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
.toast.success background linear-gradient(135deg, #10b981, #059669) Couleur du fond du toast — remplacez par votre gradient brand.
.toast-container top / right 20px / 20px Position en coin. Pour passer en bas à droite : top: auto; bottom: 20px;.
.toast min-width 280px Largeur minimale — augmentez à 320–360 px pour des messages plus longs sans retour à la ligne.
.toast border-radius 12px Arrondi des coins. 0 pour un look carré, 24 px pour un style pill.
setTimeout délai (3e3) 3000 ms Durée d'affichage avant disparition — modifiez la constante dans la fonction showToast.
toastSlideIn duration 0.4s Vitesse de l'animation d'entrée — réduisez à 0.2 s pour un feedback plus nerveux.
.toast font-size / font-weight 0.95rem / 500 Taille et graisse du texte — ajustez selon votre typographie.
.toast gap 12px Espacement entre l'icône SVG et le texte du message.

FAQ

Oui. Chaque appel à showToast() ajoute un nouveau <div> dans #toastContainer — ils s'empilent verticalement via flex-direction: column; gap: 10px. Ajoutez un compteur JS et ignorez l'appel si un plafond est atteint pour éviter la surcharge visuelle.
Modifiez les propriétés du .toast-container : top: auto; bottom: 20px; right: auto; left: 20px;. Pour un glissement depuis la gauche, remplacez aussi translateX(100%) par translateX(-100%) dans les keyframes toastSlideIn et toastSlideOut.
Pas dans le code par défaut. Ajoutez aria-live="polite" aria-atomic="true" sur le <div id="toastContainer"> pour que les AT lisent chaque message dès son insertion dans le DOM.