Hover✨ Premium

Shine Effect

Un reflet blanc translucide traverse l'élément de gauche à droite en 0,5 s au survol — une seule passe, pseudo-élément ::before, pure CSS.

CSSLight

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

Bouton 'Télécharger la brochure' — site d'un fabricant de menuiseries aluminium — Shine Effect exemple 1

① Bouton 'Télécharger la brochure' — site d'un fabricant de menuiseries aluminium

QuandBouton CTA 300×56 px sur fond indigo ; au survol le reflet parcourt le bouton une fois.
PourquoiUn bouton CTA qui miroite une fois au survol donne une impression de qualité premium sans demander de clic confirmé.
RéglagesBouton 300×56 px avec coins de 12 px ; fond indigo plein ; reflet légèrement accentué (rgba 0.3 en pic) ; zone de survol dans l'ellipse de capture.
Carte de partenaire d'un réseau de pharmacies indépendantes — Shine Effect exemple 2

② Carte de partenaire d'un réseau de pharmacies indépendantes

QuandLogo du partenaire sur fond sombre ; au survol un reflet rapide traverse le logo comme une lumière.
PourquoiUn reflet discret évoque un objet qu'on retourne dans la lumière ; il donne vie à des logos statiques sans transformer leur mise en page.
RéglagesCartes 180×120 px en grille ; fond sombre semi-transparent ; logos centrés ; cibles sur l'ellipse.
Badge de certification — espace formateur d'une plateforme e-learning pour agents immobiliers — Shine Effect exemple 3

③ Badge de certification — espace formateur d'une plateforme e-learning pour agents immobiliers

QuandBadge 'Certifié loi Alur' rectangulaire ; au survol le reflet de lumière traverse le badge, donnant l'impression d'un insigne métallique.
PourquoiUn badge de certification imite un objet physique gravé ; le reflet confirme la nature 'officielle' de la certification.
RéglagesBadge 200×80 px ; fond dégradé métal gris clair ; texte en gras ; reflet en 0.3 s pour paraître plus rapide.

Comment ça marche

La racine .fx-0346-root centre un bouton de 200 px. Un pseudo-élément ::before de même taille que l'élément porte un dégradé linéaire horizontal : transparent → rgba(255,255,255,0.2) → transparent, soit un reflet blanc étroit au centre. Au repos, il est positionné à left: -100% (hors de vue à gauche). Au survol, left: 100% le déplace hors de vue à droite. transition: left 0.5s anime ce déplacement : le reflet traverse l'élément une seule fois en diagonale douce, sans boucle.

overflow: hidden sur l'élément masque le reflet quand il sort des bords. La seule passe au survol (pas de boucle @keyframes) est volontaire : le reflet ne doit pas s'animer en permanence pour ne pas distraire. Sous mouvement réduit, le déplacement est supprimé et le pseudo-élément reste à left: -100% (caché). La règle :focus-visible déclenche le même transit qu'au survol.

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, la transition est désactivée et le pseudo-élément reste caché (left: -100%) même au survol. Aucun mouvement, aucun reflet. L'élément garde son apparence au repos.
  • Clavier : l'élément est un <button> nativement focusable. :focus-visible déclenche le reflet et ajoute un contour indigo de 2 px. Le reflet en translation peut être subtil : le contour sert de signal principal pour les utilisateurs clavier.
  • Toucher : sur écran tactile, le tap peut ne pas déclencher la transition :hover sur tous les navigateurs. L'effet est un enrichissement visuel — l'interaction fonctionnelle n'en dépend pas.
  • Rôle décoratif : le reflet est purement cosmétique. Aucune information n'est portée par le mouvement du pseudo-élément. L'élément reste lisible et utilisable sans l'effet.

Compatibilité navigateur

Pure CSS. Propriétés : ::before, left (transition), overflow: hidden, :focus-visible. Vérifié dans Chromium et Firefox : reflet visible, deux copies indépendantes, 0 erreur. Le déplacement left déclenche un repaint — pour de meilleures performances, remplacez par transform: translateX (voir FAQ).

Chrome 86+✓ Complet (mesuré)
Firefox 85+✓ Complet (mesuré)
Safari 15.4+✓ Complet (:focus-visible)
Edge 86+✓ Complet (moteur Chromium)
Mobile iOS 15.4+✓ Complet
Android Chrome 86+✓ Complet (mesuré)

Sans :focus-visible (avant 2021), le focus clavier déclenche le reflet via :focus uniquement si le navigateur le supporte — l'effet peut apparaître aussi au clic sur certains navigateurs.

Le code

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

index.html — structure
<div class="fx-0346-root">
  <button class="shn-box shn-shine" type="button">
    <span>Votre texte</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
Intensité du reflet (CSS — rgba(255,255,255,0.2)) 20 % blanc 0.1 est quasi invisible ; 0.4 est très brillant. Sur fond clair, réduisez plutôt l'opacité ou utilisez une couleur différente du blanc pur.
Durée (CSS — 0.5s) 0,5 s 0,25 s crée un éclair rapide ; 0,8 s un balayage lent.
Largeur du reflet (CSS — width: 100% sur ::before) 100 % de l'élément Réduire à 50 % crée un reflet plus étroit et plus visible. Ajustez le dégradé pour garder le pic de blanc au centre.
Performances (remplacement de left par transform) transition left (repaint) Remplacez left: -100%/100% par transform: translateX(-200%)/translateX(200%) sur ::before pour utiliser la couche du compositeur et éviter le repaint — surtout utile si plusieurs éléments sont animés simultanément.
Répétition (ajouter un @keyframes en boucle) une seule passe au survol Pour un reflet continu, remplacez la transition par animation: shn-loop 2s linear infinite avec un keyframes qui anime left de -100 % à 100 %. Activez l'animation au survol et désactivez-la à la sortie.

FAQ

Le reflet ne passe qu'une fois parce que l'animation left: -100% → 100% se termine hors de vue. Pour plusieurs passes, utilisez un @keyframes sur translateX avec iteration-count: 2 ou infinite, déclenché au :hover.
Oui, c'est l'effet voulu : overflow: hidden sur l'élément masque le reflet dès qu'il sort de ses bords. Retirez cette propriété si vous voulez que le reflet déborde (par exemple sur une image sans cadre strict).
Oui. Inclinez le dégradé dans ::before : background: linear-gradient(60deg, transparent, rgba(255,255,255,0.2), transparent) et augmentez la largeur du pseudo-élément à 150 % ou 200 % pour que le reflet traverse entièrement.