Communitygithub.com

Système de Grille Masonry

Concevoir et implémenter un framework de mise en page en grille masonry multi-colonnes systématique pour organiser des cartes de contenu de hauteurs variées sans espaces verticaux, tout en maintenant une hiérarchie visuelle stricte, un ordre de lecture et de focus logique, et une accessibilité WCAG AA.

Qu'est-ce que Système de Grille Masonry ?

Le système de grille masonry résout le problème spatial de disposer dynamiquement des cartes de hauteurs variables dans des colonnes parallèles, en évitant les trous blancs gênants des grilles CSS standard. Il propose trois stratégies architecturales : la disposition multi-colonnes CSS pure (statique, sans interaction), la grille CSS avec chevauchement de lignes (semi-dynamique, ordre de lecture horizontal) et la distribution JavaScript par colonne la plus courte (haute interactivité, ordre de tabulation gauche-droite parfait). Le système garantit que l'ordre de lecture DOM et la navigation clavier respectent les critères WCAG 1.3.2 et 2.1.1, et empêche le Cumulative Layout Shift (CLS) via des boîtes de ratio d'aspect et des placeholders squelette. Il est compatible avec tous les frameworks web (React, Vue, Svelte, Vanilla JS) et fournit des critères clairs pour choisir la bonne stratégie selon le type de contenu et d'interactivité.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/coastdigitalgroup/coastai-skills/tree/HEAD/website-design/masonry-grid-layout-system

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Système de Grille Masonry ?

Objectif

Le système de grille Masonry fournit un framework de conception standardisé et réactif pour afficher des cartes de contenu non uniformes de hauteurs variables (comme les portfolios de photographie, les flux de contenu généré par l'utilisateur, les cartes médias mixtes ou les tableaux d'inspiration éditoriaux). Les grilles CSS standard imposent un alignement vertical des lignes, créant des espaces blancs verticaux gênants lorsque les éléments ont des ratios d'aspect ou des longueurs de texte variables.

Concevoir une grille masonry efficace nécessite de résoudre le défi spatial du remplissage dynamique des éléments dans des colonnes verticales parallèles, d'empêcher le décalage de mise en page cumulatif (Cumulative Layout Shift - CLS) lors du chargement des médias, d'assurer une dégradation gracieuse des colonnes sur mobile et, surtout, d'empêcher la disposition visuelle de casser l'ordre de lecture logique du DOM et la séquence de navigation au clavier (WCAG 2.1 SC 1.3.2 et SC 2.1.1).

Cas d'Utilisation

  • Portfolios de Photographie et Médias Visuels : Afficher des galeries d'images avec des ratios d'aspect natifs variés (portrait, paysage, carré, panorama) dans une grille serrée et sans trous.
  • Flux d'Activité Sociaux et UGC : Organiser des cartes sociales mixtes contenant de courtes mises à jour textuelles, des articles complets, des images intégrées et des bandes-annonces vidéo.
  • Murs d'Avis et UGC E-Commerce : Présenter des photos d'avis clients, des publications Instagram taguées et des extraits de produits phares dans une vitrine de découverte dynamique.
  • Tableaux d'Inspiration Éditoriale et Pinboards : Construire des moodboards, des gestionnaires de favoris et des flux d'inspiration où les cartes contiennent divers éléments de contenu avec des empreintes verticales variables.

Quand NE PAS Utiliser

  • Grilles à Ratio d'Aspect Uniforme : Si tous les éléments partagent des ratios d'aspect identiques (par exemple, cartes vidéo standard 16:9 ou catalogues de produits 1:1), utilisez responsive-grid-system ou card-ui-system.
  • Mises en Avant Asymétriques 2D Structurées : Pour les sections héros organisées avec des règles explicites de chevauchement rectangulaire 2D (par exemple, une fonctionnalité principale 2x2 accompagnée de blocs de statistiques 1x1), utilisez bento-grid-layout-system.
  • Données Tabulaires ou Alignées Strictes : Lorsque les utilisateurs doivent comparer des valeurs sur des lignes horizontales (par exemple, tableaux de prix ou métriques financières), utilisez data-table-ui-system ou comparison-matrix-system.
  • Narration Séquentielle et Articles : Pour les récits linéaires où l'ordre de lecture doit suivre strictement un seul flux vertical, utilisez article-layout-system ou section-composition-system.

