Chargement✨ Premium

Cube Grid

Neuf cubes 14 px en grille CSS 3 × 3 ; réduits à zéro à 35 % du cycle de 1,3 s ; délai (rang + col) × 0,1 s — vague diagonale de 0 à 0,4 s. Aucun JavaScript.

CSSGrid

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Chargement comprend 29 effets, dont 4 gratuits. Découvrir la catégorie →

3 exemples d'usage

Galerie photo — chargement d'un album de vignettes — Cube Grid exemple 1

① Galerie photo — chargement d'un album de vignettes

QuandL'utilisateur ouvre un album ; les vignettes ne sont pas encore arrivées. La grille se pose au centre de la zone où les 9 premières vignettes vont apparaître, puis s'efface quand elles se chargent.
PourquoiLe damier 3 × 3 est la miniature de la grille d'images qu'il remplace : le loader prend la forme du contenu attendu, ce qu'un spinner circulaire ou une barre ne font pas. La vague diagonale suit en plus l'ordre d'apparition des vignettes, du haut-gauche vers le bas-droit.
RéglagesAgrandir à 84 × 84 px (width/height: 84px sur la grille, 24px sur les cubes, gap: 6px) pour que la vague reste lisible au-dessus de vignettes de 160 px ; palette par défaut ; role="status" aria-label="Chargement de l'album" sur la grille, aria-busy="true" sur la zone des vignettes.
Cellule de tableau de bord — métrique en cours de calcul — Cube Grid exemple 2

② Cellule de tableau de bord — métrique en cours de calcul

QuandUn tableau de bord analytique affiche des cellules dont certaines valeurs arrivent en différé depuis l'API. La grille occupe la cellule le temps de la réponse, puis est remplacée par le chiffre.
PourquoiLa grille carrée occupe une empreinte fixe et prévisible — elle ne décale pas le reste du tableau. Son motif en damier correspond visuellement au contexte tabulaire et évite toute confusion avec une erreur.
RéglagesCentrer via display: flex; align-items: center; justify-content: center sur la cellule ; couleurs neutres #94a3b8 (repos) et #cbd5e1 (minimum) pour ne pas concurrencer les données.
Calendrier de réservation — recherche des créneaux disponibles — Cube Grid exemple 3

③ Calendrier de réservation — recherche des créneaux disponibles

QuandL'utilisateur a choisi ses dates et son nombre de participants ; le système interroge la disponibilité de chaque créneau. La grille recouvre le tableau des créneaux (3 jours × 3 plages) le temps de la réponse.
PourquoiLes 9 cubes répondent un à un aux 9 créneaux interrogés : le loader est un tableau de créneaux en réduction. Chaque cube qui s'éteint puis se rallume figure une case en cours de vérification, et la vague diagonale balaie le tableau comme la requête parcourt les jours puis les horaires — aucun loader circulaire ne raconte cela.
Réglages72 × 72 px (width/height: 72px sur la grille, 20px sur les cubes, gap: 6px) ; cycle de 1,3 s conservé ; role="status" aria-label="Recherche des disponibilités" sur la grille, aria-busy="true" sur le tableau des créneaux.

Comment ça marche

Le HTML vendu contient un .loader-cube-grid avec 9 <span>. La grille mesure 54 × 54 px : display: grid; grid-template-columns: repeat(3, 1fr); gap: 4px. Chaque cube fait 14 × 14 px, border-radius: 2px, fond #6366f1. Mesuré en Chromium : la colonne calculée vaut 15,33 px — (54 − 2 × 4) / 3 —, les 0,67 px de marge libre de chaque côté ne modifient pas le rendu visuel. Aucun JavaScript : l'effet est entièrement CSS.

L'animation cubeGridScale (1,3 s, ease-in-out, infini) se déroule en trois phases mesurées. De 0 à 35 % (0,455 s), chaque cube passe de scale(1) à scale(0) et de #6366f1 (indigo) à #d946ef (fuchsia) — le cube « disparaît » au moment où sa couleur change. De 35 à 70 % (0,455 s), il revient à scale(1) et à #6366f1. De 70 à 100 % (0,39 s), il reste stable à pleine taille, indigo — 30 % du cycle de repos avant de recommencer.

Le délai de chaque cube suit la formule (rang + colonne) × 0,1 s (indices à partir de 0) : le cube (0, 0) démarre à 0 s, les cubes (0, 1) et (1, 0) à 0,1 s, les cubes (0, 2), (1, 1) et (2, 0) à 0,2 s, les cubes (1, 2) et (2, 1) à 0,3 s, le cube (2, 2) à 0,4 s. Les trois anti-diagonales se déclenchent successivement — la vague traverse la grille du coin supérieur gauche au coin inférieur droit en 0,4 s, soit moins d'un tiers du cycle.

