Galerie✨ Premium

3D Carousel

Cinq cartes posées sur un anneau en perspective : les flèches ou un glisser font tourner l'anneau d'un cran et amènent la carte suivante devant.

CSS3DPerspective

Mis à jour le

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

3 exemples d'usage

Choisir son personnage avant une partie — 3D Carousel exemple 1

① Choisir son personnage avant une partie

QuandDans le jeu de cartes Vexmorande, l'écran de préparation d'une partie classée montre cinq personnages en cartes illustrées sur l'anneau ; à droite, un panneau donne le nom du personnage de devant et ses jauges de force, magie et agilité, avec le bouton Jouer. Chaque cran de l'anneau change le personnage proposé.
PourquoiLa profondeur rend le choix concret : le personnage retenu est devant, grand et net, les autres attendent en retrait. Le panneau de droite n'a qu'à lire quelle carte n'est pas inert pour se mettre à jour.
RéglagesFormat de scène --c3d-ratio: 350/250, cartes portrait (--c3d-card-ratio: 3/4, --c3d-card-w: 38%), une illustration SVG en <img> + nom en HTML par carte, flèches dorées (CSS de la scène). La scène met à jour le panneau quand l'attribut inert change ; dans la capture, elle clique la vraie flèche toutes les 0,9 s.
Les coups de cœur de la rentrée en vitrine — 3D Carousel exemple 2

② Les coups de cœur de la rentrée en vitrine

QuandSur la page d'accueil de la librairie Feuillardine, un bloc « Rentrée littéraire » présente cinq couvertures sur l'anneau ; à gauche, le titre du livre de devant, une phrase de l'équipe et le lien « Réserver en boutique ». Les couvertures défilent d'un cran à chaque clic sur les flèches noires.
PourquoiCinq couvertures tiennent dans un bloc à côté du texte au lieu d'une grille qui prendrait tout l'écran ; la couverture de devant fait office de mise en avant, celles de l'arrière donnent envie de tourner.
Réglages--c3d-ratio: 320/230, couvertures portrait 3/4 (--c3d-card-w: 32%), ombre portée et flèches brun foncé (CSS de la scène). Le titre à gauche suit la couverture de devant. La capture clique la vraie flèche toutes les secondes.
Trois formules d'abonnement sur mobile — 3D Carousel exemple 3

③ Trois formules d'abonnement sur mobile

QuandDans le tunnel d'inscription d'Orlivane (documentaires), étape « Formule » sur téléphone : trois cartes (Essentiel, Famille, Annuel) sur l'anneau, prix et avantage sur chacune, bouton Continuer en bas. On fait tourner l'anneau du pouce ; les flèches sont masquées.
PourquoiAvec trois cartes, l'anneau montre une formule nette au premier plan et les deux autres en retrait : on compare sans quitter l'écran, et le geste suffit sur mobile.
RéglagesTrois cartes (120° par cran), --c3d-card-w: 74%, --c3d-card-ratio: 4/5, flèches masquées par la CSS de la scène, carte de devant rendue pleinement opaque (.c3d-card:not([inert]) { opacity: 1 !important }, voir la FAQ) pour que les prix des cartes de l'arrière ne transparaissent pas. La capture envoie au vrai code un pointerdown puis un pointerup tactiles toutes les 1,1 s ; le rond blanc est un repère de la scène.

Comment ça marche

La scène .c3d-stage porte la perspective ; dedans, l'anneau .c3d-ring garde la 3D (transform-style: preserve-3d) et chaque .c3d-card est centrée au milieu. Pour chaque carte, le script calcule son angle sur le cercle (360° / nombre de cartes × écart avec la carte active), puis la place en translateX (sinus) et translateZ (cosinus, vers le fond). Plus une carte est loin, plus elle est petite (échelle de 0,5 à 0,83), transparente et basse dans l'empilement (z-index). Le passage d'une position à l'autre dure 0,6 s.

Rien ne tourne seul : seules les flèches ‹ › et un glisser horizontal de plus de 50 px (doigt ou souris) font avancer l'anneau d'un cran, en boucle. Un clic sur une carte ne fait rien.

Les dimensions suivent la largeur de la scène, lue à chaque redimensionnement (ResizeObserver) : rayon = 40 % de la largeur, perspective = 2 fois la largeur, carte = 32 % de la largeur. À 495 px on retrouve les valeurs d'origine (rayon 200 px, perspective 1000 px, carte 160 px) ; à 360 px tout rétrécit dans les mêmes proportions et rien ne dépasse de l'écran. Chaque .fx-0167-root de la page a son propre anneau.

