Boutons✨ Premium

Glow Pulse

Un halo indigo qui respire en boucle (20 → 40 px toutes les 2 s) et se fige, plus large, au survol — pour désigner l'action à faire maintenant.

CSSAnimationGlow

Mis à jour le

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

3 exemples d'usage

Étape suivante d'un parcours d'onboarding — Glow Pulse exemple 1

① Étape suivante d'un parcours d'onboarding

QuandChecklist de configuration d'un SaaS : deux étapes cochées, la troisième attend l'utilisateur.
PourquoiLe pouls désigne la seule action utile de l'écran sans bandeau ni flèche ; à 2 s il reste lent. Un seul bouton pulse, c'est ce qui le rend lisible.
RéglagesCycle 2,5 s, halo 16 → 32 px, couleur du halo = couleur primaire de l'application.
Rejoindre un direct — webinaire ou lancement produit — Glow Pulse exemple 2

② Rejoindre un direct — webinaire ou lancement produit

QuandCarte ou hero annonçant un événement en cours, avec un badge « En direct ».
PourquoiLa respiration lumineuse rappelle le témoin d'enregistrement ; le halo qui se fige au survol confirme que l'on est bien sur le bouton d'entrée.
RéglagesCycle 1,5 s (plus pressant), opacités 0,5 → 0,9, couleur rouge #ef4444 pour rejoindre le code couleur « live ».
État vide d'un tableau de bord — Glow Pulse exemple 3

③ État vide d'un tableau de bord

QuandPremier écran d'un compte neuf : aucun projet, une phrase, un bouton de création.
PourquoiL'écran est vide par définition : le pouls lui donne un point de départ. Le halo large fonctionne parce qu'il n'a aucun voisin.
RéglagesCycle 3 s pour un rythme calme, halo 24 → 56 px, survol figé à 64 px.

Comment ça marche

@keyframes glowPulse n'anime qu'une propriété : box-shadow. À 0 % et 100 %, 0 0 20px rgba(99,102,241,.4) ; à 50 %, 0 0 40px rgba(99,102,241,.8) — le rayon de flou et l'opacité doublent à mi-cycle. La couleur du halo est celle du fond du bouton (#6366f1) : il se lit comme une lumière émise par le bouton, pas comme une ombre.

.btn-glow l'applique avec animation: glowPulse 2s ease-in-out infinite (le code livré l'écrit sous sa forme sérialisée, 2s ease-in-out 0s infinite normal none running glowPulse — c'est la même déclaration). ease-in-out dans les deux sens donne une respiration symétrique, sans à-coup aux extrêmes. L'animation démarre au chargement, sans déclencheur.

Au :hover, animation: none (sérialisé auto ease 0s 1 normal none running none) retire la boucle et un box-shadow: 0 0 50px #6366f1 statique, opaque et plus large, la remplace. Aucune transition n'est déclarée sur box-shadow : le passage est instantané, le halo saute à 50 px ; au départ du curseur, l'animation redémarre à son 0 % (20 px), tout aussi instantanément.

Coût de rendu : box-shadow n'est pas une propriété composée par le GPU — chaque image repeint la zone du bouton élargie du flou (jusqu'à 40 px autour). Sans conséquence pour un ou deux CTA ; au-delà, déportez l'ombre sur un pseudo-élément et animez son opacity (voir la FAQ).

