3D✨ Premium

Layered Paper

Une pile de trois feuilles blanches lignées (180 × 130 px), légèrement de travers (−3°, 1°, 0°) avec des ombres douces : au survol, les deux du dessous s'écartent en éventail à gauche et à droite, celle du dessus se soulève de 10 px et son ombre s'approfondit. Aucune 3D, aucun JavaScript : rotations, déplacements et ombres à plat, en 0,5 s. Survol, Tab ou toucher ; sous mouvement réduit, les feuilles prennent leur place sans glisser.

CSSHoverShadow

Mis à jour le

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

3 exemples d'usage

Trois devis à comparer — espace client d'un service de rénovation énergétique — Layered Paper exemple 1

① Trois devis à comparer — espace client d'un service de rénovation énergétique

QuandLe dossier « Devis isolation des combles » d'un client : au survol, les trois devis s'étalent, « Artisan C — 4 650 € » dessus, « Artisan A — 4 820 € » qui dépasse à gauche, « Artisan B — 5 190 € » à droite ; bouton « Comparer » dessous.
PourquoiL'éventail montre qu'il y a plusieurs documents de même nature sans ouvrir de tableau ; les feuilles restent des papiers, pas des cartes d'interface.
RéglagesPile agrandie à 310 × 190 px pour couvrir toute la trajectoire de la capture ; éventail élargi (fond rotate(-7deg) translate(-64px, 14px), milieu rotate(6deg) translate(64px, 8px)) pour que le nom et le montant écrits au bord de chaque feuille du dessous se lisent ; transition-delay: .35s au survol.
Lettres de poilus — exposition virtuelle du centenaire d'une commune — Layered Paper exemple 2

② Lettres de poilus — exposition virtuelle du centenaire d'une commune

QuandSalle 3 de l'exposition « Saint-Aubin se souvient » : trois lettres d'Émile à sa femme, prêtées par sa petite-fille. La pile jaunie s'écarte et la lettre « Verdun, 14 mars 1916 — Ma chère Louise » se soulève, prête à être lue ; le texte d'introduction est à droite.
PourquoiLes rotations à peine visibles et les ombres douces donnent la matière du papier ancien ; un retournement 3D serait trop spectaculaire pour ces archives.
RéglagesPile de 178 × 128 px, coins de 3 px ; papiers jaunis #e9d9b1, #efe0bb, #f5ead0, lignes d'encre #c9b48a, date et formule d'appel en Georgia ; écart porté à −30 / +26 px, ombres plus sombres sur le fond brun. Hors de la trajectoire de la capture : la scène étale la pile d'elle-même en boucle (mêmes positions que le survol).
Fiches de révision étalées — appli de révision du bac de philosophie — Layered Paper exemple 3

③ Fiches de révision étalées — appli de révision du bac de philosophie

QuandLa pile « La conscience » de l'appli : la fiche « Descartes — Je pense, donc je suis » dessus, « Freud » et « Sartre » qui dépassent quand elle s'étale ; compteur « 12 fiches revues sur 40 » et barre de progression dessous.
PourquoiLe geste d'étaler un paquet de fiches sur le bureau est celui de l'élève ; il annonce le contenu sans le déplier.
RéglagesPile de 196 × 126 px ; fiches bristol jaune #fde68a et bleue #bfdbfe dessous, blanche à bandeau violet #8b5cf6 dessus ; écart porté à ±52 px pour que les noms se lisent au bord. Hors de la trajectoire de la capture : la scène étale la pile d'elle-même en boucle.

Comment ça marche

