SVG✨ Premium

Split Reveal

Deux volets qui se replient vers les bords et découvrent le contenu du milieu : au survol, au focus, au tap, ou quand votre script le décide.

CSSClip-pathSplit

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

Fiche chambre d'un hôtel : les rideaux de la photo s'ouvrent sur la vue mer — Split Reveal exemple 1

① Fiche chambre d'un hôtel : les rideaux de la photo s'ouvrent sur la vue mer

QuandLa page de réservation d'un hôtel en bord de mer : à gauche la photo de la chambre, rideaux tirés ; à droite surface, équipements et prix. Au survol, les deux pans de rideau se replient vers les côtés et laissent voir la baie, le voilier et le balcon, avec l'étiquette « Vue mer ».
PourquoiLa vue est l'argument de la chambre : la faire découvrir en ouvrant des rideaux reproduit le geste qu'on fera en arrivant, et donne envie de réserver celle-ci plutôt qu'une autre.
Réglages--spr-w:236px, --spr-h:100%, --spr-radius:12px, --spr-left et --spr-right en repeating-linear-gradient sarcelle (les plis) recouvert d'une ombre, vue dessinée en SVG .spr-media dans .spr-center.
Coffret de thés : le bouton s'ouvre comme un couvercle sur l'ajout au panier — Split Reveal exemple 2

② Coffret de thés : le bouton s'ouvre comme un couvercle sur l'ajout au panier

QuandLa fiche d'un coffret de six thés en vrac. Le bouton ressemble au couvercle du coffret, vert sombre avec un ruban doré au milieu et « Ouvrir le coffret » de part et d'autre. Au survol, les deux moitiés du couvercle s'écartent et découvrent « Ajouter au panier · 39 € » sur fond crème.
PourquoiLe bouton raconte le produit avant de vendre : ouvrir le couvercle, c'est déjà le geste du cadeau, et le prix n'apparaît qu'au moment où l'on s'apprête à cliquer.
Réglages.spr-card sur un <button type="button">, 100 % × 54 px, --spr-radius:10px, --spr-center:#f3e7c9, --spr-center-color:#1d2a22. Le même SVG du couvercle est posé dans les deux volets avec .spr-media : il se lit d'un bloc au repos, ruban au milieu, puis se fend en deux.
Quiz : après « Valider », les volets s'écartent sur l'explication — Split Reveal exemple 3

③ Quiz : après « Valider », les volets s'écartent sur l'explication

QuandUne question de quiz sur le système solaire, trois réponses et un bouton « Valider ». Sous la question, un bandeau fermé indique « Explication | après validation ». Quand le joueur valide, la bonne réponse se colore et les volets s'écartent sur l'explication : Uranus tourne presque couchée, son axe étant incliné d'environ 98°.
PourquoiL'explication est là depuis le début mais reste fermée jusqu'à la réponse : le joueur ne peut pas tricher par un survol, et l'ouverture marque clairement le passage de la question à la correction.
Réglages.spr-card.spr-manual (ni survol, ni focus, ni tap), 100 % × 68 px, volets en dégradés violets, --spr-center:#f4f1ff. Le script de la page pose .spr-open au clic sur « Valider ». Dans la capture, c'est le clic de la souris de capture qui valide.

Comment ça marche

La carte .spr-card contient trois couches : .spr-center, le contenu à découvrir, puis deux volets, .spr-left et .spr-right, qui en couvrent chacun une moitié. Les volets sont découpés par clip-path: polygon(…). À l'ouverture, le volet gauche se resserre vers le bord gauche et le droit vers le bord droit, en 0,5 s avec la courbe cubic-bezier(.4,0,.2,1) : le centre apparaît comme entre deux battants. Les volets ne glissent pas, ils se replient ; leur contenu est rogné sur place.

Toutes les couches acceptent votre contenu. Une image ou un SVG avec la classe .spr-media remplit .spr-center. Dans les volets, la même classe donne à l'image le double de leur largeur, calée à gauche dans le volet gauche et à droite dans le volet droit : en mettant la même image dans les deux, elle paraît d'un seul tenant au repos, puis se fend en deux à l'ouverture.

