L'outil que votre équipe attendait
Plus rapide, plus léger, collaboratif. Essayez maintenant.
Toast CSS émeraude avec transition fade-up de 0,3 s et classe `.show` — un bouton natif déclenche l'apparition, zéro dépendance, zéro JS dans l'effet.
Cet effet est gratuit — la catégorie Atmosphère en contient 57 au total, dont 10 gratuits. Effect.Labs regroupe 811 effets vanilla. Découvrir la catégorie →
Plus rapide, plus léger, collaboratif. Essayez maintenant.
Toutes les modifications sont en brouillon. Sauvegardez pour publier la version mise à jour auprès de votre équipe.
Le HTML expose deux éléments dans un .snd-notif-container flex en colonne : un <button class="snd-notif-trigger"> et un <div class="snd-notif-toast">. Le toast démarre invisible (opacity: 0, transform: translateY(10px)) — ces deux propriétés sont déclarées en état de repos dans la règle .snd-notif-toast.
La transition d'apparition repose entièrement sur CSS : transition: 0.3 s s'applique à toutes les propriétés animables. Quand la classe .show est ajoutée au toast, le navigateur interpole automatiquement opacity 0 → 1 et translateY(10px) → translateY(0) sur 300 ms — sans une seule instruction requestAnimationFrame.
La palette tient en une seule couleur émeraude rgb(16, 185, 129) déclinée à trois opacités : texte (1,0), fond (0,15–0,20) et bord (0,30). Les deux éléments partagent ce triplet, ce qui garantit la cohérence visuelle quelle que soit la couleur substituée.
Le champ js du fichier source contient uniquement le commentaire « Effet CSS pur — pas de JavaScript nécessaire » : l'effet ne fournit aucune logique de déclenchement. C'est intentionnel — vous ajoutez la classe .show via votre propre code (clic, événement métier, timeout d'auto-dismiss). Aucun son de cloche n'est inclus dans le code livré malgré le nom de l'effet ; l'intégration audio est laissée à l'intégrateur (Web Audio API ou fichier `.mp3`).
prefers-reduced-motion dans le code actuel : la transition CSS s'exécute inconditionnellement, même si l'OS signale une préférence pour réduire le mouvement..snd-notif-trigger est un <button> natif — focusable au clavier (Tab), activable par Entrée et Espace, avec rôle button implicitement fourni au lecteur d'écran..snd-notif-toast ne porte ni aria-live ni role="alert" — les lecteurs d'écran n'annoncent pas automatiquement l'apparition du toast ; à ajouter manuellement en production.aria-label ni aria-describedby sur la notification — le contenu texte du toast est accessible mais pas lié programmatiquement au bouton déclencheur.rgb(16, 185, 129) (#10b981) sur fond sombre composite (~#0b2420) donne un ratio ≥ 12:1 — passe largement WCAG AA et AAA pour le texte normal.Repose uniquement sur les transitions CSS et la propriété transform — supportés universellement depuis 2013. Aucun JS côté effet.
Sans support CSS <code>transition</code> (IE ≤ 9), le toast passe directement à son état final sans animation — le contenu reste lisible.
Copiez les trois blocs dans votre page. Aucune dépendance.
<div class="snd-notif-container">
<button class="snd-notif-trigger" id="sndNotifBtn">🔔 Notification</button>
<div class="snd-notif-toast" id="sndNotifToast">✅ Nouveau message recu !</div>
</div>
.snd-notif-container {
display: flex;
flex-direction: column;
align-items: center;
gap: 12px;
}
.snd-notif-trigger {
padding: 10px 20px;
border-radius: 8px;
background: rgba(16, 185, 129, 0.2);
border: 1px solid rgba(16, 185, 129, 0.3);
color: rgb(16, 185, 129);
cursor: pointer;
font-size: 0.85rem;
}
.snd-notif-toast {
padding: 10px 16px;
border-radius: 8px;
background: rgba(16, 185, 129, 0.15);
border: 1px solid rgba(16, 185, 129, 0.3);
color: rgb(16, 185, 129);
font-size: 0.8rem;
opacity: 0;
transform: translateY(10px);
transition: 0.3s;
}
.snd-notif-toast.show {
opacity: 1;
transform: translateY(0px);
}
// Effet CSS pur — pas de JavaScript nécessaire
Options passées à l'API ou attributs data-* :
| Option / propriété | Défaut | Effet |
|---|---|---|
| rgb(16, 185, 129) | émeraude #10b981 | Couleur principale du composant — présente 3 fois dans le CSS (text, fond, bord). Remplacez partout par une seule couleur brand pour cohérence. |
| transition: 0.3s | 0,3 s | Durée d'animation d'apparition/disparition du toast. 0,15 s = confirme immédiatement ; 0,6 s = entrée douce pour une bannière persistante. |
| transform: translateY(10px) | montée de 10 px | Direction et amplitude de l'entrée. translateY(-10px) pour descendre depuis le haut ; translateX(-10px) pour glisser depuis la gauche ; augmentez à 20–30 px pour un mouvement plus ample. |
| border-radius: 8px | 8 px | Rayon des coins sur le bouton et le toast. 0 = cartes angulaires ; 24px = pill ; la valeur est répétée deux fois dans le CSS. |
| font-size: 0.8rem | 0,8 rem (toast) | Taille du texte dans le toast. Le bouton est à 0,85 rem. Montez à 0,9–1 rem si le toast sert de message principal plutôt que de confirmation secondaire. |
| gap: 12px | 12 px | Espace vertical entre le bouton déclencheur et le toast dans le conteneur flex. Réduisez à 6 px pour un toast collé juste sous le bouton. |
| padding: 10px 16px | 10px 16px (toast) | Rembourrage interne du toast. Le bouton utilise 10px 20px. Réduisez à 6px 12px pour un toast compact dans un dashboard dense. |
Le code ne fournit pas de JS — ajoutez simplement : btn.addEventListener('click', () => { toast.classList.add('show'); setTimeout(() => toast.classList.remove('show'), 3000); });. Remplacez 3000 par la durée souhaitée en ms, ou retirez le setTimeout pour un toast persistant jusqu'au prochain clic.
Le code livré est CSS pur — aucune Web Audio API n'est présente dans le fichier source. Pour ajouter le son de cloche, créez un AudioContext, deux oscillateurs (triangle ~880 Hz + sine ~1320 Hz) avec une enveloppe courte (attack 10 ms, decay 500 ms) et appelez oscillator.start() sur le même clic que la classe .show. Aucune modification du composant CSS n'est nécessaire.
Deux options : CSS uniquement — ajoutez @media (prefers-reduced-motion: reduce) { .snd-notif-toast { transition: none; } } pour supprimer la transition et afficher le toast instantanément. Ou JS — vérifiez window.matchMedia('(prefers-reduced-motion: reduce)').matches avant de lancer un éventuel son et passez transition-duration: 0s dynamiquement.