Utilitaires✨ Premium

Notification Badge

Pastille rouge sur une cloche qui pulse tant qu'il reste du non-lu, rebondit à chaque arrivée et secoue avant de disparaître quand on vide.

JSAnimationBadge

Mis à jour le

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

3 exemples d'usage

Écran de cuisine — nouvelles commandes sur un onglet qu'on ne regarde pas — Notification Badge exemple 1

① Écran de cuisine — nouvelles commandes sur un onglet qu'on ne regarde pas

QuandPendant le service du soir chez Corvadine, le chef suit l'onglet « En cours ». Deux commandes arrivent de la salle : la pastille de l'onglet « À préparer » rebondit de 2 à 3 puis 4, sans quitter l'écran des tickets ; quand une commande passe en cuisine, elle redescend à 3 sans animation.
PourquoiLa pastille dit ce qui se passe ailleurs : rien ne recouvre les tickets en cours, mais une arrivée ne passe pas inaperçue. Le rebond ne joue qu'à la hausse, la baisse reste calme, et le nom lu de l'onglet devient « À préparer 4 commandes à préparer ».
RéglagesContenu du bouton remplacé par le nom de l'onglet, pastille en position: static à sa droite, 21 px. Textes data-nbg-one="commande à préparer", data-nbg-many="commandes à préparer". Arrivées (add()) et départ en cuisine (set(3)) joués en boucle par la scène.
Tableau de recrutement — nouvelle candidature dans une colonne — Notification Badge exemple 2

② Tableau de recrutement — nouvelle candidature dans une colonne

QuandDans la colonne « À trier » d'Embauvia, un clic sur « + Ajouter » fait apparaître une carte et rebondir la pastille de la colonne, de 2 à 3.
PourquoiLa hausse est le résultat direct d'une action : le rebond confirme que l'ajout est compté, sans message supplémentaire. Le lecteur d'écran annonce « 3 nouvelles candidatures ».
RéglagesIcône de boîte de réception à la place de la cloche, bouton de 34 px, pastille 19 px. Le bouton de la scène appelle add() ; pour la capture, il est cliqué par la scène, puis la colonne revient à 2 avec set(2).
Écran de consigne à colis — la pastille se vide quand le colis est retiré — Notification Badge exemple 3

③ Écran de consigne à colis — la pastille se vide quand le colis est retiré

QuandSur la borne Pakorel, une grande icône de colis porte la pastille « 1 ». Le code est saisi, « OK » : la pastille secoue, disparaît et reste absente ; « Colis retiré, porte 14 ouverte » s'affiche.
PourquoiVider doit vraiment vider : après clear(), la pastille reste cachée et seul un nouveau colis la ferait revenir. La secousse marque l'instant où le compteur tombe à zéro.
RéglagesIcône de 132 px, pastille de 44 px et chiffre de 1,3 rem par le CSS de la scène ; textes data-nbg-one="colis en attente". La saisie du code est jouée par la scène, qui appelle clear() puis set(1) pour recommencer.

Comment ça marche

La pastille .nbg-badge est posée dans le coin d'un vrai bouton .nbg-icon (cloche en SVG). Le nombre de départ est celui écrit dans la pastille (3 par défaut). Tant qu'il est supérieur à zéro, la pastille respire en boucle (nbg-pulse, 2 s, agrandissement à 115 %).

Le compteur se pilote par une petite API posée sur la racine : root.fx0744.add() ajoute 1 (ou add(5)), set(12) fixe une valeur, clear() remet à zéro, pulse(false) coupe la respiration, count() lit la valeur. Une hausse fait rebondir la pastille (0,5 s) ; une baisse change le chiffre sans animation ; zéro la fait secouer puis disparaître. Elle ne revient qu'avec un nouvel add() ou set().

Le clic sur la cloche vous appartient : branchez-y l'ouverture de votre liste de notifications, puis appelez clear() une fois qu'elles sont lues. Chaque racine a son propre compteur : deux cloches dans la page, ou le code collé deux fois, ne se mélangent pas.

