Transitions✨ Premium

Accordion Fold

Un accordéon dont chaque panneau se déplie comme une feuille pliée : la hauteur s'ouvre en 0,5 s à la taille réelle du contenu pendant que le texte pivote de −90° à 0° autour de son bord supérieur, en perspective de 600 px, avec un léger rebond. Une seule rubrique ouverte à la fois, aria-expanded, panneaux fermés hors de la tabulation, fondu de 0,15 s si l'utilisateur réduit les animations.

CSS3DPerspective

Mis à jour le

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

3 exemples d'usage

Notice d'un médicament dépliée — site d'une pharmacie en ligne — Accordion Fold exemple 1

① Notice d'un médicament dépliée — site d'une pharmacie en ligne

QuandSur la fiche du paracétamol 500 mg, le patient ouvre la rubrique « Effets indésirables » de la notice ; « Indications », « Posologie » et « Précautions » restent repliées au-dessus.
PourquoiLe pli en 3D rappelle la notice papier qu'on déplie : le patient retrouve un geste connu, et ne lit qu'une rubrique à la fois.
RéglagesListe de 218 px au centre de la page, en-têtes de 14 px en vert foncé sur fond clair, texte des panneaux en #355a43 agrandi à 16 px pour que le pli se lise ; séparateurs vert pâle ; durées et pli du code inchangés.
Programme du grand jour — site de mariage des futurs époux — Accordion Fold exemple 2

② Programme du grand jour — site de mariage des futurs époux

QuandSur téléphone, l'invité ouvre « Vin d'honneur · 17 h » : le lieu, le parking et un petit plan d'accès se déplient entre la cérémonie et le dîner.
PourquoiUn seul moment ouvert à la fois garde la page courte sur téléphone, et le dépliage donne un côté faire-part.
RéglagesListe de 178 px dans un cadre de téléphone, en-têtes en serif, texte des panneaux de 15 px ; le panneau contient un plan de 62 px de haut, et sa hauteur réelle (150 px) est prise en compte sans réglage.
Ce qui est compris dans la location — brochure en ligne d'un loueur de péniches sans permis — Accordion Fold exemple 3

③ Ce qui est compris dans la location — brochure en ligne d'un loueur de péniches sans permis

QuandAvant de réserver une semaine sur le canal de Nantes à Brest, le futur plaisancier déplie « Ce qui est compris » : carburant, deux vélos à bord, linge de lit ; « Options » et « Caution » restent pliées.
PourquoiLe pli de papier rappelle la brochure qu'on déplie au comptoir de la base ; une rubrique à la fois garde la liste courte sur téléphone.
RéglagesFond vert canal #0f2b2d, titres de section et bouton de réservation en jaune #fcd34d, texte des panneaux de 16 px en #d3e6e2 avec les vélos en gras ; en-têtes de 14 px ; la première rubrique s'ouvre.

Comment ça marche

Chaque rubrique est une .accordion-fold-item : un vrai <button> d'en-tête avec une flèche, puis un panneau .accordion-fold-content qui contient le texte .accordion-fold-inner. Fermé, le panneau vaut max-height: 0, overflow: hidden et visibility: hidden ; il porte aussi perspective: 600px, la distance d'où l'on regarde le pli. Le texte attend à rotateX(-90deg) et opacity: 0, avec transform-origin: center top : il est couché à plat, accroché par son bord supérieur, comme le rabat d'une feuille.

Au clic, la classe .open lance deux mouvements. Le panneau grandit en 0,5 s sur cubic-bezier(0.65, 0, 0.35, 1) ; le texte se relève de −90° à 0° en 0,4 s sur une courbe à rebond, 0,1 s plus tard, et passe à l'opacité 1. Mesuré 150 ms après le clic : panneau à 7 px sur 66 et texte encore à −47° (Chromium 151), mêmes valeurs à quelques pixels près dans Firefox 153 et WebKit 26.5 ; tout est en place vers 0,6 s. La flèche tourne de 180° en 0,4 s. À la fermeture, le même chemin se joue à l'envers et visibility ne repasse à hidden qu'au bout des 0,5 s, pour que la feuille reste visible pendant qu'elle se replie.

La hauteur vient du script (2,3 Ko), pas d'une valeur fixe : à l'ouverture, il écrit dans max-height la hauteur réelle du contenu (scrollHeight), puis la remplace par none à la fin de la transition. Un texte de 300 px s'ouvre donc en entier (mesuré dans les trois moteurs), et un panneau ouvert suit son contenu quand la fenêtre change de largeur. Pour refermer depuis none, il repasse par la hauteur en pixels avant de revenir à 0, sinon la fermeture serait instantanée. Il ferme les autres rubriques de la même liste, pose aria-expanded et aria-controls (avec un id créé si le panneau n'en a pas), et fonctionne pour toutes les listes .accordion-fold-container de la page. Si une liste est masquée au moment de l'ouverture (onglet caché), le panneau passe directement à none.