Déclencheurs : le survol (seulement sur les appareils qui survolent, @media (hover: hover)), le focus clavier de la carte ou d'un élément qu'elle contient, et la classe .spr-open. Sur écran tactile, un tap la bascule (ouvre, puis referme au tap suivant) ; un lien ou un bouton touché dans la carte garde son action. Ajoutez .spr-manual à la carte pour couper survol, focus et tap : elle ne s'ouvre plus que lorsque votre script pose .spr-open, par exemple après une réponse validée.

Accessibilité

  • Clavier : la carte de démonstration (tabindex="0") s'ouvre au Tab avec un contour #c4b5fd. Sur un <button> ou un <a>, retirez tabindex. Une carte .spr-manual n'a pas besoin d'être focusable : c'est le bouton qui pose la classe qui l'est.
  • Lecteurs d'écran : le contenu central est toujours présent dans la page et lu, même volets fermés. Les volets décoratifs (ou qui répètent une image) prennent aria-hidden="true". Pour une réponse de quiz, annoncez le résultat dans une zone aria-live de votre page : l'ouverture des volets, elle, ne s'entend pas.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, les volets disparaissent d'un coup et le centre s'affiche entier, sans animation.
  • Toucher : un tap ouvre, un deuxième referme ; le survol n'est plus « collé » après un tap.

Compatibilité navigateur

Mesuré dans Chromium 151, Firefox 153 et le WebKit 26.5 de Playwright : 0 erreur, deux copies indépendantes, ouverture au survol, au Tab et au tap (le 2e tap referme, aussi quand le code est collé deux fois), état final immédiat en mouvement réduit, rien qui déborde à 390 px. Versions minimales dues à :focus-visible et :has().

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)

Navigateurs plus anciens : survol, tap et classe .spr-open 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) ; le focus clavier n'ouvre plus la carte. Sans JavaScript, seul le tap manque.

Le code

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

index.html — structure
<div class="fx-0626-root">
  <div class="spr-card" tabindex="0">
    <span class="spr-center">CENTRE</span>
    <div class="spr-left">
      <span>GAUCHE</span>
    </div>
    <div class="spr-right">
      <span>DROITE</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
--spr-w 280px Largeur de la carte, bornée par son conteneur.
--spr-h 180px Hauteur de la carte.
--spr-radius 1rem Arrondi des coins.
--spr-center et --spr-center-color #1a1a24 et #fff Fond et texte du contenu découvert.
--spr-left linear-gradient(135deg,#6366f1,#8b5cf6) Fond du volet gauche (couleur, dégradé, motif).
--spr-right linear-gradient(135deg,#d946ef,#f43f5e) Fond du volet droit. Donnez-lui la même valeur que le gauche pour un seul aplat fendu au milieu.
--spr-speed .5s Durée d'ouverture et de fermeture.
--spr-bg et --spr-min-h #0a0a0f et 300px Fond et hauteur minimale de la racine (transparent et 0 dans une page).
Classes .spr-open et .spr-manual absentes .spr-open ouvre la carte (posée au tap, ou par votre script). .spr-manual réserve l'ouverture à votre script.

FAQ

Mettez la même image dans les deux volets : <img class="spr-media" src="couverture.jpg" alt=""> dans .spr-left et dans .spr-right. Elle y prend le double de la largeur du volet, calée du bon côté : au repos, on voit une seule photo ; à l'ouverture, chaque moitié part de son côté. Le texte alternatif reste vide sur ces copies (et aria-hidden sur les volets).
Ajoutez spr-manual à la carte pour qu'elle ignore survol et focus, puis, dans votre gestionnaire de clic : carte.classList.add('spr-open'). Retirez la classe pour refermer.
Pas sans modifier l'effet : les volets sont positionnés à gauche et à droite et leurs polygones se replient horizontalement. Pour une ouverture verticale, il faudrait placer les volets en haut et en bas (height: 50%) et faire replier leurs polygones vers le haut et vers le bas.