3D✨ Premium

Isometric Grid

Neuf blocs indigo en grille de 3 × 3 vue en isométrie (inclinée à 60°, tournée de −45°), chacun fermé par une face avant et une face gauche de 20 px ; le bloc survolé, touché ou atteint au clavier monte de 30 px et vire au rose-violet, comme un tiroir qu'on sort — une case à la fois, en CSS pur, sans JavaScript.

CSS3DIsometric

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

Les neuf salles de répétition d'un studio de musique — choix d'un créneau — Isometric Grid exemple 1

① Les neuf salles de répétition d'un studio de musique — choix d'un créneau

QuandPlan isométrique du studio : neuf salles numérotées ; celle qu'on survole monte et devient rose, et sa fiche s'affiche à gauche (« Salle 5 — 18 m², batterie fournie, 12 € / h »).
PourquoiUne case qui se soulève seule désigne sans ambiguïté une salle unique ; l'élévation de plusieurs blocs à la fois, comme dans l'autre Isometric Grid (fx-0026), brouillerait le choix.
RéglagesGrille agrandie à des cases de 68 px (grid-template-columns: repeat(3, 68px), 10 px d'écart), faces de 26 px, numéro peint sur chaque case ; grille posée à droite, sur la trajectoire de la souris de capture ; la fiche de la salle suit la case survolée.
Les neuf casiers d'une consigne connectée — appli de retrait de colis en gare — Isometric Grid exemple 2

② Les neuf casiers d'une consigne connectée — appli de retrait de colis en gare

QuandLa consigne vue de dessus en isométrie, casiers A1 à C3 : le casier attribué (« Casier C2 ») monte et se colore, les autres restent gris ; le code de retrait est affiché à côté.
PourquoiLa case qui sort de la grille montre l'emplacement exact du casier ; c'est le même geste visuel qu'un tiroir qui s'ouvre.
RéglagesCases de 46 px recolorées en gris ardoise (#64748b → #475569, faces #334155 et #3b4a5e), rose-violet d'origine pour la case levée ; la scène lève C2 en boucle avec une classe qui reprend les valeurs du survol.
Carré potager de neuf cases — appli de jardinage en carrés — Isometric Grid exemple 3

③ Carré potager de neuf cases — appli de jardinage en carrés

QuandBac de 1,20 m en neuf cases (Radis, Laitue, Basilic, Tomate…) ; la case survolée se soulève, passe au vert et sa date de semis s'affiche à droite.
PourquoiLa grille isométrique ressemble au bac en bois vu de haut ; chaque case reste un compartiment distinct, et la case levée est la seule dont on lit la fiche.
RéglagesCases couleur terre (#8b5e34 → #6f4a28, faces brun foncé), vert #86efac → #22c55e pour la case levée, nom du légume peint sur chaque case ; la scène fait monter Radis, Basilic et Tomate tour à tour.

Comment ça marche

La racine .fx-0010-root (fond #0a0a0f, 300 px de haut au minimum) centre .isometric-container, qui porte perspective: 1000px, puis .isometric-grid : une grille CSS de 3 colonnes de 40 px, 8 px d'écart, tournée par transform: rotateX(60deg) rotateZ(-45deg) et en transform-style: preserve-3d pour que ses enfants gardent leur propre profondeur. Les neuf .isometric-cell (40 × 40 px, dégradé #6366f1 → #4f46e5, coins de 4 px, tabindex="0") sont elles aussi en preserve-3d : leurs pseudo-éléments deviennent des faces.

Chaque bloc a deux faces, celles que l'on voit avec cette rotation. ::before est la face avant : accrochée sous le bord bas de la case (top: 100%, 20 px de haut, #3730a3), elle pivote autour de ce bord (transform-origin en haut, rotateX(-90deg)) et tombe vers le sol. ::after est la face gauche : accrochée au bord gauche (right: 100%, 20 px de large, #4338ca), elle pivote autour de ce bord (rotateY(-90deg)). Les faces arrière et droite seraient cachées : elles ne sont pas dessinées. Au survol (ou :focus-visible), la case prend translateZ(30px) et un dégradé #d946ef → #a855f7, ses faces passent à #7c3aed et #8b5cf6, en 0,3 s. Les faces mesurant 20 px, le bloc levé flotte 10 px au-dessus du sol et laisse voir le trou sombre de sa place : un tiroir qu'on sort. Mesuré : 1,6 % des pixels changent au survol de la case du centre, à l'identique dans Chromium 151 et Firefox 153 (0,2 % d'écart entre les deux).

Seules les cases captent le pointeur : pointer-events: none sur la grille, auto sur les cases. Mesuré dans Chromium en émulation tactile : sans cette règle, le toucher est attribué à la grille inclinée et aucune case ne monte ; avec elle, la case touchée monte. C'est aussi ce qui fait qu'un pointeur posé dans un écart entre deux cases ne lève rien. Une seule règle :hover commande tout : il n'y a jamais qu'une case levée, celle sous le pointeur ou celle qui a le focus.

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, un bloc limité à .fx-0010-root annule l'élévation : la case survolée ou atteinte au clavier vire au rose-violet sur place. Mesuré dans Chromium et Firefox : transformation inchangée, 0,7 % de pixels changés au survol (1,6 % sans la préférence).
  • Clavier : les neuf cases ont tabindex="0" ; Tab les parcourt dans l'ordre de la grille, et le focus donne l'état du survol plus un liseré #f0abfc de 2 px (11,2:1 sur le fond). Les cases de la démo sont des div vides : quand elles représentent quelque chose (une salle, un casier), donnez-leur un nom avec aria-label et, si elles déclenchent une action, role="button" et la touche Entrée dans votre script.
  • Contraste : l'indigo des blocs mesure 4,4:1 sur le fond #0a0a0f, le rose-violet 5,7:1 ; mais entre eux l'écart n'est que de 1,3:1. C'est l'élévation (et le liseré au clavier) qui signale la case, pas la couleur seule : en mouvement réduit, si le choix compte, ajoutez un texte ou une bordure.
  • Toucher : au doigt, la case touchée monte (mesuré en émulation tactile Chromium et dans Firefox) et reste levée jusqu'au toucher suivant.

Compatibilité navigateur

CSS 3D sur trois niveaux (perspective sur le conteneur, preserve-3d sur la grille puis sur chaque case, faces en pseudo-éléments), :focus-visible, aucune dépendance, aucun JavaScript. Mesuré dans Chromium 151 et Firefox 153 : même rendu au repos et au survol (0,2 % d'écart), même mouvement réduit, 0 erreur. Le WebKit de Playwright aplatit toute 3D en preserve-3d, même un cube de référence : ses captures ne disent rien de Safari. Rendu Safari non vérifié sur un vrai Safari.

Chrome 86+✓ Complet
Firefox 85+✓ Complet
Safari✓ Non vérifié sur un vrai Safari (3D imbriquée)
Edge 86+✓ Complet
Mobile iOS✓ Non vérifié sur un vrai iPhone
Android Chrome✓ Complet (toucher mesuré en émulation Chromium)

Si le navigateur aplatit la 3D, les faces se rabattent dans le plan de la grille : on voit des cases plates, et l'élévation se lit à peine ; le changement de couleur au survol reste. Sans :focus-visible, le focus clavier n'a que l'anneau du navigateur.

Le code

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

index.html — structure
<div class="fx-0010-root">
  <div class="demo-3d">
    <div class="isometric-container">   <!-- perspective: 1000px -->
      <div class="isometric-grid">   <!-- rotateX(60deg) rotateZ(-45deg), preserve-3d -->
        <div class="isometric-cell" tabindex="0"></div>   <!-- ::before face avant, ::after face gauche -->
        … (9 cases)
      </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
Taille et nombre de cases (CSS — grid-template-columns et taille de .isometric-cell) repeat(3, 40px) ; 40 × 40 px ; 9 cases Changez les deux ensemble, et ajoutez autant de div que de cases : repeat(4, 40px) et seize cases donnent un plateau de 4 × 4.
Écart (CSS — gap de la grille) 8 px Sous 4 px, les blocs se touchent et la grille paraît une dalle pleine ; au-delà de 12 px, ils deviennent des îlots séparés.
Hauteur des blocs (CSS — height de ::before et width de ::after) 20 px Changez les deux valeurs ensemble. Avec 30 px, égale à l'élévation, le bloc levé reste posé sur le sol au lieu de flotter.
Élévation (CSS — translateZ du survol) 30 px 50 px fait sortir nettement le bloc ; plus haut, il masque une partie de la case située derrière lui.
Couleurs (CSS — dégradé de la case et fond des deux faces, au repos et au survol) #6366f1 → #4f46e5, faces #3730a3 / #4338ca ; survol #d946ef → #a855f7, faces #7c3aed / #8b5cf6 Gardez la face avant plus sombre que la face gauche, et les deux plus sombres que le dessus : c'est ce qui donne la lumière venant du haut.
Angle de vue (CSS — rotateX(60deg) rotateZ(-45deg)) 60° et −45° Entre rotateX(55deg) et 65deg, la vue reste proche de l'isométrie. En passant à rotateZ(45deg), ce sont les faces avant et droite qui se voient : déplacez ::after sur le bord droit (left: 100%, pivot à gauche, rotateY(90deg)).

FAQ

Les deux portent le même nom dans le catalogue, mais ne font pas la même chose. Celle-ci est une grille de 3 × 3 en CSS pur : une seule case monte, celle qu'on survole, touche ou atteint au clavier, et vire au rose-violet — c'est un sélecteur. fx-0026 est une dalle de 4 × 4 pilotée par JavaScript : tous les blocs à moins de 60 px du pointeur montent, d'autant plus qu'ils sont proches, et forment une bosse qui suit la souris — c'est une zone d'influence. Choisissez celle-ci pour désigner une case, fx-0026 pour montrer un rayon ou un relief.
Avec la grille tournée de −45° et inclinée à 60°, seules la face avant et la face gauche sont tournées vers vous ; les deux autres seraient cachées derrière le dessus du bloc. Les dessiner ne changerait rien à l'image et doublerait le nombre de plans à peindre. Si vous changez l'angle, déplacez les faces (voir le tableau ci-dessus).
Oui : ajoutez une classe (par exemple .is-selected) qui reprend les valeurs du survol — transform: translateZ(30px), le dégradé rose-violet et la couleur des deux faces — et posez-la sur la case choisie. La scène de la consigne fait exactement cela pour le casier attribué. Pensez à donner à cette case un nom lisible (aria-label, aria-current).