Cartes✨ Premium

Shine Effect

Reflet lumineux semi-transparent qui traverse la carte en diagonale au survol — pur CSS, pseudo-élément ::before et transition sur translateX, zéro JavaScript.

CSSHoverLight

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Cartes comprend 41 effets, dont 6 gratuits. Découvrir la catégorie →

3 exemples d'usage

Grille de tarifs — Plans d'abonnement en survol — Shine Effect exemple 1

① Grille de tarifs — Plans d'abonnement en survol

QuandL'utilisateur compare des formules sur une page de pricing et passe la souris sur les cartes pour les distinguer.
PourquoiLe reflet diagonal signal l'interactivité et renforce la perception premium de chaque plan sans alourdir la mise en page — discret pendant le scan, visible à l'intention de clic.
RéglagesOpacité du reflet réduite à rgba(255,255,255,.08) pour rester sobre ; --radius-xl: 1.25rem pour des cartes plus arrondies ; transition à .5s pour un glissement velouté.
Section fonctionnalités — Grille de cartes produit en hero — Shine Effect exemple 2

② Section fonctionnalités — Grille de cartes produit en hero

QuandLe visiteur survole une grille de 3 ou 4 cartes de fonctionnalités sur une landing page pour explorer les arguments clés du produit.
PourquoiLe shine donne une impression de profondeur et d'interactivité à des éléments par nature statiques, guidant l'œil d'une carte à l'autre sans recourir à des animations lourdes.
RéglagesReflet standard à rgba(255,255,255,.1) ; angle conservé à 45deg ; transition: transform .6s ease-out pour un freinage naturel en fin de traversée.
Catalogue de produits — Fiche template ou asset téléchargeable — Shine Effect exemple 3

③ Catalogue de produits — Fiche template ou asset téléchargeable

QuandL'utilisateur navigue dans une galerie de templates, plugins ou assets et survole les fiches pour repérer ce qui l'intéresse avant de cliquer.
PourquoiLe reflet imite la surface brillante d'un packaging physique — il déclenche la même association mentale de qualité et donne envie d'approfondir la fiche.
RéglagesReflet plus marqué à rgba(255,255,255,.15) pour ressortir sur des visuels colorés ; transition: transform .4s pour un flash plus vif.

Comment ça marche

L'effet repose entièrement sur le pseudo-élément ::before de .card-shine. Ce pseudo-élément est surdimensionné à 200 % × 200 % de la carte (top: -50%; left: -50%; width: 200%; height: 200%) et porte un linear-gradient(to right, transparent 0, rgba(255,255,255,.1) 50%, transparent 100%) — une bande blanche centrale qui s'estompe de part et d'autre. Pivoté à 45° par rotate(45deg), ce dégradé horizontal devient une bande diagonale qui traverse la carte de coin en coin quelle que soit sa taille.

overflow: hidden sur .card-shine sert de fenêtre de découpe : le pseudo-élément dépasse largement les bords de la carte, mais seule la portion dans ses limites est visible. À l'état de repos, transform: rotate(45deg) translateX(-100%) place le pseudo-élément hors champ à gauche — le translateX s'applique dans le repère pivoté, donc selon l'axe diagonal. Au survol, transform: rotate(45deg) translateX(100%) le déplace de l'autre côté ; transition: transform .6s anime ce décalage et produit le glissement lumineux.

Trois variables CSS (--bg-card, --border, --radius-xl) centralisent le thème de la carte. Aucune librairie externe, aucun script : ajouter la classe card-shine à n'importe quel élément avec position: relative et overflow: hidden active l'effet immédiatement, sans configuration.

Accessibilité

  • prefers-reduced-motion absent : aucun bloc @media (prefers-reduced-motion: reduce) n'est présent dans le code fourni — l'animation se déclenche même si l'OS signale une préférence pour réduire le mouvement. Pour la conformité WCAG 2.3, ajoutez @media (prefers-reduced-motion: reduce) { .card-shine::before { transition: none; } }.
  • L'effet est déclenché exclusivement par :hover — sur écran tactile (iOS, Android) l'événement ne se produit pas au toucher, la carte s'affiche dans son état statique sans aucune erreur.
  • Le pseudo-élément ::before est purement décoratif : il est absent de l'arbre d'accessibilité et invisible aux lecteurs d'écran.
  • La structure de la carte ne définit aucun attribut ARIA par défaut — la sémantique (rôle, label, état) est portée par le contenu que vous placez à l'intérieur.
  • Contraste : le reflet blanc à 10 % d'opacité est négligeable sur le texte sous-jacent. Si vous augmentez l'opacité au-delà de 25 %, vérifiez le ratio de contraste WCAG AA lors du passage du reflet.

Compatibilité navigateur

Requiert uniquement CSS Transitions et les pseudo-éléments — supportés partout depuis de nombreuses années. Zéro dépendance externe.

Chrome 60+✓ Complet
Firefox 55+✓ Complet
Safari 10.1+✓ Complet
Edge 79+✓ Complet
Mobile iOS✓ Hover inactif
Android Chrome✓ Hover inactif

Sans support :hover (appareils tactiles) ou sans CSS Transitions, la carte s'affiche normalement dans son état statique — aucune erreur JS, aucun contenu masqué.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="card-demo card-shine">
  <!-- Votre contenu : titre, prix, liste, image… -->
  <h3>Titre</h3>
  <p>Description courte</p>
  <button>Action →</button>
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

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

Option / propriétéDéfautEffet
--bg-card #12121a Couleur de fond de la carte — remplacez par votre couleur brand ou un dégradé via la propriété background directement sur .card-shine.
--border rgba(255,255,255,0.08) Couleur et opacité du liseré de la carte — montez à rgba(255,255,255,0.20) pour un bord plus visible, passez à une couleur brand pour un encadrement coloré.
--radius-xl 1rem Rayon d'arrondi des coins — 0 pour des angles droits, 1.5rem pour des cartes très arrondies, 50% pour un rond (avec largeur = hauteur).
rgba(255,255,255,.1) dans ::before 0.1 Luminosité du reflet : .05 = très subtil, .2 = prononcé, .35 = vif. Vérifiez le contraste texte au-delà de 0.25.
rotate(45deg) dans transform 45deg Angle du reflet : 30deg pour plus horizontal (reflet doux plat), 60deg pour plus vertical, 0deg pour un balayage purement horizontal de gauche à droite.
transition: transform .6s .6s Durée du balayage : .3s = flash vif, 1s = glissement cinématique lent. Ajoutez ease-out pour un freinage naturel en fin de course.

FAQ

Non — l'effet est 100 % CSS. Il suffit d'ajouter les classes card-demo et card-shine à votre élément et de copier le CSS. Aucune dépendance, aucun script. Compatible Angular, React, Vue, Svelte : appliquez simplement les classes sur l'élément conteneur dans votre template.
Non sur la grande majorité des appareils tactiles : :hover ne se déclenche pas au toucher sur iOS et Android. La carte s'affiche dans son état statique, sans aucune erreur. Pour un retour tactile, combinez avec un état :active ou une animation déclenchée au :focus.
Oui — le pseudo-élément ::before avec transform crée son propre contexte d'empilement et s'affiche au-dessus du contenu de flux. À 10 % d'opacité c'est visuellement négligeable. Pour le maintenir derrière le texte, ajoutez z-index: -1 sur .card-shine::before et un z-index non-auto sur .card-shine.