Accessibilité

  • Flèches nommées : vrais boutons « Carte précédente » / « Carte suivante », posés au-dessus de l'anneau, avec contour :focus-visible.
  • Une seule carte active : les quatre cartes de l'arrière sont inert ; un lecteur d'écran et le clavier n'atteignent que la carte de devant (« diapositive, 2 sur 5 »).
  • Rôles : région aria-roledescription="carrousel" nommée, cartes role="group" ; textes dans le HTML, à traduire.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, l'anneau saute directement à la nouvelle position, sans rotation animée.
  • Toucher : Pointer Events et touch-action: pan-y sur la scène : glisser horizontalement fait tourner l'anneau, la page défile toujours verticalement.

Compatibilité navigateur

3D CSS (perspective, preserve-3d), propriété translate (Chrome 104, Firefox 72, Safari 14.1), aspect-ratio, ResizeObserver et inert (Chrome 102, Firefox 112, Safari 15.5 d'après MDN). Mesuré dans Chromium 151 et Firefox 153 (Playwright) : deux anneaux dont le 2e piloté seul, mouvement réduit, 390 px sans défilement horizontal, glisser au doigt (Chromium), 0 erreur. Le WebKit de Playwright aplatit la 3D CSS : la navigation y fonctionne, mais le rendu en relief n'a pas pu être vérifié pour Safari.

Chrome 104+✓ Complet (mesuré)
Firefox 112+✓ Complet (mesuré)
Safari 15.5+✓ Non vérifié (3D aplatie dans le WebKit de test)
Edge 104+✓ Complet (moteur Chromium)
Mobile iOS 15.5+✓ Non vérifié
Android Chrome 104+✓ Complet (toucher mesuré)

Sans JavaScript, les cinq cartes sont empilées au centre et les flèches ne font rien. Sans 3D CSS, les cartes restent alignées à plat, la navigation marche toujours.

Le code

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

index.html — structure
<div class="fx-0167-root">
  <div class="c3d-slider" role="region" aria-roledescription="carrousel" aria-label="…">
    <div class="c3d-stage">
      <div class="c3d-ring">
        <div class="c3d-card" role="group" aria-roledescription="diapositive" aria-label="1 sur 5">…</div>
        …
      </div>
    </div>
    <button class="c3d-arrow c3d-prev" type="button" aria-label="…">…</button>
    <button class="c3d-arrow c3d-next" type="button" aria-label="…">…</button>
  </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
Largeur maximale (CSS — --c3d-max-width) 520px La scène prend la largeur de son conteneur jusqu'à cette limite ; rayon, perspective et cartes suivent.
Proportions de la scène (CSS — --c3d-ratio) 9 / 4 Hauteur de la zone qui contient l'anneau. Augmentez-la pour des cartes en portrait.
Largeur des cartes (CSS — --c3d-card-w) 32.3% En pourcentage de la scène. Au-delà de 40 %, les cartes de côté se chevauchent davantage.
Format des cartes (CSS — --c3d-card-ratio) 16 / 10 3/4 pour des couvertures de livres ou des cartes de jeu.
Contenu des cartes (HTML — .c3d-card) 5 dégradés « Slide 1 » à « Slide 5 » Une <img> couvre la carte ; texte et boutons acceptés. L'anneau s'adapte au nombre de cartes (360° / N par cran).
Durée de rotation (CSS — .c3d-card transition) .6s Vitesse à laquelle une carte rejoint sa nouvelle place.

FAQ

C'est le dessin d'origine : l'opacité suit la profondeur et vaut environ 0,67 au premier plan, 0,43 sur les côtés, 0,06 au fond. Pour une carte de devant pleinement opaque, ajoutez .c3d-card:not([inert]) { opacity: 1 !important }.
Autant que vous voulez : le pas vaut 360° divisé par le nombre de cartes. Au-delà de huit, les cartes du fond deviennent presque invisibles et se chevauchent ; trois à six donnent le meilleur relief.
Safari gère la 3D CSS, mais nous n'avons pas pu le vérifier : le WebKit de nos tests aplatit les transformations 3D. La navigation (flèches, glisser) y fonctionne ; testez le rendu sur un appareil avant de publier.