Liquid✨ Premium

Predictive Grid Morph

48 cases HTML en grille de 8 × 6 qui, dans un rayon de 120 px autour de la souris, s'écartent d'elle jusqu'à 15 px, grossissent jusqu'à × 1,3 et s'éclairent, puis reviennent en 0,4 s quand elle s'éloigne : une loupe en relief qui suit le pointeur sur la grille. CSS Grid et 1,8 Ko de JavaScript, sans canvas ; couleur seule si l'utilisateur réduit les animations. La grille réagit à la position de la souris, elle ne prédit pas sa trajectoire.

CSSJSGrid

Mis à jour le

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

3 exemples d'usage

Plaque alvéolée de 48 godets — planificateur de semis d'un maraîcher — Predictive Grid Morph exemple 1

① Plaque alvéolée de 48 godets — planificateur de semis d'un maraîcher

QuandLa grille 8 × 6 est la plaque de semis posée dans la serre : une rangée par légume (tomate, basilic, laitue, poivron, courgette, persil), initiales dans chaque godet ; la souris parcourt la plaque.
Pourquoi8 × 6 cases, c'est le format exact des plaques de 48 ; les godets qui gonflent sous la souris aident à viser un godet précis avant de noter ce qu'on y sème.
RéglagesPlaque noire aux coins de 12 px ; godets aux coins de 8 px avec une ombre intérieure ; une couleur par rangée, reprise au survol (la copie des scènes lit une couleur r, g, b par case au lieu de l'indigo) ; initiales en blanc.
Pads d'une boîte à rythmes en ligne — Predictive Grid Morph exemple 2

② Pads d'une boîte à rythmes en ligne

QuandSix instruments sur huit pas (kick, snare, clap, hat, tom, perc) ; les pads allumés du motif portent un point lumineux, et les pads proches de la souris grossissent et s'éclairent avant le clic.
PourquoiLa grille réagit au déplacement, pas seulement au clic : on voit sur quel pad on va taper, comme sur un appareil rétroéclairé.
RéglagesGrille décalée de 62 px pour les noms d'instruments à gauche ; une couleur par instrument (rose, orange, jaune, cyan, indigo, magenta) au repos et au survol ; coins de 6 px.
Calepinage de carreaux de ciment — configurateur d'un fabricant — Predictive Grid Morph exemple 3

③ Calepinage de carreaux de ciment — configurateur d'un fabricant

QuandSol de 8 × 6 carreaux à motifs alternés, joints clairs ; au passage de la souris, les carreaux voisins se soulèvent et s'écartent légèrement.
PourquoiLes cases qui s'écartent et grossissent donnent du relief à un sol plat : le carreau qu'on soulève pour le regarder de près.
RéglagesÉcart de 3 px et marge de 10 px ; chaque case porte un motif en dégradés CSS dans un calque intérieur, et c'est le joint (le fond de la case) qui s'éclaire en blanc ; fond de mortier beige.

Comment ça marche

La racine .fx-0417-root (300 px de haut au moins, fond #0a0a0f) contient .ai-grid-morph, une grille CSS de 8 colonnes et 6 rangées en 1fr, 4 px d'écart, 16 px de marge intérieure. Le script y crée les 48 cases .ai-grid-cell : fond indigo à 30 %, coins de 4 px. Sur un cadre de 640 × 300 px, une case mesure environ 72 × 41 px. Les cases étant de vrais éléments HTML, vous pouvez y écrire du texte, y mettre une image ou un motif, comme le font les exemples.

À chaque mousemove sur la grille, le script mesure la distance entre la souris et le centre de chaque case. Sous 120 px, il calcule une force de 1 (case sous la souris) à 0 (case à 120 px), puis écrit en style en ligne : un décalage dans la direction opposée à la souris (force × 15 px), un agrandissement (1 + force × 0,3) et un fond plus opaque (30 % + force × 50 %). Au-delà de 120 px, ou quand la souris quitte la grille (mouseleave), le style en ligne est retiré. Le retour, comme chaque changement, passe par la transition CSS de la case : transform .4s cubic-bezier(.23, 1, .32, 1), rapide au départ et qui se pose en douceur, et background .3s.

Le résultat se lit comme une loupe en relief : les cases proches se soulèvent et s'écartent pour dégager celle qui est visée. Le script ne garde aucune mémoire des positions précédentes : la forme de la déformation ne dépend que de l'endroit où se trouve la souris à l'instant. Aucune boucle d'animation ne tourne : rien ne se calcule tant que la souris ne bouge pas sur la grille (mesuré : 0 % de pixels changés au repos).

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, le script n'écrit plus ni décalage ni agrandissement, seulement la couleur, et la règle :hover perd son zoom. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 : aucune case ne bouge, celles sous la souris s'éclairent (12,5 % des pixels changent, contre 14,5 % avec le mouvement).
  • Clavier : les cases sont des div sans rôle ni focus ; la grille ne réagit qu'à la souris. Si chaque case est une action (choisir un godet, un pad, un carreau), utilisez des button et reproduisez l'éclairage au focus : .ai-grid-cell:focus-visible { background: rgba(99, 102, 241, .8) }.
  • Toucher : sans survol, un tap envoie un seul mousemove au point touché ; mesuré dans Chromium et WebKit en mode tactile, 21 à 22 cases restent transformées autour du point jusqu'au tap suivant, faute de mouseleave. Prévoyez une sélection claire au tap si la grille sert à choisir.
  • Lecteurs d'écran : les 48 cases vides ne disent rien. Mettez le contenu de chaque case en texte, comme les initiales des légumes ou les noms d'instruments des exemples.

Compatibilité navigateur

CSS Grid, transitions et 1,8 Ko de JavaScript, aucune dépendance, aucun canvas. Mesuré dans Chromium 151, Firefox 153 et WebKit 26 : même rayon, mêmes écarts, même retour à la sortie de la souris, couleur seule sous mouvement réduit. Le script interroge la position des 48 cases (getBoundingClientRect) à chaque mouvement de souris : sans effet sensible à 48 cases, à surveiller au-delà de quelques centaines.

Chrome 74+✓ Complet
Firefox 63+✓ Complet
Safari 10.1+✓ Complet
Edge 79+✓ Complet
Mobile iOS 10.3+✓ Grille affichée ; au doigt, réaction au tap seulement
Android Chrome 74+✓ Grille affichée ; au doigt, réaction au tap seulement

Sans JavaScript, aucune case n'est créée : la racine reste un cadre sombre vide. Si la grille porte du contenu, écrivez les cases dans le HTML et retirez la boucle qui les crée ; le script les trouvera par leur classe.

Le code

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

index.html — structure
<div class="fx-0417-root">
  <div class="ai-grid-morph">
    <!-- 48 × <div class="ai-grid-cell"></div> créées par le script -->
  </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 de la grille (JS — i < 48 ; CSS — repeat(8, 1fr) / repeat(6, 1fr)) 8 × 6 = 48 cases Pour 12 × 8, mettez 96 dans la boucle et repeat(12, 1fr) / repeat(8, 1fr) dans la grille. Le nombre de cases doit égaler colonnes × rangées.
Rayon d'action (JS — const maxDist = 120) 120 px 80 px pour une loupe serrée qui ne touche que les voisines directes, 200 px pour une vague large.
Écart (JS — force * 15, deux fois) jusqu'à 15 px 0 : les cases grossissent sur place sans s'écarter ; 25 : un effet de souffle.
Agrandissement (JS — force * 0.3) jusqu'à × 1,3 0,1 pour un relief discret, 0,5 pour une loupe franche. Pensez à l'écart : sans lui, les cases agrandies se chevauchent.
Couleur (JS — rgba(99, 102, 241, …) ; CSS — .ai-grid-cell) indigo, de 30 à 80 % d'opacité Changez les trois premiers nombres dans le script et dans les deux règles CSS. Pour une couleur par case, lisez-la sur la case (cell.dataset.rgb), comme dans les deux premiers exemples.
Fluidité (CSS — transition: transform .4s cubic-bezier(.23, 1, .32, 1)) 0,4 s, départ vif et arrivée douce 0,2 s colle au geste, 0,8 s laisse une traîne derrière la souris.

FAQ

Non, malgré son nom de catalogue. Le script ne lit que la position actuelle du pointeur : aucune vitesse, aucune anticipation. Pour une vraie avance sur le geste, gardez la position précédente et visez un peu plus loin : mx + (mx - prevX) * 4 au lieu de mx (et de même pour my) ; la loupe se place alors devant la souris dans le sens du mouvement.
La grille s'affiche, mais un doigt ne survole pas : un tap envoie un seul évènement souris au point touché, les cases autour se soulèvent et restent ainsi jusqu'au tap suivant. Pour un vrai suivi au doigt, écoutez pointermove à la place de mousemove, ajoutez touch-action: none sur la grille et pointerleave pour le retour ; la page ne défilera plus quand le doigt glisse sur la grille.
Ici, 48 vraies cases HTML qu'on peut remplir de texte, d'images ou de boutons, et qui s'écartent de la souris en grossissant. Mesh Distortion AI dessine sur un canvas un filet de 169 points reliés qui ondule tout seul et se pince vers la souris. Choisissez la grille pour un choix parmi des cases (godets, pads, carreaux) ; le filet pour une matière souple (toile, filet, voile).