3D✨ Premium

Prism Rotation

Six panneaux translucides de 100 × 120 px, lettrés de A à F, tournent autour d'un axe vertical, un tour en 6 s. Leur rayon de 50 px est plus court que celui d'un hexagone fermé : les faces se croisent et mêlent leurs couleurs comme une lanterne de papier. CSS pur, zéro JavaScript, arrêté sur une vue fixe si l'utilisateur réduit les animations.

CSS3DPrism

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

Tourniquet de cartes postales — page « Souvenirs » d'un office de tourisme de bord de mer — Prism Rotation exemple 1

① Tourniquet de cartes postales — page « Souvenirs » d'un office de tourisme de bord de mer

QuandSix cartes (le phare, le port, la plage, le marché, la falaise, le couchant) tournent autour de la tige du présentoir, à côté du titre qui annonce les cartes en vente à l'accueil et des horaires de l'office.
PourquoiDes panneaux qui tournent autour d'un axe vertical reprennent exactement le présentoir rotatif des cartes postales ; un carrousel horizontal comme 3D Carousel n'a pas cet axe de colonne.
RéglagesRayon porté à translateZ(87px) dans les six règles : le prisme se ferme et chaque carte se lit de face à son tour ; panneaux blancs à 100 % avec une illustration en dégradés CSS et une légende en Georgia ; tige et pied fixes derrière la racine.
Lanterne hexagonale de la fête des lanternes — affiche numérique d'un quartier — Prism Rotation exemple 2

② Lanterne hexagonale de la fête des lanternes — affiche numérique d'un quartier

QuandSur un fond de nuit étoilée, une lanterne aux six faces orange, rouges et jaunes tourne lentement sous un chapeau rouge sombre, au-dessus du titre « Défilé des lanternes — samedi 19 h, place du Marché ».
PourquoiLe chevauchement des faces translucides mélange les couleurs comme à travers du papier de lanterne : c'est l'imperfection du prisme qui sert ici, le rayon de 50 px est gardé.
RéglagesRayon d'origine (50 px) ; faces orange, rouges et jaunes à 55 % avec un halo box-shadow orangé et un motif ✿ / ❀ ; ficelle, chapeau, base et pompon fixes en CSS autour de la racine.
Colonne Morris des six soirées du festival d'été — site d'une ville thermale — Prism Rotation exemple 3

③ Colonne Morris des six soirées du festival d'été — site d'une ville thermale

QuandSix affiches miniatures (« Jazz au kiosque », « Cinéma plein air », « Bal des thermes »…) tournent sur une colonne vert bouteille, à droite du titre « L'été au parc thermal ».
PourquoiLa rotation autour d'un axe vertical reproduit la colonne d'affichage qu'on contourne dans la rue : chaque soirée passe devant à son tour, avec sa date.
RéglagesRayon porté à translateZ(87px) (prisme fermé) ; panneaux presque opaques (90 à 94 %), un fond et une couleur de texte par soirée, titre en 12,5 px et date en 10 px ; dôme, fût et socle fixes autour de la racine.

Comment ça marche

