Utilitaires✨ Premium

Border Ripple

Bouton dont chaque clic, au doigt ou au clavier, envoie trois ondes de bordure qui s'élargissent et un point lumineux qui fait le tour du cadre.

JSClickRipple

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

Bouton « Valider la commande » d'une borne de restauration — Border Ripple exemple 1

① Bouton « Valider la commande » d'une borne de restauration

QuandSur la borne de Grillorn, le récapitulatif (pain brioché effiloché fumé, frites au romarin, citronnade, 19 €) occupe la gauche ; à droite, un grand bouton orange « Valider la commande ». Au toucher, les ondes partent du bouton et la ligne dessous annonce « Envoyée en cuisine · n° 482 ».
PourquoiSur un écran tactile sans vibration ni son, les ondes confirment que le doigt a bien été pris en compte ; à la taille d'un grand bouton, elles se voient même de loin.
Réglagesbrr-box de 196 × 170 px, coins de 18 px, bord de 3 px ; --brr-color: #fb923c, --brr-light: #fed7aa, --brr-rest et --brr-hover orangés. La capture clique le vrai bouton (click()) toutes les 1,8 s ; le message vient du script de la scène.
Tâches cochées dans la liste d'un chantier — Border Ripple exemple 2

② Tâches cochées dans la liste d'un chantier

QuandSur la liste du jour du chantier Tervaneuil, chaque tâche (coffrage, menuiseries, réservations électriques…) est une ligne cliquable avec le prénom de la personne chargée. Cliquer une ligne la coche ou la décoche, et une onde bleue fait le tour de la ligne.
PourquoiÀ cette petite échelle, l'onde est un accusé de réception discret : on voit quelle ligne vient de changer, même si l'œil était sur une autre partie de l'écran.
Réglagesbrr-box sur des lignes de 46 px de haut en pleine largeur (une racine par tâche), bord de 1 px gris, --brr-color: #2563eb, --brr-light: #93c5fd. Les clics viennent de la souris de la capture ; la case cochée est gérée par la scène.
Pavés d'un jeu de rythme — Border Ripple exemple 3

③ Pavés d'un jeu de rythme

QuandDans Tambrello, quatre pavés D, F, J et K attendent les notes qui tombent. Chaque frappe, au clavier ou au doigt, fait jaillir les ondes de la couleur du pavé et ajoute 50 points au score.
PourquoiLe retour doit être immédiat et lisible au rythme de la musique : l'onde part à l'instant du clic, et chaque couleur de pavé garde ses propres ondes.
RéglagesQuatre brr-box de 84 px de haut, chacun avec ses couleurs (--brr-color rose, bleu, vert, ambre). Les touches D F J K appellent click() sur le bon pavé ; une partie de démonstration en frappe un toutes les 420 ms.

Comment ça marche

L'effet est un vrai <button type="button"> de classe brr-box : bord de 2 px violet pâle, qui devient plus net au survol. Il contient trois <span class="brr-pulse"> (des cadres de 2 px invisibles au repos) et un <span class="brr-travel"> qui porte le point lumineux, puis votre texte.

À chaque click (souris, doigt, Entrée ou Espace), le script relance les trois cadres à 200 ms d'écart : chacun part collé au bouton, s'écarte jusqu'à 20 px en arrondissant ses coins et s'efface en 1 s. En même temps, la classe brr-clicking lance le point : un halo de 40 px dégradé en #a78bfa qui longe le haut, la droite, le bas puis la gauche en 1,2 s, découpé sur le bord du bouton. Cliquer de nouveau avant la fin annule les minuteries en cours et relance tout depuis le début.

Le script cherche chaque .fx-0773-root et le bouton qu'elle contient : chaque copie a ses ondes et ses minuteries, et coller le script deux fois n'ajoute pas un second écouteur. Les animations s'appellent brr-pulse et brr-travel, des noms qu'aucun autre effet de la bibliothèque n'utilise.

