3D✨ Premium

Isometric Grid

Une dalle de 4 × 4 blocs indigo vue en isométrie (tournée de 45°, inclinée à 60°) : les blocs à moins de 60 px du pointeur montent d'autant plus qu'ils sont proches (jusqu'à 25 px) et prennent un halo, si bien qu'une bosse de plusieurs blocs suit la souris — ou se forme là où l'on touche, ou se déplace aux flèches du clavier. 4 Ko de JavaScript, une instance par dalle.

JSMouseIsometric

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

Zone couverte par une borne Wi-Fi qu'on déplace sur le plan — outil d'un installateur réseau — Isometric Grid exemple 1

① Zone couverte par une borne Wi-Fi qu'on déplace sur le plan — outil d'un installateur réseau

QuandPlan d'un plateau de bureaux en 16 zones de 25 m² ; la borne « AP » suit la souris, les zones proches se soulèvent et s'éclairent (couverture forte), les autres restent à plat.
PourquoiL'élévation dégressive autour du pointeur montre une zone d'influence qui faiblit avec la distance ; une seule case qui monte, comme dans l'autre Isometric Grid (fx-0010), ne dirait pas « rayon ».
RéglagesBlocs écrits plus grands dans le HTML (72 px, 6 px d'écart) et dalle de 306 × 306 px, ce qui donne environ 430 × 215 px à l'écran ; rayon et hauteur d'origine (60 px, 25 px) ; la borne est un repère de décor qui suit le pointeur, sans rôle dans le calcul.
Les dalles lumineuses d'une salle de jeux interactifs — page de présentation — Isometric Grid exemple 2

② Les dalles lumineuses d'une salle de jeux interactifs — page de présentation

QuandLe sol de l'Arène Lumina, 16 dalles vues de haut ; les dalles autour du joueur — la souris — s'allument en cyan-magenta et se soulèvent ; titre « Arène Lumina — 6 à 12 joueurs ».
PourquoiLa bosse qui suit le pointeur imite les dalles qui réagissent sous les pieds des joueurs, en continu et sur plusieurs dalles à la fois.
RéglagesBlocs de 64 px (6 px d'écart), dessus sombre #1e1b4b → #2e2a6b, faces presque noires ; classe raised recolorée #22d3ee → #e879f9 avec un halo cyan de 26 px.
Le bac à sable numérique — borne d'un musée de géologie — Isometric Grid exemple 3

③ Le bac à sable numérique — borne d'un musée de géologie

QuandLe bac vu en isométrie, légende « Passez la main : le relief se soulève » ; les blocs se lèvent autour du pointeur et retombent derrière lui, une échelle plaine → colline à côté.
PourquoiLe relief qui se forme et se défait sous la main est le principe du bac à sable augmenté du musée ; ici, la souris joue le rôle de la main, et la page le dit.
RéglagesBlocs de 64 px couleur sable (#ecd49b → #d9b56f, faces #b8904f et #a07a3e), dessus vert colline (#b7d17a → #7fa650) pour la classe raised, halo brun léger.

Comment ça marche

La racine .fx-0026-root (fond #0a0a0f, 300 px de haut au minimum) centre la dalle .iso-grid[data-iso-grid] : 220 × 220 px, transform: rotateX(60deg) rotateZ(45deg), preserve-3d, curseur en croix, tabindex="0". Il n'y a pas de perspective : les arêtes parallèles le restent, c'est une vraie vue isométrique. Les seize .iso-block sont écrits dans le HTML (42 × 42 px tous les 46 px, colonne et rangée dans data-col et data-row) ; chacun porte un dessus .iso-block-top (dégradé #6366f1 → #818cf8) et deux faces de 20 px rabattues par rotateX(-90deg) et rotateY(90deg), celles que l'on voit avec cette rotation.

Le script cherche chaque [data-iso-grid] de la page. Il ne crée les blocs que s'ils manquent, puis, à chaque pointermove sur la dalle, mesure à l'écran la distance entre le pointeur et le centre de chaque bloc. Sous 60 px, le bloc reçoit translateZ((60 − d) / 60 × 25 px) et la classe raised (dessus #818cf8 → #a5b4fc, halo rgba(99, 102, 241, .5) de 20 px) ; au-delà, il redescend. Les transitions CSS de 0,3 s lissent le tout. Quand la souris quitte la dalle, tout retombe. Mesuré dans Chromium 151 et Firefox 153 : pointeur sur un bloc du centre, 9 blocs levés, le plus haut à 25 px ; 6,8 % des pixels changent. Les distances sont prises à l'écran, après la rotation : la bosse est ronde pour l'œil, pas sur la dalle.

Au doigt, pointerdown forme la bosse là où l'on touche, et elle reste jusqu'au toucher suivant (le défilement de la page n'est pas bloqué). Au clavier, Tab donne le focus à la dalle (liseré #a5b4fc), la bosse se forme sur un bloc du centre, et les flèches la déplacent d'un bloc le long des colonnes et des rangées ; elle retombe quand la dalle perd le focus. Mesuré : deux appuis sur → amènent la bosse contre le bord. Chaque mouvement relit la position de 17 éléments : 0,3 ms dans Chromium et 1,7 ms dans Firefox par mouvement, mesuré sur 300 mouvements. Deux dalles sur une page : chacune a son instance, mesuré, seule la dalle survolée réagit.

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, le script ne pose aucune élévation et un bloc CSS limité à .fx-0026-root annule celle de la classe raised : les blocs ne bougent pas, ceux qui sont près du pointeur s'éclairent et prennent leur halo. Mesuré dans Chromium et Firefox : 9 blocs éclairés, aucune transformation, 5,7 % de pixels changés (6,8 % sans la préférence).
  • Clavier : la dalle se prend au clavier (Tab), les flèches déplacent la bosse, et elle porte aria-label="Isometric grid", à traduire dans la langue de votre page. Elle reste un décor : un lecteur d'écran n'annonce que ce nom. Si la dalle porte une information (une zone couverte, un niveau), écrivez-la à côté en texte.
  • Contraste : le dessus éclairé ne se distingue du dessus normal que de 1,5:1 ; c'est le relief, puis le halo, qui montrent la bosse. Sur fond clair, assombrissez les faces pour garder le volume.
  • Toucher : mesuré en émulation tactile Chromium et dans Firefox, un toucher sur la dalle lève les blocs autour du doigt ; le script n'empêche pas la page de défiler quand on glisse.

Compatibilité navigateur

JavaScript (Pointer Events, getBoundingClientRect, classList, matchMedia, 4 Ko) + CSS 3D sur trois niveaux (preserve-3d sur la dalle, les blocs et leurs faces, sans perspective), aucune dépendance. Mesuré dans Chromium 151 et Firefox 153 : même bosse (9 blocs, 25 px au plus), même clavier, même mouvement réduit, deux dalles indépendantes, 0 erreur. Le WebKit de Playwright aplatit toute 3D en preserve-3d, même un cube de référence : rendu Safari non vérifié sur un vrai Safari.

Chrome 86+✓ Complet
Firefox 85+✓ Complet (1,7 ms par mouvement mesuré)
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)

Sans JavaScript, la dalle reste affichée avec ses seize blocs à plat : rien ne monte. Si le navigateur aplatit la 3D, les faces se rabattent dans le plan et l'élévation ne se voit plus ; l'éclairage et le halo des blocs proches restent.

Le code

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

index.html — structure
<div class="fx-0026-root">
  <div class="iso-grid" data-iso-grid tabindex="0" aria-label="Isometric grid">   <!-- rotateX(60deg) rotateZ(45deg) -->
    <div class="iso-block" data-col="0" data-row="0" style="left: 0px; top: 0px; width: 42px; height: 42px;">
      <div class="iso-block-top"></div>
      <div class="iso-block-right"></div>
      <div class="iso-block-front"></div>
    </div>
    … (16 blocs)
  </div>
</div>
<!-- + le script : une instance par [data-iso-grid] (pointeur, toucher, flèches) -->

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 d'influence (JS — 60 dans raiseAround, trois fois) 60 px Changez les trois occurrences ensemble. 90 px donne une bosse plus large et plus douce ; 40 px ne lève que le bloc sous le pointeur et ses voisins immédiats.
Hauteur maximale (JS — * 25) 25 px 40 px fait une bosse marquée ; au-delà de la moitié de la taille d'un bloc, les blocs levés masquent ceux qui sont derrière.
Taille et nombre de blocs (JS — cols, rows, size, gap ; HTML — styles des blocs ; CSS — taille de .iso-grid) 4 × 4 ; 42 px ; 4 px ; dalle de 220 px Les blocs du HTML gardent leurs tailles écrites : changez-les aussi, ou supprimez-les et laissez le script les créer à partir de cols, rows, size et gap.
Couleurs (CSS — .iso-block-top, .iso-block-right, .iso-block-front, .iso-block.raised) #6366f1 → #818cf8 ; faces #4f46e5 et #4338ca ; levé #818cf8 → #a5b4fc, halo rgba(99, 102, 241, .5) Les faces doivent rester plus sombres que le dessus pour garder le volume. Le halo est un box-shadow : sur fond clair, une teinte brune ou grise à 30 % suffit.
Douceur (CSS — transition de .iso-block) transform .3s, box-shadow .3s 0,15 s donne une bosse qui colle au pointeur ; 0,6 s, une vague qui traîne derrière.
Angle (CSS — rotateX(60deg) rotateZ(45deg) de .iso-grid) 60° et 45° Avec rotateZ(-45deg), ce sont d'autres faces qui se voient : il faudrait déplacer .iso-block-front sur le bord gauche.

FAQ

Les deux portent le même nom dans le catalogue, mais ne font pas la même chose. Celle-ci 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. fx-0010 est une grille de 3 × 3 en CSS pur : une seule case monte, celle qu'on survole, et vire au rose-violet — c'est un sélecteur. Choisissez celle-ci pour montrer un rayon ou un relief, fx-0010 pour désigner une case.
Oui. Au doigt, la bosse se forme là où l'on touche et reste jusqu'au toucher suivant ; le script ne bloque pas le défilement de la page. Au clavier, Tab donne le focus à la dalle, la bosse apparaît sur un bloc du centre et les flèches la déplacent d'un bloc ; elle retombe quand on quitte la dalle.
C'est le plus simple : la dalle s'affiche avant même que le script tourne, et le script ne crée des blocs que s'il n'en trouve aucun. Si vous changez la taille ou le nombre de blocs, changez aussi ces lignes, ou supprimez-les toutes et laissez le script les créer avec cols, rows, size et gap.