La racine .fx-0016-root (fond #0a0a0f, 300 px de haut au minimum) centre .prism-container, qui porte la caméra (perspective: 800px). Dedans, .prism mesure 100 × 120 px, garde ses enfants en 3D (transform-style: preserve-3d) et tourne : rotatePrism, de rotateY(0) à rotateY(360deg) en 6 s, linear, sans fin. Les six .prism-face de 100 × 120 px sont superposées puis placées par :nth-child : rotateY(0deg), 60deg, 120deg… jusqu'à 300deg, chacune suivie de translateZ(50px). Chaque panneau a sa couleur à 70 % d'opacité (indigo, violet, magenta, rose, cyan, vert), un bord de 1 px et sa lettre en 12 px.

Tout tient au rayon. Pour que six panneaux de 100 px ferment un hexagone, il faudrait les repousser de 100 × √3 / 2 ≈ 86,6 px du centre. À 50 px, chaque panneau dépasse de chaque côté de la place qui lui revient et traverse ses deux voisins : on ne voit pas un prisme fermé mais une lanterne de plans qui se croisent, où les couleurs translucides se superposent et se mélangent. Les envers restent visibles (pas de backface-visibility: hidden) : les lettres des panneaux de derrière apparaissent en miroir à travers ceux de devant. Pour un vrai prisme fermé, portez le translateZ à 87px dans les six règles, comme dans le présentoir de cartes postales et la colonne d'affiches ci-dessus. Mesuré : environ 10 % des pixels du bloc changent toutes les 0,8 s dans Chromium 151 et Firefox 153.

Des plans qui se croisent obligent le navigateur à les découper pour les dessiner dans l'ordre de profondeur, et chaque moteur le fait à sa façon. Sur la même image fixe (mouvement réduit), 4,9 % des pixels diffèrent entre Chromium et Firefox : la lanterne est la même, mais l'empilement des couleurs aux croisements n'est pas identique. Avec le rayon de 87 px, les panneaux ne se croisent plus et cet écart disparaît. Comme pour toute 3D CSS, rien ne doit aplatir .prism (overflow, filter, opacity inférieure à 1 sur lui-même). Le WebKit de Playwright aplatit toute 3D CSS : le rendu sur un vrai Safari n'a pas été vérifié.

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, un bloc limité à .fx-0016-root arrête la rotation et tourne la lanterne de -20deg : une vue fixe où les faces qui se croisent restent lisibles. Mesuré dans Chromium et Firefox : 0 animation en cours, 0 % des pixels qui changent en 0,8 s (10,4 % sans la préférence).
  • Mouvement continu : la rotation dure plus de 5 s ; à côté d'un texte à lire, prévoyez un moyen de l'arrêter (WCAG 2.2.2), par exemple animation-play-state: paused au survol ou sur un bouton. Le mouvement réduit l'arrête déjà.
  • Lisibilité : au rayon de 50 px, un panneau n'est jamais entièrement visible seul ; n'y mettez pas d'information à lire (une lettre, un motif). Pour des affiches ou des cartes à lire, fermez le prisme (rayon de 87 px) et répétez l'essentiel en dehors.
  • Contenu décoratif : dans un bandeau, mettez aria-hidden="true" sur la racine, comme dans les exemples ; la liste des contenus (les six soirées, les six cartes) gagne à exister aussi en texte.

Compatibilité navigateur

CSS (transform 3D, preserve-3d, perspective, @keyframes), zéro JavaScript, aucune dépendance. Mesuré dans Chromium 151 et Firefox 153 : même rotation, deux copies indépendantes, arrêt sous mouvement réduit, 0 erreur ; aux croisements des panneaux, l'ordre d'empilement des couleurs diffère (4,9 % des pixels sur l'image fixe). Le WebKit de Playwright 26.5 aplatit toute 3D CSS : le vrai Safari n'a pas été vérifié.

Chrome 36+✓ Complet (mesuré)
Firefox 16+✓ Complet (mesuré, croisements empilés autrement)
Safari✓ Non vérifié sur un vrai Safari
Edge 79+✓ Complet (moteur Chromium)
Mobile iOS✓ Non vérifié sur un vrai Safari
Android Chrome✓ Complet (moteur Chromium)

Sans preserve-3d (ou si .prism est aplati par overflow, filter ou opacity < 1), les six panneaux s'écrasent dans un plan et la rotation ne montre plus qu'un rectangle qui s'élargit et se rétrécit. Les lettres restent visibles.

Le code

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

index.html — structure
<div class="fx-0016-root">
  <div class="demo-3d">
    <div class="prism-container">
      <div class="prism">
        <div class="prism-face">A</div> … (6 panneaux, A à F)
      </div>
    </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
Rayon (CSS — translateZ(50px) des six .prism-face:nth-child(n)) 50 px (panneaux qui se croisent) 87px ferme l'hexagone : un prisme net, chaque face lisible à son tour. Entre 60 et 80 px, les panneaux se touchent à peine sur les bords. Au-delà de 87 px, ils s'écartent et laissent des fentes.
Vitesse (CSS — 6s dans l'animation de .prism) 6 s 10 à 12 s pour des panneaux à lire (affiches, cartes) ; 4 s pour un ornement. Gardez linear pour une colonne qui tourne sans à-coup.
Taille des panneaux (CSS — width / height de .prism, .prism-face) 100 × 120 px Le rayon qui ferme le prisme vaut largeur × 0,866 : 120 px de large demandent translateZ(104px). La hauteur est libre.
Couleurs (CSS — background de chaque :nth-child) indigo, violet, magenta, rose, cyan, vert à 70 % Des teintes voisines à 50-60 % donnent une lanterne chaude ; des fonds opaques (90 % et plus) conviennent au prisme fermé, où l'on veut lire un panneau à la fois.
Perspective (CSS — perspective de .prism-container) 800px 500 px accentue le relief (le panneau de face paraît nettement plus grand) ; 1 400 px donne une colonne presque plate.
Nombre de panneaux (HTML et CSS) 6, tous les 60° Pour 8 panneaux : un angle tous les 45° et, pour fermer, un rayon de largeur / (2 × tan 22,5°) ≈ 1,21 × largeur. Ajoutez une règle :nth-child par panneau.

FAQ

Parce qu'ils sont repoussés de 50 px seulement, alors qu'un hexagone de panneaux de 100 px demande 86,6 px. Ce rayon court donne l'aspect de lanterne, avec des couleurs qui se mélangent aux croisements. Si vous voulez un prisme fermé, remplacez translateZ(50px) par translateZ(87px) dans les six règles.
La rotation, oui. Aux endroits où deux panneaux translucides se croisent, Chromium et Firefox n'empilent pas les couleurs dans le même ordre : 4,9 % des pixels diffèrent sur une même image fixe. Avec le prisme fermé (87 px), plus aucun panneau ne se croise et l'écart disparaît. Safari n'a pas pu être vérifié : le WebKit de test aplatit toute 3D CSS.
3D Carousel fait tourner six petites tuiles opaques sur un anneau de 100 px, envers masqué et pause au survol : on ne voit que les tuiles tournées vers soi. Prism Rotation fait tourner de grands panneaux translucides serrés autour de l'axe, envers visible : on voit tout le volume à la fois, comme une colonne ou une lanterne.