Hover✨ Premium

Notification Bell

Une cloche de notification qui sonne et tremble au clic, fait apparaître un badge compteur, puis glisse un toast de confirmation — trois animations CSS enchaînées en séquence, une seule interaction.

CSSJSNotification

Mis à jour le

Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Hover comprend 48 effets, dont 5 gratuits. Découvrir la catégorie →

3 exemples d'usage

Icône de notifications d'un portail étudiant — plateforme de suivi de cours d'une école d'ingénieurs — Notification Bell exemple 1

① Icône de notifications d'un portail étudiant — plateforme de suivi de cours d'une école d'ingénieurs

QuandIcône cloche dans la barre de navigation du portail ; au clic la cloche vibre, le badge s'incrémente et un toast indique Nouveau message de votre encadrant. Bouton 48×48 px.
PourquoiLa séquence agitation + badge + toast reproduit le comportement natif des notifications mobiles pour une expérience familière.
RéglagesBadge rouge, toast avec le nom de l'encadrant et l'objet du message, clic sur la cloche ouvre le centre de messages.
Alerte de dépassement de seuil dans un tableau de bord d'énergie — outil de suivi de consommation d'une régie municipale — Notification Bell exemple 2

② Alerte de dépassement de seuil dans un tableau de bord d'énergie — outil de suivi de consommation d'une régie municipale

QuandIcône cloche alertée d'un dépassement de consommation ; elle tremble et affiche un toast Dépassement seuil 80 kW. Bouton 44×44 px dans l'interface de supervision.
PourquoiUne cloche qui tremble et affiche un toast localise l'alerte sur son élément source, sans sortir de la page courante.
RéglagesBadge orange (alerte, pas critique), toast avec la valeur mesurée et un bouton Voir les détails.
Rappel de rendez-vous pour un artisan plombier — application de gestion de tournées d'un réseau de techniciens — Notification Bell exemple 3

③ Rappel de rendez-vous pour un artisan plombier — application de gestion de tournées d'un réseau de techniciens

QuandLa cloche de notification signale un rdv dans 30 min ; au survol/clic elle sonne et affiche RDV Dupont — 14h30 — 23 rue des Lilas.
PourquoiUn rappel visuel expressif (agitation + toast) est plus captivant qu'un simple badge rouge sur fond uni.
RéglagesToast avec adresse du client, bouton Voir l'itinéraire dans le toast, badge vert (rdv confirmé).

Comment ça marche

La racine .fx-0366-root (250 px de haut, fond rgb(26, 26, 36)) centre un groupe formé du bouton cloche et du toast. Le bouton .mi-bell-btn contient un SVG de cloche et un span.mi-bell-badge (badge rond rouge, initialement caché). Le .mi-bell-toast est un div de notification positionné juste en dessous du bouton, initialement invisible (opacity: 0; transform: translateY(10px)). La zone de notification a role="status", aria-live="polite" et aria-atomic="true".

Au clic, le script incrémente un compteur interne et met à jour l'aria-label du bouton avec ce nouveau décompte (ex. : Notifications, 4 non lues). Côté CSS, l'ajout de la classe .ringing sur le bouton déclenche @keyframes miBellShake (rotation ±15°, 0,5 s) sur le SVG, et l'ajout de .show-badge fait apparaître le badge avec @keyframes miPopIn (scale 0 → 1,2 → 1 en 0,3 s). Le toast se révèle avec opacity: 1; translateY(0) en transition de 0,3 s. Après 2 s, les classes sont retirées et le toast s'efface.

L'agitation de la cloche, l'apparition du badge et le toast sont indépendants en CSS — leurs animations s'enchaînent via des décalages de transition (transition-delay) plutôt que des setTimeout imbriqués. Seul le retrait automatique des classes après 2 s utilise setTimeout. Le script met aussi à jour la valeur textuelle du badge (badge.textContent) et garde un compteur cohérent entre les clics.