Accessibilité

  • Vrai bouton : il reçoit le focus avec Tab, se déclenche avec Entrée ou Espace et s'annonce comme « bouton » suivi de son texte. Au :focus-visible, un contour de 2 px s'affiche à 4 px du bord. (La version d'origine était une <div> impossible à atteindre au clavier.)
  • Décor muet : les ondes et le point sont des <span> vides en aria-hidden="true" ; le nom du bouton reste son seul texte.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, ni onde ni point qui voyage ; le clic allume le contour (bord clair, anneau de 4 px et lueur) pendant 1,2 s, sans transition, puis tout revient au repos.
  • Retour visuel seulement : l'onde ne dit rien aux lecteurs d'écran. Si le clic produit un résultat (commande envoyée, tâche cochée), annoncez-le avec du texte, par exemple dans une zone aria-live="polite".

Compatibilité navigateur

CSS (animation de la propriété inset : Chrome 87, Firefox 66, Safari 14.1 ; :focus-visible : Chrome 86, Firefox 85, Safari 15.4) et 1,2 Ko de JavaScript. Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 (Playwright) : deux copies dont la 2e cliquée seule, Tab puis Entrée, appui du doigt, 390 px sans débordement, mouvement réduit sans aucune animation après le clic, 0 erreur.

Chrome 87+✓ Complet (mesuré)
Firefox 85+✓ Complet (mesuré)
Safari 15.4+✓ Complet (mesuré dans WebKit)
Edge 87+✓ Complet (moteur Chromium)
Mobile iOS 15.4+✓ Moteur WebKit, non vérifié sur appareil
Android Chrome 87+✓ Complet (moteur Chromium)

Safari 14.1 à 15.3 : tout fonctionne, avec l'anneau de focus du navigateur à la place du contour violet. Sans JavaScript, le bouton reste un bouton, sans onde.

Le code

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

index.html — structure
<div class="fx-0773-root">
  <button type="button" class="brr-box">
    <span class="brr-pulse" aria-hidden="true"></span>
    <span class="brr-pulse" aria-hidden="true"></span>
    <span class="brr-pulse" aria-hidden="true"></span>
    <span class="brr-travel" aria-hidden="true"></span>
    …
  </button>
</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
Couleur des ondes (CSS — --brr-color) #6366f1 Couleur des trois cadres qui s'élargissent.
Couleur du point (CSS — --brr-light) #a78bfa Halo qui fait le tour, contour de focus et lueur du mode mouvement réduit.
Bord au repos et au survol (CSS — --brr-rest, --brr-hover) rgba(99, 102, 241, .3) et .5 Couleur du bord de 2 px ; --brr-hover sert aussi d'anneau en mouvement réduit.
Portée des ondes (CSS — inset: -20px dans @keyframes brr-pulse) 20 px Distance atteinte par chaque onde. Laissez au moins autant d'espace libre autour du bouton.
Décalage et nombre (JS — i * 200, HTML — .brr-pulse) 3 ondes, 200 ms d'écart Ajoutez ou retirez des <span class="brr-pulse"> ; le script les prend toutes.
Taille (CSS — width / min-height de .brr-box) 200 × 120 px au moins Le point suit le bord à toutes les tailles, d'une ligne de liste à un bouton plein écran.

FAQ

Oui : ajoutez la classe brr-box à votre <button>, les quatre <span> en premiers enfants, et entourez-le d'un .fx-0773-root, une racine par bouton : le script ne branche que le premier bouton de chaque racine. Gardez-le pour des actions qui restent sur la page : sur un lien qui change de page, l'onde n'aurait pas le temps d'être vue.
Elles sortent de 20 px autour du bouton. Si un parent a overflow: hidden ou si le bouton touche le bord de son conteneur, la partie qui dépasse est coupée. Prévoyez une marge de 20 px, ou réduisez la portée dans @keyframes brr-pulse.
Chaque clic annule les minuteries du clic précédent et relance les trois ondes et le point depuis le départ. Il n'y a jamais d'ondes en double ni de classe oubliée, même après une rafale de clics.