Entrées

  1. Inventaire du Contenu et Ratios d'Aspect : Types de contenu média et texte (images, vidéos, extraits de texte, cartes d'action) et leur spectre de ratios d'aspect (du portrait 3:4 au paysage 16:9).
  2. Exigences d'Architecture des Colonnes : Nombres de colonnes cibles selon la taille d'écran (par exemple, 4 colonnes sur grand écran, 3 sur écran de bureau, 2 sur tablette, 1 sur mobile).
  3. Exigences d'Interactivité et de Focus : Éléments interactifs à l'intérieur des cartes (boutons, lightboxes, toggles en ligne, liens) nécessitant une accessibilité au clavier.
  4. Jetons d'Espacement et de Thème : Gouttières de colonnes fluides et espaces entre les lignes (gap: clamp(12px, 2vw, 24px)), remplissages de fond de carte, rayons de bordure et jetons d'anneau de focus (provenant de fluid-spacing-system et focus-indicator-design-system).

Sorties

  1. Spécification de l'Architecture de Disposition Masonry : Choix stratégique et plan technique entre le flux multi-colonnes CSS pur, le chevauchement de lignes de grille CSS (grid-auto-rows) et le remplissage par colonne la plus courte en JavaScript.
  2. Matrice de Mise à l'Échelle Réactive des Colonnes : Définition des points de rupture pour des transitions fluides du nombre de colonnes et la mise à l'échelle des espaces.
  3. Carte de l'Ordre de Lecture du DOM et du Focus Clavier : Architecture garantissant que la navigation clavier (Tab / Shift+Tab) suit l'ordre de lecture visuel naturel sans sauts de colonne chaotiques.
  4. Règles de Stabilité de la Disposition et de Préservation du Ratio d'Aspect : Architecture CSS empêchant le décalage de mise en page cumulatif (CLS) lors du chargement des images et des médias.

Flux de Travail

1. Sélectionner la Stratégie Architecturale

Choisir la technique de disposition appropriée en fonction de l'interactivité et des exigences d'ordre de lecture :

  • Option A : Disposition Multi-Colonnes CSS Pure (column-count)
    • Idéal pour : Galeries statiques, flux d'images lourds ou cartes non interactives où l'ordre du flux peut être vertical dans la colonne 1, puis la colonne 2, etc.
    • Implémentation : column-count: 4; column-gap: var(--space-m);. Définir break-inside: avoid; margin-bottom: var(--space-m); sur les cartes enfants.
    • Compromis : L'ordre vertical de la source (de haut en bas dans les colonnes) peut dérouter les utilisateurs du clavier si les cartes contiennent des contrôles interactifs.
  • Option B : Grille CSS avec Chevauchement de Lignes (grid-auto-rows & grid-row: span X)
    • Idéal pour : Grilles semi-statiques où les hauteurs de carte peuvent être quantifiées en unités de piste de ligne fixes (par exemple, pistes de base de 10px).
    • Implémentation : display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); grid-auto-rows: 10px; gap: 16px;. JavaScript calcule la hauteur du contenu et applique grid-row: span Math.ceil(height / trackHeight).
    • Compromis : L'ordre DOM horizontal natif est préservé, mais nécessite des calculs de hauteur JavaScript mineurs ou des requêtes de conteneur.
  • Option C : Distribution par Conteneur de Colonne la Plus Courte en JavaScript
    • Idéal pour : Flux de médias mixtes hautement interactifs où l'ordre de lecture de gauche à droite est primordial et où les cartes contiennent des liens, des boutons et des contrôles de formulaire.
    • Implémentation : Créer $N$ conteneurs de colonnes flex (display: flex; flex-direction: column; gap: var(--space-m);). Ajouter les nouvelles cartes à la colonne dont la hauteur totale rendue est actuellement la plus courte.
    • Compromis : Nécessite une gestion côté client des conteneurs DOM, mais garantit un flux de focus DOM parfait de gauche à droite et zéro espace vertical visuel.