La racine .fx-0025-root (fond #0a0a0f, 300 px de haut au minimum) centre .paper-stack, une zone de 180 × 130 px avec tabindex="0". Les trois .paper-sheet la remplissent en position: absolute, coins de 8 px, chacune avec quelques .paper-line de 2 px (#e2e8f0, largeurs de 60 à 100 %) qui dessinent des lignes d'écriture. Au repos, la feuille du fond (.paper-1, #f8fafc) est tournée de −3° et descendue de 8 px, celle du milieu (.paper-2, #f1f5f9) de 1° et 4 px, celle du dessus (.paper-3, blanche) reste droite ; z-index 1, 2, 3 les empile dans cet ordre, et des ombres de plus en plus larges les détachent l'une de l'autre.

Au survol de la pile, ou quand elle a le focus (:focus-within), chaque feuille reçoit une nouvelle position en 0,5 s (cubic-bezier(.25, .46, .45, .94), un départ vif qui ralentit) : le fond passe à −8°, recule de 20 px vers la gauche et descend à 16 px ; le milieu passe à 5°, part de 15 px vers la droite et descend à 10 px ; le dessus monte de 10 px. Les ombres grandissent en même temps (jusqu'à 0 15px 40px pour la feuille du dessus), ce qui fait lire le soulèvement. Comme rotate() est écrit avant translate(), chaque feuille se déplace le long de son propre axe incliné : l'éventail s'ouvre en arc, pas en ligne droite.

Pourquoi aucune 3D : tout se joue avec des rotations dans le plan et des ombres, des propriétés que tous les navigateurs dessinent de la même façon. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 : mêmes positions finales (matrices identiques) et la même part de l'image qui change au survol (5,45 %, 5,38 % et 5,47 %). C'est l'effet « papier » le plus sûr de la catégorie, Safari compris.

Accessibilité

  • Clavier et toucher : la pile a tabindex="0" et chaque règle :hover est doublée par :focus-within. Tab étale les feuilles, Tab suivant les rassemble ; un anneau de 2 px #a5b4fc (:focus-visible, décalé de 10 px pour entourer l'éventail) marque le focus au clavier. Au doigt, un toucher étale la pile, un toucher ailleurs la referme. Mesuré dans Chromium 151, Firefox 153 et WebKit 26. La pile a cursor: pointer et un clic lui donne le focus : elle reste étalée jusqu'au clic suivant ailleurs.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, un bloc limité à .fx-0025-root réserve la transition aux ombres. Les feuilles prennent leur place étalée d'un coup, sans glisser ni pivoter (positions atteintes dès la première image mesurée, à 100 ms), et seules les ombres changent en fondu de 0,3 s.
  • Contenu décoratif : les lignes sont des div vides, sans texte ; les lecteurs d'écran ne lisent rien. Si les feuilles portent des documents (devis, lettres, fiches), écrivez leur titre en vrai texte sur chaque feuille, dans l'ordre où l'on doit les lire.
  • Contraste : les lignes #e2e8f0 sur blanc (1,23:1) sont un décor, pas du texte. Pour écrire sur les feuilles, reprenez la couleur de texte déjà déclarée sur la feuille du dessus, #1e293b (14,63:1 sur blanc).

Compatibilité navigateur

CSS seul (transform 2D, box-shadow, transitions, :focus-within, :focus-visible), aucun JavaScript, aucune dépendance, aucune 3D. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 : mêmes positions étalées, mêmes ombres, deux copies indépendantes sur une page, feuilles posées sans glisser sous mouvement réduit, focus au clavier et au toucher.

Chrome 86+✓ Complet
Firefox 85+✓ Complet
Safari 15.4+✓ Complet (mesuré sur WebKit 26)
Edge 86+✓ Complet
Mobile iOS 15.4+✓ Non vérifié sur un vrai iPhone
Android Chrome✓ Complet, au toucher

Sans transitions, la pile passe d'un coup de l'état rangé à l'état étalé. Sans :focus-visible (navigateur ancien), c'est le contour de focus par défaut qui s'affiche ; sans :focus-within, seule la souris étale la pile.

Le code

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

index.html — structure
<div class="fx-0025-root">
  <div class="paper-stack" tabindex="0">
    <div class="paper-sheet paper-1">
      <div class="paper-lines">
        <div class="paper-line"></div> … (3 lignes)
      </div>
    </div>
    <div class="paper-sheet paper-2">…</div>
    <div class="paper-sheet paper-3">… (feuille du dessus, 4 lignes)</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
Écart de l'éventail (CSS — translateX des règles de survol de .paper-1 et .paper-2) −20 px et 15 px C'est ce qui dépasse des feuilles du dessous. Pour y écrire un titre lisible, montez à ±50 ou ±60 px (scènes ci-dessus) ; à 0, la pile ne fait que se soulever.
Rotations (CSS — rotate() au repos et au survol) −3°, 1°, 0° au repos ; −8°, 5°, 0° étalées Restez sous 10° : au-delà, les coins sortent nettement de la pile et l'effet perd son côté papier posé. 0° partout donne une pile parfaitement alignée qui ne fait que glisser.
Soulèvement (CSS — translateY(-10px) et box-shadow de .paper-3 au survol) −10 px, ombre 0 15px 40px à 15 % L'ombre fait la moitié du soulèvement : une ombre plus large et plus floue (0 24px 50px) donne une feuille qui décolle franchement, sans changer le déplacement.
Taille (CSS — width et height de .paper-stack) 180 × 130 px Les feuilles suivent la pile (inset: 0). Pour un format A4 couché, gardez un rapport proche de 1,4 (par exemple 280 × 200 px) et agrandissez l'écart dans la même proportion.
Durée et courbe (CSS — transition de .paper-sheet) .5s cubic-bezier(.25, .46, .45, .94) La transition porte sur toutes les propriétés (position et ombre ensemble). .35s donne un geste vif ; un léger dépassement (cubic-bezier(.34, 1.4, .64, 1)) fait rebondir les feuilles.
Papier et lignes (CSS — background des trois feuilles, .paper-line) #f8fafc, #f1f5f9, #fff ; lignes #e2e8f0 Gardez les feuilles du dessous un peu plus sombres que celle du dessus : c'est ce qui fait lire la profondeur. Sur fond clair, foncez les ombres plutôt que le papier.

FAQ

Parce qu'il n'en a pas besoin : des feuilles posées sur un bureau ne tournent que dans le plan. Rotations, déplacements et ombres suffisent, et ils se dessinent de la même façon partout (mesuré identique dans Chromium, Firefox et WebKit). Sans perspective ni preserve-3d, rien ne peut être aplati par un parent en overflow: hidden ou en opacity, et l'effet se pose sans précaution dans n'importe quelle mise en page.
Ajoutez un bloc .paper-sheet en tête de la pile, avec une classe paper-0 et z-index: 0 : elle passe sous les trois autres. Donnez-lui une position au repos (par exemple rotate(2deg) translateY(10px)) et une position étalée qui sort un peu plus loin que les autres (rotate(9deg) translate(30px, 18px)), avec une ombre un peu plus courte : c'est la plus éloignée du regard.
Remplacez les .paper-lines par du texte. La feuille du dessus se lit entièrement ; celles du dessous ne montrent que leur bord quand la pile s'étale (20 et 15 px par défaut). Écrivez leur titre contre ce bord (à gauche pour .paper-1, à droite pour .paper-2) et élargissez l'écart, comme dans la scène des devis où le nom et le montant dépassent de 64 px.