Accessibilité

  • Vrai bouton nommé : la cloche est un <button>, atteignable au clavier, avec un anneau de focus visible. Son nom est le texte caché .nbg-sr, tenu à jour : « 3 notifications non lues », « Aucune notification non lue ».
  • Changements annoncés : chaque appel à l'API écrit la nouvelle phrase dans une zone role="status", lue poliment. L'état de départ n'est pas annoncé.
  • Textes dans le HTML : data-nbg-one, data-nbg-many et data-nbg-none donnent le singulier, le pluriel et le cas zéro, dans votre langue et votre vocabulaire (messages, commandes, colis).
  • Mouvement réduit : sous prefers-reduced-motion: reduce, ni respiration, ni rebond, ni secousse ; le chiffre change et la pastille disparaît à zéro, sans délai.
  • Couleur seule : le rouge attire l'œil mais le nombre écrit et le nom du bouton portent l'information ; rien ne repose sur la couleur.

Compatibilité navigateur

JavaScript sans dépendance, animations CSS (transform, box-shadow) et SVG en ligne. Le masquage du texte pour lecteurs d'écran utilise clip-path: inset() (Chrome 55, Firefox 54, Safari 9.1). Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 (Playwright) : deux copies pilotées séparément, code collé deux fois, add, clear qui reste à zéro, set, pulse(false), clavier, toucher, 390 px, mouvement réduit, page anglaise, aucun nom ajouté sur window, 0 erreur.

Chrome 55+✓ Complet (mesuré)
Firefox 54+✓ Complet (mesuré)
Safari 10+✓ Complet (mesuré dans WebKit)
Edge 79+✓ Complet (moteur Chromium)
Mobile iOS 10+✓ Moteur WebKit, non vérifié sur appareil
Android Chrome 55+✓ Complet (toucher mesuré)

Sans JavaScript, la cloche et la pastille s'affichent avec le nombre écrit dans le HTML, qui pulse ; seule l'API manque. Dans Safari sur Mac, Tab n'atteint les boutons que si l'option clavier du système est activée.

Le code

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

index.html — structure
<div class="fx-0744-root" data-nbg-one="notification non lue" data-nbg-many="notifications non lues" data-nbg-none="Aucune notification non lue">
  <button class="nbg-icon" type="button">
    <svg class="nbg-bell" aria-hidden="true">…</svg>
    <span class="nbg-badge nbg-pulse" aria-hidden="true">3</span>
    <span class="nbg-sr">3 notifications non lues</span>
  </button>
  <span class="nbg-sr nbg-live" role="status"></span>
</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
Nombre de départ (HTML — texte de .nbg-badge) 3 Écrivez la valeur réelle côté serveur ; 0 démarre pastille cachée.
Piloter le compteur (JS — root.fx0744) — add(k), set(n), clear(), pulse(true|false), count(). Par exemple add() à chaque message reçu par WebSocket.
Textes lus (HTML — data-nbg-one, data-nbg-many, data-nbg-none) « notification non lue », « notifications non lues », « Aucune notification non lue » Vocabulaire et langue de votre interface : « message non lu », « commande à préparer »…
Respiration (HTML — classe nbg-pulse) présente Retirez la classe pour une pastille immobile, ou appelez pulse(false) après lecture.
Icône (HTML — contenu de .nbg-icon) cloche SVG Remplacez le SVG par votre icône, ou par un texte (nom de canal) : la pastille suit le bouton.
Couleurs et taille (CSS — .nbg-badge) dégradé #ef4444 → #dc2626, 22 px Couleur d'alerte de votre charte ; agrandissez min-width, height et font-size ensemble.

FAQ

Non. clear() remet à zéro, la pastille secoue puis disparaît et reste cachée. Elle ne revient que si votre code appelle add() ou set() avec un nombre positif.
Écrivez la valeur de départ dans la pastille au rendu de la page, puis appelez root.fx0744.set(n) à chaque réponse de votre serveur (requête régulière, WebSocket, notification push). set ne rebondit que si le nombre monte.
Rien de lui-même : c'est un vrai bouton, prêt pour votre code. Le cas courant : ouvrir le panneau des notifications, puis appeler clear() quand l'utilisateur les a vues.