2. Définir le Rythme Spatial et les Gouttières de Colonnes

Établir des jetons d'espacement cohérents sur toutes les colonnes et le remplissage intérieur des cartes :

  • Gouttières de Colonnes : Utiliser un espacement fluide des espaces (par exemple, gap: clamp(16px, 2.5vw, 28px)). S'assurer que les espaces verticaux entre les cartes empilées sont égaux aux espaces horizontaux des colonnes pour maintenir une densité spatiale uniforme.
  • Remplissage des Cartes et Alignement Intérieur : Standardiser le remplissage interne des cartes à l'aide de jetons fluides (padding: var(--space-m)). Pour les cartes uniquement média (par exemple, déclencheurs de lightbox), permettre aux images de déborder bord à bord (padding: 0; overflow: hidden;).
  • Synchronisation du Rayon de Coin : Appliquer un rayon de bordure cohérent aux conteneurs de carte externes (par exemple, 12px à 16px). S'assurer que les éléments internes (par exemple, les images du haut) héritent de rayons de coin concentriques (border-top-left-radius: calc(var(--card-radius) - 1px)).

3. Empêcher le Décalage de Mise en Page (CLS) et les Distorsions d'Image

Les grilles masonry sont très sensibles au décalage de mise en page cumulatif lors du chargement des images :

  • Boîtes de Ratio d'Aspect : Déclarer explicitement aspect-ratio sur les conteneurs d'images (aspect-ratio: 4 / 5; object-fit: cover; width: 100%; display: block;) ou calculer les ratios de remplissage en ligne avant la résolution des médias.
  • Placeholders Squelette : Rendre des impulsions de fond squelette stylisées (background: var(--surface-subtle); animation: pulse 1.5s infinite;) correspondant au ratio d'aspect attendu de la carte pendant le chargement des ressources distantes.
  • Écouteurs de Chargement d'Image : Si vous utilisez des calculs de hauteur JS, lier ResizeObserver ou des écouteurs d'événement load d'image pour recalculer les allocations de hauteur de colonne une fois que les images ont fini de s'afficher.

4. Concilier l'Ordre de Lecture du DOM et la Gestion du Focus

Assurer la conformité avec WCAG 1.3.2 (Séquence Significative) et 2.1.1 (Clavier) :

  • Éviter les Déconnexions Visuelles-DOM : Si vous utilisez des colonnes CSS où la disposition visuelle s'écoule verticalement dans les colonnes, assurez-vous que les indicateurs de focus clavier restent distincts et logiques. Si les cartes contiennent des contrôles interactifs, préférez la distribution par colonne la plus courte en JavaScript ou le chevauchement de lignes de grille CSS pour maintenir une séquence de tabulation naturelle de gauche à droite et de haut en bas (ordre de la touche Tab).
  • Visibilité de l'Indicateur de Focus : Standardiser des indicateurs de focus à contraste élevé et non coupés (outline: 3px solid var(--focus-ring-color); outline-offset: 3px;). Éviter overflow: hidden sur les cartes sans ajouter un espacement suffisant pour l'indicateur de focus à l'intérieur des limites de coupe.
  • Raccourcis Clavier pour Lightboxes / Modales : Si cliquer sur une carte masonry ouvre une superposition modale ou une lightbox, piéger le focus clavier dans la superposition (focus-trap) et ramener le focus sur le déclencheur de la carte d'origine lors de la fermeture (touche Escape).

5. Implémenter la Mise à l'Échelle Réactive des Colonnes

Concevoir des points de rupture pour faire évoluer gracieusement le nombre de colonnes sans casser l'équilibre du contenu :

  • Grand Écran (≥ 1440px) : 4 Colonnes (column-count: 4 ou 4 pistes de colonnes flex).
  • Bureau Standard (1024px – 1439px) : 3 Colonnes (column-count: 3 ou 3 pistes de colonnes flex).
  • Tablette / Petit Écran (640px – 1023px) : 2 Colonnes (column-count: 2 ou 2 pistes de colonnes flex).
  • Mobile (< 640px) : 1 Colonne (column-count: 1 ou pile verticale unique). Tous les éléments s'empilent naturellement avec un espacement vertical standard.