Accessibilité

  • Clavier et état : les en-têtes sont des <button> — Tab les atteint, Entrée ou Espace ouvre et ferme. Chaque en-tête annonce aria-expanded (true/false, mesuré) et désigne son panneau par aria-controls. La flèche décorative est en aria-hidden.
  • Panneaux fermés vraiment cachés : visibility: hidden retire le contenu fermé de la tabulation et des lecteurs d'écran. Mesuré avec un lien dans un panneau fermé : depuis le dernier en-tête, Tab passe directement à l'élément qui suit la liste (Chromium, Firefox).
  • Mouvement réduit : sous prefers-reduced-motion, ni pli ni glissement de hauteur — le panneau s'ouvre à sa taille d'un coup et le texte apparaît par un fondu de 0,15 s (mesuré dans les trois moteurs : 66 px sur 66 et angle 0° dès 150 ms).
  • Contraste : en-têtes blancs sur #0a0a0f (19,8:1). Le texte des panneaux, blanc à 60 % d'opacité, reste vers 7:1 sur ce fond ; sur un fond clair, recolorez les deux (les scènes d'exemple le font).

Compatibilité navigateur

CSS (perspective, rotateX, transitions de max-height et de visibility) + 2,3 Ko de JavaScript, aucune dépendance. Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 : même déroulé du pli, même hauteur réelle pour un contenu long, une seule rubrique ouverte, même comportement sous mouvement réduit. Rien de récent : les transformations 3D et matchMedia existent partout depuis bien avant 2018.

Chrome 61+✓ Complet
Firefox 60+✓ Complet
Safari 12+✓ Complet
Edge 79+✓ Complet
Mobile iOS 12+✓ Complet
Android Chrome 61+✓ Complet

Sans JavaScript, les en-têtes ne font rien et les panneaux restent fermés : si le contenu est indispensable, ajoutez la classe open dans le HTML aux rubriques à montrer d'office. Sous mouvement réduit, le pli et le glissement sont remplacés par un fondu court.

Le code

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

index.html — structure
<div class="accordion-fold-stage">
  <div class="accordion-fold-container">
    <div class="accordion-fold-item">
      <button class="accordion-fold-header" type="button">
        <span>…</span>
        <span class="accordion-fold-arrow" aria-hidden="true">▼</span>
      </button>
      <div class="accordion-fold-content">
        <div class="accordion-fold-inner">…</div>
      </div>
    </div>
    … (une .accordion-fold-item par rubrique)
  </div>
</div>
Débloquer le code complet — 9,90 € TTC/mois

Le code complet HTML + CSS + JS de Accordion Fold, prêt à coller — et les 840 effets. Ou 299 € TTC une fois, accès à vie.

Personnaliser

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

Option / propriétéDéfautEffet
Angle du pli (CSS — rotateX(-90deg) sur .accordion-fold-inner) −90° : texte couché à plat avant de se relever −45° donne un pli plus discret ; au-delà de −90°, le texte passe derrière son bord et disparaît pendant une partie du mouvement.
Perspective (CSS — perspective: 600px sur .accordion-fold-content) 600 px 300 px accentue la profondeur (le bas du texte semble venir vers vous) ; 1 200 px aplatit le pli.
Durées (CSS — 0,5 s pour la hauteur, 0,4 s + 0,1 s de retard pour le texte) 0,5 s / 0,4 s Gardez la hauteur un peu plus longue que le pli, sinon le texte se relève dans un panneau encore trop court. Changez aussi le visibility 0s .5s si vous changez la durée de hauteur.
Rebond (CSS — cubic-bezier(.34, 1.56, .64, 1) sur le texte) le texte dépasse légèrement 0° avant de se poser ease-out pour un pli sobre, adapté à une notice ou un contrat.
Plusieurs rubriques ouvertes (JS — boucle items.forEach du clic) une seule rubrique ouverte par liste Supprimez la boucle qui ferme les autres rubriques pour laisser chacune s'ouvrir indépendamment.
Rubrique ouverte au chargement (HTML — classe open sur .accordion-fold-item) toutes fermées Le script la reconnaît : panneau à sa hauteur, aria-expanded="true", sans animation au chargement.

FAQ

Un navigateur ne sait pas animer height vers auto (sauf Chromium récent avec interpolate-size, absent de Firefox 153 et WebKit 26.5, mesuré). Le script mesure donc la hauteur réelle et l'écrit dans max-height, puis repasse à none une fois ouvert. Une valeur fixe (200 px par exemple) couperait les contenus plus longs et fausserait la durée : un texte de 48 px parcourrait ses 48 px en une fraction des 0,5 s prévues.
Pendant les 0,4 s du mouvement, le texte est vu en perspective : il paraît plus étroit en bas, le bord supérieur servant de charnière, ce qui fait l'effet de feuille. À 0°, il est rendu à plat, net. Si votre contenu contient des images, elles suivent le même pli.
Oui : le script relie chaque en-tête à son panneau dans chaque liste .accordion-fold-container, sans id à écrire. Les panneaux fermés sont hors de la tabulation, la page reste rapide à parcourir au clavier. Pour un référencement des réponses, gardez le texte dans le HTML (il l'est ici, seulement caché).