Accessibilité

  • Clavier : le bouton cloche est un vrai <button> ; Tab l'atteint, Espace ou Entrée le déclenche. Le contour de focus (:focus-visible) apparaît à la navigation au clavier.
  • Toast annoncé : le toast a role="status" et aria-live="polite" : son contenu textuel est annoncé par les lecteurs d'écran à son apparition, sans interrompre la lecture en cours (polite).
  • Compteur dans le label : l'aria-label du bouton est mis à jour au clic avec le nombre de notifications non lues. Le badge visuel a aria-hidden="true" pour éviter la double annonce.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, l'agitation de la cloche et la translation du toast sont supprimées. Le badge apparaît et le toast s'affiche par transition d'opacité uniquement, sans mouvement.
  • Toucher : le bouton répond normalement aux événements tactiles. Sa cible de 48×48 px est confortable.

Compatibilité navigateur

CSS (animations @keyframes, transitions, aria-live) + 0,5 Ko de JavaScript (classList, textContent, setAttribute, setTimeout), aucune dépendance. Vérifié dans Chromium 151 : séquence complète, aria-live annoncé, compteur mis à jour, deux copies indépendantes, mouvement réduit sans agitation ni translation, 0 erreur.

Chrome 49+✓ Complet (mesuré)
Firefox 55+✓ Complet
Safari 9+✓ Complet
Edge 79+✓ Complet (moteur Chromium)
Mobile iOS 9+✓ Complet
Android Chrome 49+✓ Complet (moteur Chromium)

Sans JavaScript, la cloche est affichée au repos, le badge et le toast ne s'affichent pas au clic. Sans CSS animations, les changements d'état sont instantanés sans animation de sonnerie ni de glissement.

Le code

Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :

index.html — structure
<div class="fx-0366-root">
  <div class="mi-bell-scene">
    <button class="mi-bell-btn" aria-label="Notifications">
      <svg viewBox="0 0 24 24">
        <path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9M13.73 21a2 2 0 0 1-3.46 0"></path>
      </svg>
      <span class="mi-bell-badge" aria-hidden="true">3</span>
    </button>
    <div class="mi-bell-toast" role="status" aria-live="polite" aria-atomic="true">Nouvelle notification !</div>
  </div>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

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

Option / propriétéDéfautEffet
Contenu du toast (HTML — texte dans .mi-bell-toast) Nouvelle notification ! Remplacez par le message de votre application. Pour un message dynamique, mettez à jour toast.textContent dans le script avant d'ajouter la classe d'affichage.
Durée d'affichage du toast (JS — setTimeout) 2 000 ms Allongez à 4 000 ms pour un message plus long à lire ; réduisez à 1 200 ms pour un toast discret.
Couleur du badge (CSS — background de .mi-bell-badge) Rouge #ef4444 Passez à orange (#f97316) pour une alerte non critique, ou vert (#10b981) pour une notification positive.
Intensité de l'agitation (CSS — @keyframes miBellShake) ±15° en 0,5 s Réduisez à ±8° pour une agitation subtile ; augmentez à ±25° pour une sonnerie plus dramatique. Réduisez la durée à 0,3 s pour une sonnerie vive.

FAQ

Non. Le script vérifie si la classe d'affichage est déjà présente avant d'ajouter de nouvelles classes ; si le toast est déjà visible, le clic remet juste à zéro le setTimeout de retrait. Le compteur continue de s'incrémenter correctement.
Oui. Appelez le gestionnaire de clic depuis votre code en appelant directement la fonction de déclenchement. Veillez à l'exécuter dans le contexte de la bonne racine .fx-0366-root si plusieurs instances coexistent.
Oui. Le .mi-bell-toast est un div ordinaire ; ajoutez-y une icône SVG ou une image avant le texte. Veillez à ce que le texte reste la première information pour les lecteurs d'écran (aria-live lit le contenu textuel du div).