SVG✨ Premium

Geometric Tessellation

Mosaïque de carreaux en dégradé dont l'orientation est tirée au hasard ; une pulsation lente traverse la grille case après case.

CSSGridPattern

Mis à jour le

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

3 exemples d'usage

Galerie d'un cabinet d'architectes — la mosaïque tient la place des vignettes pendant le chargement — Geometric Tessellation exemple 1

① Galerie d'un cabinet d'architectes — la mosaïque tient la place des vignettes pendant le chargement

QuandLa page des réalisations s'ouvre : les huit emplacements de la galerie pulsent, puis chaque photo de projet vient recouvrir sa case dès qu'elle est prête.
PourquoiLa grille a exactement la forme de la galerie (4 colonnes, 2 rangées) : le visiteur voit où les projets vont apparaître, et la vague qui la parcourt dit que le chargement avance.
Réglagesdata-cols="4" data-rows="2", --gtz-height: 222px, --gtz-color: #a07c4f sur --gtz-bg: #ebe5da, --gtz-gap: 4px. Les vignettes sont une grille de même forme posée par-dessus ; leur arrivée est simulée par la scène.
Section « Formules » d'un coworking — mosaïque turquoise derrière trois cartes de prix — Geometric Tessellation exemple 2

② Section « Formules » d'un coworking — mosaïque turquoise derrière trois cartes de prix

QuandLe visiteur arrive sur les tarifs : la mosaïque occupe toute la section et ondule lentement derrière les cartes Poste nomade, Bureau fermé et Salle de réunion.
PourquoiDouze colonnes de petits carreaux évoquent un plan de bureaux vu d'en haut ; un dégradé sombre en haut de section garde le titre lisible et les cartes ont leur propre fond.
Réglagesdata-cols="12" data-rows="8", --gtz-height: 360px, --gtz-color: #2dd4bf, --gtz-bg: #061413, --gtz-gap: 3px, racine en position: absolute; inset: 0 sous le contenu.
Taquin du jour d'un quotidien régional — le plateau s'illumine quand la grille est résolue — Geometric Tessellation exemple 3

③ Taquin du jour d'un quotidien régional — le plateau s'illumine quand la grille est résolue

QuandLe joueur fait glisser la dernière case : le plateau passe au sombre et la mosaïque ambrée apparaît sous les seize cases devenues transparentes.
PourquoiLa récompense prend la forme du jeu lui-même : une mosaïque de 4 × 4 calée sous les cases, qui s'allume au lieu d'une fenêtre de félicitations.
Réglagesdata-cols="4" data-rows="4", --gtz-height: 224px, --gtz-color: #f59e0b, --gtz-bg: #1c1206, --gtz-gap: 2px. La racine est à opacity: 0 et passe à 1 quand la scène ajoute la classe de victoire.

Comment ça marche

Le HTML ne contient qu'un conteneur vide .gtz-grid. Au chargement, le script parcourt chaque .fx-0610-root de la page et y crée data-cols × data-rows carreaux (8 × 6 = 48 par défaut). Chaque carreau reçoit deux variables : son rang --gtz-i et un angle --gtz-angle tiré entre 0 et 360°. Le pseudo-élément ::before du carreau peint un linear-gradient dans cette direction, de l'indigo #6366f1 vers le transparent à 70 % : aucune case ne ressemble à sa voisine, et le motif change à chaque chargement.

L'animation gtzPulse fait passer chaque carreau de 30 % à 100 % d'opacité et de 80 % à 100 % de sa taille, puis l'inverse, en 4 secondes. Le départ est calculé en CSS : calc(var(--gtz-i) * var(--gtz-step) - 100 * var(--gtz-speed)). Avec 0,05 s d'écart entre deux cases, la pulsation glisse dans l'ordre de lecture, de gauche à droite puis ligne par ligne. Le retrait de 100 cycles rend tous les délais négatifs : la vague est déjà en place à l'affichage, aucune case ne reste allumée puis s'éteint d'un coup pendant les premières secondes.