Accessibilité

  • prefers-reduced-motion absent : aucune règle @media (prefers-reduced-motion: reduce) dans le code — mesuré sous émulation Playwright, les 9 animations cubeGridScale continuent de tourner, animationPlayState: running. Ajoutez @media (prefers-reduced-motion: reduce) { .loader-cube-grid span { animation: none } } pour figer les cubes à taille pleine.
  • Un indicateur de chargement doit être annoncé aux technologies d'assistance. Le code ne fournit aucune sémantique : ajoutez role="status" aria-label="Chargement en cours" sur .loader-cube-grid, ou aria-busy="true" sur l'élément couvert. Si un parent porte déjà ce rôle, posez aria-hidden="true" sur la grille elle-même.
  • Les 9 <span> sont vides et muets. Aucun texte, aucune interaction, aucun événement clavier : l'effet est purement passif — aucun risque de conflit de focus ni de piège au clavier.
  • Contraste non applicable : les cubes sont des éléments graphiques décoratifs (seuil 3:1 non requis pour les composants d'interface passifs). Ils font 14 px sur fond #0a0a0f : l'indigo #6366f1 mesure 4,0:1 et le fuchsia #d946ef 4,8:1 — les deux passent le seuil 3:1.

Compatibilité navigateur

Requiert display: grid, grid-template-columns, gap sur une grille, et @keyframes avec transform: scale() et un changement de background. Aucune variable CSS du design system, aucune dépendance.

Chrome 57+✓ Complet
Firefox 52+✓ Complet
Safari 10.1+✓ Complet
Edge 79+✓ Complet
iOS Safari 10.3+✓ Complet
Android Chrome✓ Complet

Sans display: grid (IE 11 utilise une syntaxe préfixée partielle), les 9 spans s'affichent en ligne. Sans @keyframes, 9 carrés indigo statiques — pas un rendu cassé, juste l'absence d'animation.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="loader-cube-grid">
  <span></span>
  <span></span>
  <!-- … 9 spans au total -->
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
Taille des cubes (CSS — width/height sur .loader-cube-grid span) 14px La grille ne s'adapte pas automatiquement : ajustez aussi width/height de .loader-cube-grid (3 × taille + 2 × gap). À 8 px (gap 2 px) la grille fait 28 px — tient dans un bouton compact.
Écart entre cubes (CSS — gap sur .loader-cube-grid) 4px 2px : cubes serrés, l'ensemble paraît presque solide ; 6px : grille aérée, chaque cube est distinct. À 0, les cubes sont jointifs.
Couleur de repos (CSS — background: #6366f1 sur .loader-cube-grid span et keyframe 0 %/70 %/100 %) #6366f1 (indigo) Couleur visible pendant 70 % du cycle. Les deux occurrences (règle de base et keyframe) doivent correspondre — la règle de base s'affiche avant le premier cycle.
Couleur au minimum (CSS — keyframe 35 %, background: #d946ef) #d946ef (fuchsia) Couleur visible pendant la transition vers scale(0) et le retour. Elle reste perceptible même si le cube est très petit au passage à 0.
Durée du cycle (CSS — 1.3s sur .loader-cube-grid span) 1,3 s 0,8 s : vague rapide ; 2 s : rythme lent, quasi décoratif. En dessous de 0,5 s, le délai maximal de 0,4 s représente 80 % du cycle et le motif diagonale disparaît — raccourcissez aussi les délais.
Rythme de la vague (CSS — délais des neuf règles nth-child) 0,1 s par rang diagonal (0 s à 0,4 s) 0,05 s par pas : cubes presque simultanés, vague très rapide (délai max 0,2 s) ; 0,2 s : décalage marqué (délai max 0,8 s). Les neuf valeurs à recalculer à la main : (rang + col) × incrément.
Nombre de colonnes et de cubes (CSS — repeat(3, 1fr) ; HTML — nombre de <span>) 3 colonnes, 9 cubes Une grille 4 × 4 (16 spans, délais de 0 à 0,6 s) ou 2 × 2 (4 spans, délais de 0 à 0,2 s) fonctionne avec le même pattern — adaptez grid-template-columns, la taille de la grille et les règles nth-child.

FAQ

Cube Flip est un unique cube de 40 × 40 px qui enchaîne deux demi-tours 3D (rotateX −180° puis rotateY −180°) en 1,2 s — un seul élément, une perspective, une rotation. Cube Grid est neuf cubes mis à l'échelle 2D en vague diagonale : aucune rotation, aucune perspective, neuf éléments. Les deux partagent la couleur #6366f1 mais n'ont aucun code commun dans leurs propres fichiers.
Oui en retournant les délais. La formule inversée est (4 − rang − col) × 0,1 s (indices 0-based) : nth-child(1) → 0,4 s, nth-child(2) → 0,3 s, nth-child(3) → 0,2 s, nth-child(4) → 0,3 s, nth-child(5) → 0,2 s, nth-child(6) → 0,1 s, nth-child(7) → 0,2 s, nth-child(8) → 0,1 s, nth-child(9) → 0 s.
Non. La clé js du fichier vendu est vide. Tout repose sur @keyframes et les neuf règles nth-child. Aucune initialisation, aucun écouteur d'événement, aucune dépendance — coller le HTML et le CSS dans la page suffit.