SVG✨ Premium

Shape Clip Reveal

Au survol, la face cachée d'une carte s'ouvre dans un cercle qui naît toujours en son centre. Clavier, tap et votre propre contenu (texte ou image) compris.

CSSClip-pathHover

Mis à jour le

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

3 exemples d'usage

Carte des vins d'un caviste : les accords mets-vins s'ouvrent au milieu de la bouteille — Shape Clip Reveal exemple 1

① Carte des vins d'un caviste : les accords mets-vins s'ouvrent au milieu de la bouteille

QuandUne page « Rouges de garde » chez un caviste en ligne : trois bouteilles côte à côte avec appellation, cépage, millésime et prix. Passer sur une bouteille fait naître en son centre un disque bordeaux qui porte les accords (trois plats) et la température de service.
PourquoiLe client compare d'abord les prix, puis cherche quoi servir avec : l'information arrive au moment où il hésite, sans fiche à ouvrir, et le cercle qui part du centre de la bouteille montre clairement à quelle cuvée elle appartient.
RéglagesUne seule racine pour les trois cartes (gap 14 px, fond transparent, --shc-min-h:0). --shc-w:156px, --shc-h:236px, --shc-radius:14px, --shc-front en dégradé brun, --shc-back:linear-gradient(160deg,#6d1830,#b13e58), durée par défaut (0,5 s). Face visible : bouteille dessinée en SVG, texte ; face cachée : liste et conseil de service.
Bouton « Participer » d'une liste de mariage qui se remplit depuis son centre — Shape Clip Reveal exemple 2

② Bouton « Participer » d'une liste de mariage qui se remplit depuis son centre

QuandLa fiche d'un cadeau sur une liste de mariage (service à thé, 180 €, financé à 62 %). Le bouton principal est la carte elle-même : au survol, un disque terracotta part de son milieu et remplace « Participer » par « Offrir 40 € → ».
PourquoiLe montant proposé n'apparaît qu'au moment de l'intention : la fiche reste sobre, et le changement de couleur, symétrique et centré, ne déséquilibre pas un bouton en forme de pilule.
Réglages.shc-card posée sur un vrai <button type="button"> (pas de tabindex), faces en <span>. --shc-w:260px, --shc-h:50px, --shc-radius:25px, --shc-front:#2b2420, --shc-back:linear-gradient(120deg,#c0704f,#d9897a).
Avant / après d'une rénovation : la pièce refaite s'ouvre au centre de la photo d'origine — Shape Clip Reveal exemple 3

③ Avant / après d'une rénovation : la pièce refaite s'ouvre au centre de la photo d'origine

QuandLa page projet d'un atelier d'architecture intérieure : à gauche le titre et les chiffres du chantier, à droite la photo du salon de 1962. Quand la souris entre dans l'image, la version rénovée apparaît dans un cercle qui s'élargit depuis le milieu de la pièce jusqu'à la remplir.
PourquoiLe cercle centré fait office de projecteur : l'œil reste sur le cœur de la pièce pendant que le reste se transforme, ce qui rend la comparaison plus parlante qu'un simple fondu.
RéglagesDeux images de même cadrage avec la classe .shc-media (une par face), étiquettes « Avant » / « Après » par-dessus. --shc-w:100%, --shc-h:270px, --shc-radius:10px. Captures : le cercle s'ouvre et se referme au gré de la souris qui tourne sur la scène.

Comment ça marche

Une carte .shc-card empile deux faces de même taille : .shc-front, visible au repos, et .shc-back, la face à révéler. Chacune accepte n'importe quel contenu : un titre, une liste, un prix, un bouton. Un <img>, un <svg> ou une <video> qui porte la classe .shc-media remplit toute sa face (object-fit: cover) et le reste du contenu s'affiche par-dessus.

La face cachée est découpée par clip-path: circle(0 at 50% 50%), un disque de rayon nul posé au milieu de la carte. Au survol, le rayon monte à 100 % en 0,5 s avec la courbe cubic-bezier(.4,0,.2,1) : le disque grandit depuis le centre, quel que soit le bord par lequel arrive la souris, et finit par couvrir les coins. Quand la souris repart, il se resserre vers ce même centre. Si vous voulez que le cercle parte du pointeur, c'est l'effet Circular Reveal.

Le survol n'est pris en compte que sur les appareils qui survolent vraiment (@media (hover: hover)), ce qui évite l'état « survolé » qui reste collé après un tap. Sur écran tactile, un script de quelques lignes bascule la classe .shc-open : un tap ouvre, le tap suivant referme. Un lien ou un bouton touché à l'intérieur de la carte garde son action normale. La même ouverture se déclenche au focus clavier de la carte (:focus-visible) ou d'un élément focusable placé dedans (:has(:focus-visible)).

Le script prend toutes les .shc-card présentes dans une .fx-0620-root au chargement : vous pouvez mettre une grille entière de cartes dans une seule racine, ou plusieurs copies de l'effet dans la page, chacune reste indépendante. Rien n'est ajouté sur window.

Accessibilité

  • Clavier : la carte de démonstration porte tabindex="0" ; au Tab, elle s'ouvre comme au survol et affiche un contour #a5b4fc. Si votre carte est déjà un <a> ou un <button>, retirez tabindex : elle est focusable d'office.
  • Lecteurs d'écran : clip-path masque à l'œil mais ne retire rien de la page. Le texte de la face cachée est lu à la suite de la face visible. Quand la face cachée ne fait que répéter la face visible, ajoutez aria-hidden="true" sur .shc-back.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, la transition est supprimée. La face cachée apparaît d'un coup, entière et lisible, au survol, au focus ou au tap.
  • Toucher : un tap ouvre, un second tap referme ; plus de carte qui reste ouverte faute de pouvoir « quitter » le survol avec le doigt.
  • Contraste : réglez --shc-back-color pour qu'il reste lisible sur --shc-back (blanc sur le dégradé indigo-fuchsia par défaut).

Compatibilité navigateur

Mesuré dans Chromium 151, Firefox 153 et le WebKit 26.5 de Playwright : 0 erreur, deux copies indépendantes (la 2e réagit seule), ouverture au survol, au Tab et au tap (le 2e tap referme), état final immédiat en mouvement réduit, rien qui déborde à 390 px. Les versions minimales viennent de :focus-visible et de :has() (focus d'un lien placé dans la carte).

Chrome 105+✓ Complet (mesuré)
Firefox 121+✓ Complet (mesuré)
Safari 15.4+✓ Complet (mesuré dans le WebKit de Playwright)
Edge 105+✓ Complet (moteur Chromium)
Safari iOS 15.4+✓ Tap vérifié en émulation, pas sur un appareil réel
Chrome Android 105+✓ Complet (moteur Chromium, tap vérifié en émulation)

Plus ancien : le survol et le tap marchent dans les versions plus anciennes qui ont la propriété inset (Chrome 87, Firefox 66, Safari 14.1 : versions où arrive la propriété inset qui superpose les faces) ; seul le focus clavier n'ouvre plus la carte. Sans JavaScript, tout fonctionne sauf le tap sur écran tactile.

Le code

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

index.html — structure
<div class="fx-0620-root">
  <div class="shc-card" tabindex="0">
    <span class="shc-front">Survolez-moi</span>
    <div class="shc-back">
      <span>Révélé !</span>
    </div>
  </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
--shc-w 280px Largeur de la carte (jamais plus large que son conteneur). Mettez 100% pour une grande image.
--shc-h 180px Hauteur de la carte ; les deux faces la prennent entièrement.
--shc-radius 1rem Arrondi des coins (25px sur un bouton de 50px de haut donne une pilule).
--shc-front et --shc-front-color linear-gradient(135deg,#1a1a2e,#16213e) et #a1a1aa Fond et couleur du texte de la face visible.
--shc-back et --shc-back-color linear-gradient(135deg,#6366f1,#d946ef) et #fff Fond et couleur du texte de la face révélée.
--shc-speed .5s Durée d'ouverture et de fermeture du cercle.
--shc-bg et --shc-min-h #0a0a0f et 300px Fond et hauteur minimale de la racine : passez-les à transparent et 0 pour poser la carte dans votre page.
Classe .shc-open absente Ouvre la carte sans survol : le script la bascule au tap ; ajoutez-la vous-même pour ouvrir une carte par programme.
Classe .shc-media — À poser sur une image, un SVG ou une vidéo dans une face : le média la couvre entièrement, le texte reste au-dessus.

FAQ

Placez <img class="shc-media" src="apres.jpg" alt="…"> dans .shc-back (et une autre dans .shc-front si la face visible est aussi une photo). Le média couvre la face avec object-fit: cover ; un titre ajouté après lui reste lisible par-dessus.
Pas avec cet effet : son principe est de toujours partir du centre. Pour suivre le pointeur, prenez Circular Reveal. Vous pouvez en revanche fixer un autre point de départ en remplaçant at 50% 50% dans les règles clip-path (par exemple at 0 100% pour le coin bas-gauche).
Ajoutez la classe shc-open : carte.classList.add('shc-open'), et retirez-la pour refermer. C'est la même classe que celle posée au tap sur écran tactile, donc le rendu est identique.