Règles de Décision

Matrice de Sélection Architecturale

Type de Contenu et d'InteractionStratégie Architecturale RecommandéeJustification
Galerie d'Images Pure (Déclencheurs Lightbox)Multi-Colonnes CSS (column-count)Zéro empreinte JS, performances natives multi-colonnes du navigateur, masonry d'images vertical propre.
Cartes Interactives (Boutons, Champs, Liens)Distribution Flex par Colonne la Plus Courte en JSPréserve strictement l'ordre de tabulation DOM de gauche à droite, empêchant les sauts de focus du lecteur d'écran et du clavier.
Flux de Chargement Dynamique (Défilement Infini)Grille CSS avec Chevauchement de Lignes ou Distribution par Colonne JSPermet d'ajouter de nouvelles cartes en douceur à la colonne la plus courte sans refluer toute la mise en page.
Tableau d'Inspiration Éditorial à Contenu Textuel LourdGrille CSS avec Chevauchement de Lignes (grid-auto-rows: 10px)Maintient l'ordre de lecture horizontal tout en s'adaptant avec précision aux longueurs de texte variables.

Contraintes

  • Accessibilité (Conformité WCAG 2.1 AA) :
    • SC 1.3.2 Séquence Significative : La disposition visuelle des cartes interactives doit s'aligner logiquement avec l'ordre de navigation par tabulation du clavier (flux de focus tabindex="0").
    • SC 1.4.3 Contraste (Minimum) : Le texte rendu sur les surfaces des cartes ou les superpositions d'images doit satisfaire un rapport de contraste minimum de 4,5:1. Des superpositions de fond sombre (background: linear-gradient(to top, rgba(0,0,0,0.8), transparent)) doivent être utilisées pour le texte placé directement sur les images.
    • SC 2.1.1 Clavier : Tous les éléments interactifs des cartes (comme les boutons, les déclencheurs de favoris, les liens externes) doivent être entièrement actionnables via les touches Espace et Entrée.
    • SC 2.4.7 Focus Visible : Les cartes et déclencheurs interactifs doivent afficher un anneau de focus distinct qui n'est pas coupé par les propriétés overflow: hidden de la carte parente.
    • SC 2.5.8 Taille de Cible : Toutes les cibles tactiles à l'intérieur des cartes masonry doivent maintenir une zone interactive minimale de 24x24px (minimum 44x44px sur les fenêtres tactiles/mobiles).
  • Performance de Décalage de Mise en Page : Les images à l'intérieur des cartes masonry doivent avoir des ratios d'aspect intrinsèques ou des réservations de dimensions explicitement définis pour garantir que le CLS reste inférieur à 0,1.

Schémas d'Échec Courants

  • Le Brouhaha de la Tabulation Clavier : Utiliser column-count CSS pour des cartes interactives, ce qui fait que la touche Tab du clavier se déplace verticalement dans toute la première colonne (de l'élément 1 à l'élément 10) avant de revenir en haut de la colonne 2.
  • Le Chaos du Décalage de Mise en Page Cumulatif (CLS) : Insérer des images sans style de ratio d'aspect ni squelettes de chargement, ce qui provoque le reflussage et les sauts répétés des colonnes masonry à mesure que chaque image se charge.
  • Les Anneaux de Focus Coupés : Définir overflow: hidden sur les cartes masonry pour imposer des coins d'image arrondis, ce qui coupe l'anneau de focus de contour standard des éléments interactifs internes.
  • Hauteurs de Colonnes Non Contraintes sur Mobile : Ne pas réduire les grilles masonry à une seule colonne sur les appareils mobiles, ce qui donne des cartes multi-colonnes ultra-étroites et écrasées avec un habillage de texte illisible.
  • Totaux de Colonnes Inégaux : Ajouter de nouveaux éléments dans des flux dynamiques de manière séquentielle dans les colonnes (1, 2, 3, 1, 2, 3) plutôt que de vérifier les hauteurs des colonnes, créant ainsi de grands espaces blancs verticaux en bas des colonnes les plus courtes.