Accessibilité

  • prefers-reduced-motion absent du code : le pouls tourne indéfiniment pour tout le monde. Ajoutez @media (prefers-reduced-motion: reduce) { .btn-glow { animation: none; box-shadow: 0 0 20px rgba(99,102,241,.4) } } — le halo reste, fixe, et la mise en avant est conservée.
  • Contraste : texte blanc sur #6366f1 = 4,47:1, juste sous le seuil AA de 4,5:1 pour un texte de 16 px. #4f46e5 donne 6,3:1 — changez le fond et les deux couleurs d'ombre ensemble pour que le halo reste celui du bouton.
  • Le halo porte un sens (« c'est l'action à faire ») qui n'existe que visuellement : un lecteur d'écran entend un bouton ordinaire. Si cette hiérarchie compte (prochaine étape d'un parcours), dites-le dans le libellé (« Étape 3 : connecter le paiement ») ou via aria-describedby.
  • Le code écrit border: none sans toucher à outline : l'anneau de focus natif reste. Sur fond sombre, il peut se confondre avec le halo qui pulse — déclarez .btn-glow:focus-visible { outline: 2px solid #fff; outline-offset: 3px } pour le distinguer.
  • Pulsation à 0,5 Hz, très en dessous du seuil de trois éclairs par seconde (WCAG 2.3.1). Réservez-la à un seul élément par écran : plusieurs boutons qui pulsent s'annulent et ajoutent du bruit visuel. Cible tactile ≈ 52 px de haut, au-dessus du minimum de 44 px.

Compatibilité navigateur

Requiert une animation CSS @keyframes sur box-shadow — supportée partout depuis 2012. Aucun JavaScript, zéro dépendance.

Chrome 26+✓ Complet
Firefox 16+✓ Complet
Safari 9+✓ Complet
Edge 12+✓ Complet
Mobile iOS✓ Complet (:hover collant après un tap)
Android Chrome✓ Complet

Sans support des animations CSS, le bouton s'affiche avec son fond indigo et sans halo au repos ; le halo de 50 px au survol reste, c'est un simple box-shadow.

Le code

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

index.html — structure
<button class="demo-btn btn-glow">Glow Pulse</button>
Débloquer le code complet — 9,90 € TTC/mois

Le code complet HTML + CSS + JS de Glow Pulse, prêt à coller — et les 840 effets. Ou 299 € TTC une fois, accès à vie.

Personnaliser

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

Option / propriétéDéfautEffet
animation-duration (CSS — .btn-glow) 2s Durée d'un cycle complet (gonfle puis dégonfle). 1s = alerte ; 3–4s = respiration lente.
Rayons 20px / 40px (CSS — @keyframes glowPulse) 20px → 40px Étalement du halo au repos et au pic. Gardez un rapport proche de 2 pour que la pulsation se voie ; au-delà de 60 px le halo devient un fond coloré.
Opacités .4 / .8 (CSS — @keyframes glowPulse) .4 → .8 Intensité mini et maxi. Descendez à .2 → .5 sur fond clair, où un halo coloré se voit moins.
Couleur du halo (CSS — rgba(99,102,241,…) ×2 + #6366f1 au survol) indigo #6366f1 Trois occurrences à changer avec le background. Le halo doit garder la couleur du bouton pour se lire comme une émission de lumière.
box-shadow au survol (CSS — .btn-glow:hover) 0 0 50px #6366f1 État figé au survol. 30px pour un simple arrêt du pouls ; ajoutez transition: box-shadow .2s sur .btn-glow pour adoucir le saut.
animation-timing-function (CSS — .btn-glow) ease-in-out linear donne une pulsation mécanique ; cubic-bezier(.4, 0, .6, 1) allonge le temps passé aux extrêmes.
animation-delay (CSS — .btn-glow) 0s Décalez plusieurs boutons (-1s, -.5s) pour qu'ils ne pulsent pas en phase — ou, mieux, n'en faites pulser qu'un.

FAQ

Chaque image repeint le bouton et sa zone de flou (jusqu'à 40 px autour) : box-shadow n'est pas composé par le GPU. Un ou deux boutons : imperceptible. Au-delà, déplacez l'ombre sur un ::after positionné sous le bouton, portant le box-shadow maximal, et animez son opacity de .4 à 1 — opacity est composée, le repaint disparaît.
Deux raisons dans le code : au survol, animation: none coupe net la boucle et pose une ombre fixe de 50 px sans transition ; au départ du curseur, l'animation redémarre à son 0 % (20 px). Ajoutez transition: box-shadow .25s sur .btn-glow pour lisser l'entrée ; le redémarrage à 20 px restera — c'est le fonctionnement de animation en CSS, pas un défaut.
Ajoutez une classe d'état (.is-done) qui déclare animation: none et une ombre légère, et posez-la au clic ou à la réponse du serveur — trois lignes de JS. Un halo qui pulse sur une étape déjà validée est le contresens le plus fréquent avec cet effet.