💻 Développement

dev-css-layout-solver

Résout les problèmes de layout CSS avec Flexbox, Grid et techniques modernes.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- dev-css-layout-solver --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } dev-css-layout-solver -Launch"

🚀 Déjà installé ?

claude "/dev-css-layout-solver"

Ou tapez /dev-css-layout-solver dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

CSSlayoutFlexboxGridcentreralignerresponsivemon layout est casséoverflowz-index

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/dev-css-layout-solver ~/.claude/skills/

Payload du plugin : skills/dev-css-layout-solver · source éditable : dev-skills/css-layout-solver

📖 Manuel

CSS Layout Solver

Étape 1 — Diagnostiquer avant de coder

Avant toute solution, collecter :

Questions de triage rapide :

  1. Le problème est-il unidimensionnel (ligne OU colonne) → Flexbox
  2. Le problème est-il bidimensionnel (lignes ET colonnes) → Grid
  3. Le composant doit-il réagir à sa propre taille (pas au viewport) → Container Queries
  4. Y a-t-il un overflow ou un z-index suspect → Diagnostic stacking context

Étape 2 — Critères de choix de technique

BesoinTechniqueÉviter
Centrer un élément (1D)display:flex; align-items:center; justify-content:centermargin:auto seul sans contexte flex/grid
Grille fixe (colonnes répétées)grid-template-columns: repeat(3, 1fr)float + clearfix
Colonnes de taille variablegrid-template-columns: auto 1fr autodisplay:table-cell
Layout responsive sans media querygrid-template-columns: repeat(auto-fit, minmax(240px, 1fr))media queries manuelles
Taille fluide entre deux bornesclamp(1rem, 2.5vw, 2rem)valeurs px fixes
Composant réutilisable responsive@containermedia query sur viewport
Sticky header/footerposition:sticky; top:0position:fixed (sort du flux)

Étape 3 — Snippets copiables par cas fréquent

Centrage universel (Flex)

.wrapper {
  display: flex;
  align-items: center;     /* axe transversal */
  justify-content: center; /* axe principal */
  min-height: 100dvh;      /* dvh : tient compte des barres mobiles */
}

Grille responsive sans media query

.grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
  gap: 1.5rem;
}
/* min(100%, 280px) évite l'overflow sur petits écrans */

Holy Grail layout (header / sidebar / main / footer)

.page {
  display: grid;
  grid-template:
    "header header"  auto
    "nav    main  "  1fr
    "footer footer"  auto
    / 220px 1fr;
  min-height: 100dvh;
}
header  { grid-area: header; }
nav     { grid-area: nav;    }
main    { grid-area: main;   }
footer  { grid-area: footer; }

Sidebar fixe + contenu fluide (Flex)

.layout {
  display: flex;
  gap: 1rem;
}
.sidebar { flex: 0 0 260px; }   /* ne grandit pas, ne rétrécit pas */
.content { flex: 1 1 0;    }    /* prend tout l'espace restant */

Fluid typography

:root {
  --text-base: clamp(1rem, 0.5rem + 1.5vw, 1.25rem);
  --text-xl:   clamp(1.5rem, 1rem + 2.5vw, 2.5rem);
}

Dark mode via custom properties

:root {
  --bg: #ffffff;
  --fg: #111111;
}
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #111111;
    --fg: #f0f0f0;
  }
}
body { background: var(--bg); color: var(--fg); }

Container Query (composant card auto-adaptatif)

.card-wrapper {
  container-type: inline-size;
}
@container (min-width: 400px) {
  .card { flex-direction: row; }
}

Étape 4 — Déboguer les problèmes classiques

Overflow mystérieux

  1. Ajouter temporairement * { outline: 1px solid red; } pour visualiser les boîtes.
  2. Chercher un enfant avec width: 100vw, min-width non contraint, ou texte sans overflow-wrap: break-word.
  3. Sur mobile : html, body { overflow-x: hidden; } masque le symptôme mais ne corrige pas la cause — trouver l'élément coupable.

z-index qui ne fonctionne pas

Margin collapse

Flex enfant qui rétrécit indésirable

.enfant {
  flex-shrink: 0; /* interdit le rétrécissement */
  /* ou : flex: 0 0 auto; */
}

height:100% sans effet

/* Le parent doit avoir une hauteur explicite ou être en grid/flex avec align-stretch */
.parent { height: 400px; /* ou min-height */ }
.enfant { height: 100%; }

Étape 5 — Responsive : media queries bien ciblées

/* Mobile-first : base = petit écran */
.grid { grid-template-columns: 1fr; }

@media (min-width: 640px)  { .grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .grid { grid-template-columns: repeat(3, 1fr); } }

Préférer les breakpoints basés sur le contenu (quand le layout casse) aux breakpoints device (320, 768, 1024 sont des conventions, pas des règles).


Étape 6 — Performance rendering

Propriété à animerCoûtRecommandation
transform, opacityComposite (GPU)Toujours préférer
background-color, color, borderPaintAcceptable ponctuellement
width, height, margin, topLayout (reflow)Éviter en animation
/* Animation performante */
.card:hover {
  transform: translateY(-4px);
  transition: transform 200ms ease-out;
}
/* will-change : seulement si l'animation est fréquente et mesurée */
.animated { will-change: transform; }

Anti-patterns et pièges (2026)

@layer reset, base, components, utilities;
@layer components {
  .btn { padding: 0.5rem 1rem; }
}
@layer utilities {
  .mt-4 { margin-top: 1rem; }
}

Checklist de livraison