Le script ne garde rien en mémoire et ne pose rien sur window : deux mosaïques dans la même page ont chacune leurs carreaux et leurs angles. Il marque la racine avec data-gtz-ready pour ne pas la remplir deux fois si le code est collé deux fois. Les dimensions viennent de la grille CSS, qui remplit la largeur du parent sur la hauteur --gtz-height (300 px par défaut).

Accessibilité

  • Décor masqué aux lecteurs d'écran : la grille porte aria-hidden="true". Si la mosaïque signale un chargement, annoncez-le à côté, par un texte dans une zone aria-live="polite" (« Chargement des projets »).
  • Mouvement réduit : sous prefers-reduced-motion: reduce, les animations sont mises en pause (animation-play-state: paused). Grâce aux délais négatifs, la mosaïque se fige sur une image où les carreaux gardent des opacités différentes, au lieu de 48 cases identiques.
  • Aucune interaction : rien ne se clique ni ne se survole, la mosaïque ne prend jamais le focus et ne gêne pas la navigation au clavier.
  • Contraste : les carreaux descendent à 30 % d'opacité. Un texte posé dessus doit avoir son propre fond (carte, bandeau) ; ne comptez pas sur la mosaïque pour le faire ressortir.

Compatibilité navigateur

CSS Grid, variables CSS et calc() dans animation-delay, sans canvas ni bibliothèque. Versions minimales relevées dans les données de compatibilité MDN (Grid : Chrome 57, Firefox 52, Safari 10.1). Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 : 48 carreaux par copie, deux copies indépendantes, rien qui déborde à 390 px.

Chrome 57+✓ Complet (mesuré)
Firefox 52+✓ Complet (mesuré)
Safari 10.1+✓ Complet (mesuré sur WebKit)
Edge 79+✓ Complet (moteur de Chrome)
Safari iOS 10.3+✓ Non vérifié sur appareil
Chrome Android 57+✓ Complet (mesuré à 390 px, tactile)

Sans JavaScript, la grille reste vide : seul le fond de la racine s'affiche. Sans CSS Grid, les carreaux n'ont plus de hauteur et la zone reste vide.

Le code

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

index.html — structure
<div class="fx-0610-root" data-cols="8" data-rows="6">
  <div class="gtz-grid" aria-hidden="true"></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
data-cols / data-rows (racine) 8 / 6 Nombre de colonnes et de rangées (1 à 40). La grille se partage la largeur et la hauteur disponibles ; les carreaux s'étirent donc selon le rapport des deux.
--gtz-color #6366f1 Couleur de départ de chaque dégradé ; l'autre extrémité est toujours transparente et laisse voir --gtz-bg.
--gtz-bg #0a0a0f Fond de la racine, visible entre les carreaux et dans leur partie transparente. Un fond clair avec une couleur moyenne donne un rendu de squelette de chargement.
--gtz-gap 2px Retrait de chaque dégradé dans sa case : 0 colle les carreaux, 6 px dessine un quadrillage marqué.
--gtz-speed 4s Durée d'une pulsation complète (éteint → allumé → éteint).
--gtz-step 0.05s Écart entre deux cases consécutives. 0 fait pulser toute la grille ensemble ; 0,2 s étire la vague.
--gtz-height 300px Hauteur de la mosaïque ; la largeur suit toujours le parent.

FAQ

Pas sans toucher au script : les angles sont tirés avec Math.random() à chaque chargement. Pour un motif fixe, remplacez cette valeur par un calcul tiré du rang, par exemple (i * 47) % 360.
Les carreaux sont générés et vidés par le script, ils ne sont pas faits pour recevoir du contenu. Posez plutôt une grille de même forme par-dessus la racine, comme dans l'exemple de la galerie : la mosaïque reste dessous et se voit là où votre contenu n'est pas encore arrivé.
Chaque carreau est une animation CSS d'opacité et de transformation, que le navigateur confie à la carte graphique. Quelques centaines restent fluides. Le script plafonne la grille à 40 × 40, soit 1 600 animations : près de ce maximum, surtout sur mobile, préférez des carreaux plus grands.