Hover✨ Premium

Ripple Click

Un bouton Material Design : au clic, une onde circulaire part exactement du point de contact, s'élargit et disparaît en fondu. Trois variantes visuelles (violet, contour, sombre), JavaScript minimal.

CSSJSMaterial

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

Boutons d'action d'une application de gestion de tickets de support — outil interne d'une DSI de grande distribution — Ripple Click exemple 1

① Boutons d'action d'une application de gestion de tickets de support — outil interne d'une DSI de grande distribution

QuandBoutons Assigner, Résoudre, Escalader sur fiches de tickets ; au clic chaque bouton émet une onde radiale qui confirme l'action sans rechargement de page. Boutons de 120×40 px.
PourquoiLe retour Material est le retour tactile standard des applications natives ; il rassure l'opérateur que son clic a été enregistré même si la requête réseau est lente.
RéglagesVariante outline sur fond de liste sombre, onde violette, libellés courts en 14 px sans sérif.
Bouton de signature électronique d'un contrat de prestation — portail client d'un cabinet de conseil en droit social — Ripple Click exemple 2

② Bouton de signature électronique d'un contrat de prestation — portail client d'un cabinet de conseil en droit social

QuandBouton Je signe et j'accepte (variante sombre, 260×56 px) ; l'onde radiale confirme visuellement l'acte contractuel.
PourquoiUne onde radiale sur un acte de signature donne un caractère solennel et délibéré à l'action — un clic se transforme en acte.
RéglagesVariante sombre (mi-ripple-btn--dark), 260×56 px, onde blanche, texte en 18 px.
Bouton de déclenchement d'une alerte dans un tableau de bord de supervision industrielle — interface SCADA d'une installation de traitement d'eau — Ripple Click exemple 3

③ Bouton de déclenchement d'une alerte dans un tableau de bord de supervision industrielle — interface SCADA d'une installation de traitement d'eau

QuandBouton Déclencher l'alerte niveau 2 (variante outline) ; l'onde radiale informe l'opérateur que l'action a bien été prise en compte.
PourquoiUn retour visuel fort et localisé sur le bouton d'alerte réduit le risque d'appui multiple par doute lors d'une situation d'urgence.
RéglagesVariante outline avec bordure rouge d'alerte, 180×48 px, onde rouge semi-transparente.

Comment ça marche

La racine .fx-0364-root (250 px de haut, fond rgb(26, 26, 36)) centre trois boutons .mi-ripple-btn dans .mi-ripple-scene. Chaque bouton porte l'attribut data-ripple qui signale au script qu'il doit recevoir l'effet. Les boutons ont position: relative; overflow: hidden : c'est ce overflow: hidden qui contient l'onde dans la zone du bouton.

Au clic, le script calcule la position du pointeur dans le bouton via getBoundingClientRect() et crée un span.mi-ripple absolument positionné. Sa taille est le double du plus grand côté du bouton (pour couvrir les coins), son centre correspond au point de clic, et il anime via @keyframes miRippleOut : scale de 0 à 1 en 0,6 s avec ease-out et opacité de 0,3 à 0 sur la même durée. À la fin de l'animation, le span est supprimé du DOM pour éviter l'accumulation.

Trois variantes CSS changent uniquement les couleurs : .mi-ripple-btn--purple (fond violet #6366f1, onde blanche), .mi-ripple-btn--outline (fond transparent, bordure violette, onde violette), .mi-ripple-btn--dark (fond sombre #1e1b4b, onde blanche). La structure HTML et l'animation sont identiques pour les trois. Le script détecte prefers-reduced-motion : si activé, aucun span n'est créé et l'onde ne se joue pas.

Accessibilité

  • Clavier : chaque bouton 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.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, le JavaScript ne crée aucun span d'onde et le CSS supprime l'animation de l'onde. Les boutons restent pleinement fonctionnels visuellement (couleurs, hover, focus) sans aucun élément animé.
  • Toucher : l'onde part du point de toucher sur un écran tactile (via l'événement click qui reporte les coordonnées du doigt). La zone de clic minimale de 44×44 px est respectée pour chaque variante.

Compatibilité navigateur

CSS (overflow: hidden, animations @keyframes) + 0,6 Ko de JavaScript (getBoundingClientRect, createElement, addEventListener, matchMedia), aucune dépendance. Vérifié dans Chromium 151 : onde au point de clic, suppression du span en fin d'animation, trois variantes, mouvement réduit sans onde, 0 erreur. Les captures d'aperçu montrent l'animation rejouée en boucle automatique par le code de scène : ce comportement n'est pas inclus dans le code vendu.

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, les boutons sont cliquables et restent visuellement corrects (hover, focus) mais l'onde ne s'affiche pas. Sans CSS animations, le span créé par le JS reste visible jusqu'à sa suppression sans animation.

Le code

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

index.html — structure
<div class="fx-0364-root">
  <div class="mi-ripple-scene">
    <button class="mi-ripple-btn mi-ripple-btn--purple" data-ripple="">Libellé</button>
  </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
Variante de couleur (HTML — classe modificatrice sur .mi-ripple-btn) 3 variantes : --purple, --outline, --dark Créez une nouvelle variante en CSS en surchargeant background, color, border et la couleur de .mi-ripple. Pas de modification JavaScript nécessaire.
Durée et courbe de l'onde (CSS — durée et easing de @keyframes miRippleOut) 0,6 s, ease-out Réduisez à 0,3 s pour une onde vive et discrète ; montez à 1 s pour une onde lente et contemplative. ease-in donne un départ lent et une fin rapide.
Opacité maximale de l'onde (CSS — valeur de départ de opacity dans @keyframes miRippleOut) 0,3 0,15 est très discret ; 0,5 est plus visible. Sur la variante outline, l'onde violette à 0,3 est déjà très lisible sur fond clair.
Activation sur n'importe quel élément (HTML — attribut data-ripple) Sur les trois boutons de la démo Ajoutez data-ripple à n'importe quel élément focusable (<a>, <button>) dans la même racine. Assurez-vous que l'élément a position: relative; overflow: hidden.

FAQ

Oui. Chaque clic crée un nouveau span d'onde indépendant. Plusieurs ondes peuvent coexister simultanément sur le même bouton, chacune partant du point de clic correspondant. Chaque span est supprimé du DOM à la fin de sa propre animation.
Non. overflow: hidden sur le bouton contient l'onde dans sa zone. C'est essentiel pour que l'effet reste propre ; ne supprimez pas cette propriété.
Oui. L'événement click déclenché par un toucher transmet les coordonnées du point de contact. L'onde part bien du doigt, pas du centre. Testé dans Chromium (émulation tactile) ; comportement identique attendu sur appareils réels.