Critères de Validation

  • Alignement Architectural : La stratégie sélectionnée (Colonnes CSS vs. Chevauchement de Lignes de Grille CSS vs. Colonne la Plus Courte JS) correspond aux exigences d'interactivité des cartes.
  • Zéro Espace Vertical Non Désiré : Les cartes se regroupent sans espaces blancs d'alignement de ligne horizontale.
  • Navigation par Tabulation Clavier : Les cartes interactives suivent une séquence de tabulation visuelle logique (de gauche à droite, de haut en bas).
  • Prévention du Décalage de Mise en Page : Les ratios d'aspect ou les conteneurs squelette empêchent le CLS (<0,1) lors du chargement des médias distants.
  • Adaptation aux Points de Rupture Réactifs : La grille évolue en douceur de 4 colonnes sur grand écran à 1 seule colonne verticale sur mobile (<640px).
  • Conformité WCAG AA : Tout le texte respecte un contraste ≥4,5:1, les cibles tactiles respectent ≥24x24px (≥44x44px sur mobile) et les anneaux de focus ne sont pas coupés et sont clairement visibles.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for progressive disclosure using accordions, ensuring structural integrity, visual affordances, and accessibility across different content densities and devices.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for long-form content, managing readability, vertical rhythm, and information density to ensure a superior reading experience.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for informational elements that communicate state (Badges) and categorization (Tags) with clarity and accessibility.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for non-overlay notifications, managing global announcements and contextual inline alerts to communicate system states without interrupting the user's flow.

coastdigitalgroup/coastai-skills

Design and implement a systematic, asymmetrical bento-grid layout framework to organize diverse content types cohesively while maintaining strict visual hierarchy, logical focus order, and responsive flexibility.

coastdigitalgroup/coastai-skills

Design a responsive, mobile-first bottom navigation bar and persistent action dock system for mobile websites and web applications, establishing spatial anchors, tab bar anatomy, badge indicators, thumb-zone ergonomics, safe area inset handling, active/inactive state contrast, and desktop responsive adaptation rules.

coastdigitalgroup/coastai-skills

Design a mobile-first bottom sheet overlay system with configurable detents, drag affordances, safe area padding, responsive desktop modal/popover adaptation, and WCAG AA accessibility compliance.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for secondary navigation trails that provide orientation, context, and one-click access to parent levels in deep information architectures.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for buttons and interactive triggers, managing visual hierarchy, variant logic, and action grouping to ensure clear intent and accessible interaction.

coastdigitalgroup/coastai-skills

Design a systematic framework for date and time selection, managing calendar grids, range pickers, and scheduling interfaces to ensure precision and accessibility.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for modular content containers that maintain hierarchy, structural integrity, and action alignment across variable content and responsive viewports.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for horizontal discovery components, managing navigation affordances, scroll behavior, and accessibility to ensure effective content density without compromising usability.

coastdigitalgroup/coastai-skills

Design a systematic, highly accessible, and developer-friendly UI layout framework for code blocks, snippet showcases, multi-file code tabs, line-highlighting, diff views, and syntax token contrast in technical documentation and developer platforms.

coastdigitalgroup/coastai-skills

Design a systematic framework for global command menus (Cmd+K panels) that combines keyboard-driven navigation, command execution, and shortcut discovery into an accessible, responsive overlay.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for threaded conversations, managing nesting depths, action hierarchies, and community signaling to foster engagement and readability.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for side-by-side comparison interfaces, managing high attribute density and responsive complexity to support informed decision-making.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for user privacy, managing consent banners, preference centers, and persistent privacy controls to balance legal compliance with user trust.

coastdigitalgroup/coastai-skills

Design and implement a systematic, highly accessible, and responsive visual layout framework for conversational chat widgets, live chat boxes, and chatbot panels that ensures clear message scannability, native focus flow, and seamless mobile keyboard adaptation.

coastdigitalgroup/coastai-skills

Design a systematic, accessible, and high-conversion framework for custom select dropdowns and comboboxes, defining anatomy, states, search-filtering, and responsive mobile-adaptive patterns.

coastdigitalgroup/coastai-skills

Design and implement a systematic color palette that ensures WCAG 2.2 accessibility compliance. Trigger this skill when asked to define brand colors, create UI themes, or establish a visual system for a website.

Skills associés