Distorsion✨ Premium

Chrome Reflection

Bouton pilule en métal poli : au survol ou au focus, un reflet blanc oblique traverse sa moitié haute, puis repasse en sens inverse quand on le quitte.

CSSMetalShine

Mis à jour le

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

3 exemples d'usage

Bouton « Faire une offre » sur l'annonce d'une moto ancienne (Garage Vorbrenne) — Chrome Reflection exemple 1

① Bouton « Faire une offre » sur l'annonce d'une moto ancienne (Garage Vorbrenne)

QuandSur la fiche d'un bicylindre de 1971 restauré, sous le kilométrage et le prix, le bouton chromé fait passer son reflet quand la souris s'en approche ou qu'on l'atteint au clavier.
PourquoiLe métal poli rappelle les chromes de la moto et attire l'œil vers la seule action de la page, sans couleur criarde sur un fond sombre.
Réglages--chm-pad: 12px 22px, --chm-font: 19px, reflet ralenti à 0,7 s (--chm-speed), contour doré #d6a75c. Pour la capture, la scène donne puis retire le focus au bouton toutes les 1,6 s, un état que le CSS vendu prévoit.
Touches de sélection d'un juke-box en ligne (Dovranne Diner) — Chrome Reflection exemple 2

② Touches de sélection d'un juke-box en ligne (Dovranne Diner)

QuandHuit touches A1 à B4, chacune avec un titre ; le reflet passe sur la touche survolée, et un clic met le titre « en lecture » sur l'afficheur.
PourquoiLes touches métalliques reprennent la façade d'un vrai juke-box ; le reflet qui suit la souris de touche en touche donne envie d'appuyer.
RéglagesUne racine pour les huit boutons, disposée en grille de 4 colonnes par le CSS de la page, --chm-pad: 7px 8px, --chm-font: 19px, --chm-radius: 14px, boutons de 58 px de haut sur deux lignes (code et titre). L'afficheur est mis à jour par la page.
Menu d'une borne de karaoké pilotée à la télécommande (Chantevaux) — Chrome Reflection exemple 3

③ Menu d'une borne de karaoké pilotée à la télécommande (Chantevaux)

QuandSur l'écran de la salle, trois grandes touches « Chanter seul », « Duo » et « Classement » ; les flèches de la télécommande déplacent le focus et le reflet passe sur chaque touche atteinte.
PourquoiSur un écran de télévision, le focus est le seul repère : un reflet qui balaie la touche choisie se voit de loin, mieux qu'un simple contour.
RéglagesTouches de 140 × 84 px, --chm-font: 19px, --chm-radius: 22px, halo rose ajouté par la page sur la touche qui a le focus. Dans la capture, la page envoie une flèche droite toutes les 1,1 s pour simuler la télécommande.

Comment ça marche

Le bouton .chm-btn est un vrai <button>. Son aspect chromé vient d'un dégradé vertical blanc, gris clair, gris moyen au centre, puis gris clair et blanc, complété par trois ombres : une ombre portée sous le bouton, un filet clair en haut et un filet sombre en bas, à l'intérieur. Une couleur unie #d4d4d4 est déclarée sous le dégradé, au cas où il ne s'afficherait pas.

Le reflet est le pseudo-élément ::before : une bande de la largeur du bouton et de la moitié de sa hauteur, en dégradé transparent, blanc à 80 %, transparent, inclinée de 25°. Il attend hors du bouton, à gauche (left: -100%). Au survol ou au focus, il part à left: 200% en 0,5 s (--chm-speed) : on le voit balayer le haut du bouton une fois.

C'est une transition, pas une boucle : quand le survol ou le focus cesse, le reflet refait le chemin de droite à gauche. Tant que la souris reste dessus, rien ne bouge. Le débordement est coupé par overflow: hidden.

Accessibilité

  • Vrai bouton : <button type="button"> avec son texte réel, activable à Entrée et Espace, annoncé comme bouton par les lecteurs d'écran.
  • Clavier : le focus déclenche le même passage du reflet que le survol, et un contour (--chm-ring) apparaît quand le focus vient du clavier. Dans Safari, la touche Tab ne s'arrête pas sur les boutons tant que l'option « Appuyer sur Tab pour sélectionner chaque élément » n'est pas cochée (mesuré dans WebKit) ; c'est un réglage du navigateur, pas de l'effet.
  • Toucher : toucher le bouton déclenche le passage du reflet (mesuré dans Chromium, Firefox et WebKit avec écran tactile simulé).
  • Mouvement réduit : avec prefers-reduced-motion: reduce, le reflet ne glisse plus ; au survol ou au focus, il s'affiche immobile sur la moitié haute du bouton, à 55 % d'opacité.
  • Contraste : le texte #1a1a1a tombe au milieu du bouton, là où le métal est le plus sombre (#737373) : le rapport y est de 3,7:1. C'est suffisant pour le texte gras de 1,25rem fourni (grand texte au sens des WCAG, seuil 3:1), pas pour un texte plus petit : gardez au moins 18,7 px en gras, ou modifiez le dégradé pour éclaircir son centre.

Compatibilité navigateur

CSS seul, aucun JavaScript. Mesuré dans Chromium 151, Firefox 153 et le WebKit 26.5 de Playwright : 0 erreur, deux copies indépendantes, survol, focus, toucher, 390 px et mouvement réduit. Le vérificateur copier-coller ne signale plus de « texte invisible » depuis l'ajout de la couleur de secours. Versions minimales d'après @mdn/browser-compat-data : les variables CSS fixent le plancher (Chrome 49, Firefox 31, Safari 9.1).

Chrome 49+✓ Complet (mesuré dans la version 151)
Firefox 31+✓ Complet (mesuré dans la version 153)
Safari 9.1+✓ Complet ; Tab s'arrête sur le bouton seulement si le réglage clavier de Safari le permet (mesuré dans WebKit)
Edge 16+✓ Complet
Safari iOS 9.3+✓ Complet, reflet au toucher (mesuré dans WebKit tactile)
Chrome Android 49+✓ Complet (moteur Chromium)

Sans :focus-visible (avant Safari 15.4 et Chrome 86), le contour de focus ne s'affiche pas ; le reflet, lui, passe toujours au focus.

Le code

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

index.html — structure
<div class="fx-0264-root"><button class="chm-btn" type="button">CHROME</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
--chm-pad 20px 50px Marges intérieures du bouton (hauteur puis largeur).
--chm-font 1.25rem Taille du texte.
--chm-radius 50px Arrondi des coins : 50px donne une pilule, 12px un bouton rectangulaire.
--chm-speed .5s Durée d'un passage du reflet, à l'aller comme au retour.
--chm-text #1a1a1a Couleur du texte ; restez sur une teinte très sombre pour garder le contraste sur le métal.
--chm-ring #e5e5e5 Couleur du contour au focus clavier.
--chm-bg et --chm-min-h #0a0a0f et 300px Fond et hauteur minimale de la racine ; transparent et 0 pour placer le bouton dans votre page.

FAQ

Oui : chaque .chm-btn a son propre reflet. La racine est un conteneur flex centré ; changez sa disposition (grille, colonne) dans votre CSS si besoin.
Parce que c'est une transition CSS : à la fin du survol, la propriété left revient à sa valeur de départ, avec la même durée. Pour un seul passage, ajoutez transition: none sur .chm-btn::before hors survol et gardez la transition dans la règle :hover.
Oui : la classe chm-btn fonctionne sur un <a href>, puisque le reflet suit aussi :hover et :focus. Ajoutez display: inline-block et text-decoration: none au lien.