CSSIntermédiaire12 min de lecture

Maîtriser CSS Grid et Flexbox en 2025

Techniques modernes de layout CSS pour créer des interfaces responsive et élégantes.

NG

Next Gen Dev

11 septembre 2025

Retour au blogMe contacter
  • CSS
  • Grid
  • Flexbox
  • Responsive

A retenir

Techniques modernes de layout CSS pour créer des interfaces responsive et élégantes.

Flexbox vs CSS Grid : Quand utiliser quoi ?

Flexbox : Pour les layouts 1D

  • Navigation horizontale/verticale
  • Centrage d'éléments
  • Distribution d'espace entre éléments
  • Alignement d'éléments dans un container

CSS Grid : Pour les layouts 2D

  • Grilles complexes
  • Layouts de page entière
  • Positionnement précis dans un tableau
  • Superposition d'éléments

Flexbox en pratique

Centrage parfait

.center {
  display: flex;
  justify-content: center;  /* Horizontalement */
  align-items: center;      /* Verticalement */
  min-height: 100vh;
}

/* Centrage avec auto margins */
.center-alternative {
  display: flex;
}

.center-alternative > * {
  margin: auto;
}
.navbar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1rem;
  gap: 1rem;
}

.nav-links {
  display: flex;
  gap: 1rem;
  list-style: none;
  margin: 0;
  padding: 0;
}

@media (max-width: 768px) {
  .navbar {
    flex-direction: column;
    gap: 0.5rem;
  }
  
  .nav-links {
    flex-wrap: wrap;
    justify-content: center;
  }
}

Cards responsive

.card-container {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  padding: 1rem;
}

.card {
  flex: 1 1 300px; /* grow shrink basis */
  min-width: 0; /* Permet le shrinking */
  padding: 1rem;
  border: 1px solid #ddd;
  border-radius: 8px;
}

/* Alternative avec flex-basis pour contrôler la taille */
.card-fixed {
  flex: 0 0 calc(33.333% - 1rem);
}

@media (max-width: 768px) {
  .card-fixed {
    flex: 0 0 calc(50% - 1rem);
  }
}

@media (max-width: 480px) {
  .card-fixed {
    flex: 0 0 100%;
  }
}

CSS Grid avancé

Layout de magazine

.magazine-layout {
  display: grid;
  grid-template-columns: 200px 1fr 200px;
  grid-template-rows: auto 1fr auto;
  grid-template-areas:
    "header  header  header"
    "sidebar main    aside"
    "footer  footer  footer";
  gap: 1rem;
  min-height: 100vh;
  max-width: 1200px;
  margin: 0 auto;
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.aside { grid-area: aside; }
.footer { grid-area: footer; }

/* Version responsive */
@media (max-width: 768px) {
  .magazine-layout {
    grid-template-columns: 1fr;
    grid-template-areas:
      "header"
      "main"
      "sidebar"
      "aside"
      "footer";
  }
}

Grille responsive automatique

.auto-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 1rem;
  padding: 1rem;
}

/* Avec auto-fill pour garder les colonnes même vides */
.auto-grid-fill {
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
}

/* Grille responsive avec CSS custom properties */
.dynamic-grid {
  --min-column-width: 300px;
  display: grid;
  grid-template-columns: repeat(
    auto-fit, 
    minmax(var(--min-column-width), 1fr)
  );
  gap: 1rem;
}

@media (max-width: 768px) {
  .dynamic-grid {
    --min-column-width: 250px;
  }
}

Grid avec placement explicite

.complex-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  grid-template-rows: repeat(4, 100px);
  gap: 10px;
}

.item-1 {
  grid-column: 1 / 3;  /* Colonnes 1 et 2 */
  grid-row: 1 / 3;     /* Lignes 1 et 2 */
}

.item-2 {
  grid-column: 3 / -1; /* Colonne 3 jusqu'à la fin */
  grid-row: 1;
}

.item-3 {
  grid-column: 3 / 5;
  grid-row: 2 / 4;
}

/* Alternative avec grid-area */
.item-4 {
  grid-area: 3 / 1 / 5 / 3; /* row-start / col-start / row-end / col-end */
}

Techniques modernes CSS 2025

Subgrid (support croissant)

.parent {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem;
}

.child {
  display: grid;
  grid-column: span 2;
  grid-template-columns: subgrid; /* Hérite des colonnes du parent */
  gap: inherit; /* Hérite du gap aussi */
}

.grandchild {
  /* S'aligne automatiquement avec la grille du grand-parent */
}

Container Queries

.card {
  container-type: inline-size;
  padding: 1rem;
  border: 1px solid #ddd;
}

.card-content {
  display: block;
}

/* Le layout change selon la taille du container, pas de la viewport */
@container (min-width: 400px) {
  .card-content {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 1rem;
  }
}

@container (min-width: 600px) {
  .card-content {
    grid-template-columns: 200px 1fr auto;
  }
}

Logical Properties

/* Au lieu de margin-left/right */
.element {
  margin-inline: 1rem;        /* margin-left + margin-right */
  margin-block: 0.5rem;       /* margin-top + margin-bottom */
  padding-inline-start: 1rem; /* padding-left en LTR, padding-right en RTL */
  border-inline-end: 1px solid #ddd; /* border-right en LTR */
}

/* Tailles logiques */
.box {
  inline-size: 300px;         /* width */
  block-size: 200px;          /* height */
  max-inline-size: 100%;      /* max-width */
}

CSS Grid avec aspect-ratio

.image-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 1rem;
}

.image-item {
  aspect-ratio: 16 / 9;
  overflow: hidden;
  border-radius: 8px;
}

.image-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Cards avec ratio fixe */
.card-square {
  aspect-ratio: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

Combinaisons Grid + Flexbox

/* Layout principal en Grid */
.app-layout {
  display: grid;
  grid-template-rows: auto 1fr auto;
  min-height: 100vh;
}

/* Navigation en Flexbox */
.header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1rem;
}

.nav-menu {
  display: flex;
  gap: 1rem;
  list-style: none;
}

/* Contenu principal avec Grid pour les sections */
.main-content {
  display: grid;
  grid-template-columns: 250px 1fr;
  gap: 2rem;
  padding: 2rem;
}

/* Sidebar avec Flexbox pour les éléments */
.sidebar {
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

/* Articles en Grid */
.articles-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 2rem;
}

/* Chaque article en Flexbox */
.article-card {
  display: flex;
  flex-direction: column;
  border: 1px solid #ddd;
  border-radius: 8px;
  overflow: hidden;
}

.article-content {
  flex: 1;
  padding: 1rem;
  display: flex;
  flex-direction: column;
}

.article-title {
  margin: 0 0 0.5rem 0;
}

.article-excerpt {
  flex: 1;
  margin: 0 0 1rem 0;
}

.article-meta {
  margin-top: auto;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 0.875rem;
  color: #666;
}

Bonnes pratiques 2025

1. Mobile-first avec CSS Grid

/* Base mobile */
.responsive-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
}

/* Tablet */
@media (min-width: 768px) {
  .responsive-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* Desktop */
@media (min-width: 1024px) {
  .responsive-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

/* Large desktop */
@media (min-width: 1200px) {
  .responsive-grid {
    grid-template-columns: repeat(4, 1fr);
  }
}

2. CSS Custom Properties pour la flexibilité

:root {
  --grid-columns: 1;
  --grid-gap: 1rem;
  --card-min-width: 250px;
}

.adaptive-grid {
  display: grid;
  grid-template-columns: repeat(var(--grid-columns), 1fr);
  gap: var(--grid-gap);
}

@media (min-width: 768px) {
  :root {
    --grid-columns: 2;
    --grid-gap: 1.5rem;
    --card-min-width: 300px;
  }
}

@media (min-width: 1024px) {
  :root {
    --grid-columns: 3;
    --grid-gap: 2rem;
  }
}

3. Accessibilité et performance

/* Respecter les préférences de mouvement */
@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
}

/* Focus visible pour l'accessibilité */
.card {
  outline: 2px solid transparent;
  transition: outline-color 0.2s;
}

.card:focus-visible {
  outline-color: #4f46e5;
}

/* Optimisation des performances */
.grid-container {
  contain: layout style;
  will-change: auto;
}

Ces techniques modernes vous permettront de créer des layouts robustes, accessibles et performants en 2025 !

Sommaire

Intentions de recherche

Requetes ciblees et recherches associees

Ces formulations aident a couvrir des variantes de recherche proches du sujet principal, y compris des requetes longues traines.

  • comment css grid flexbox 2025 ?
  • css grid flexbox 2025

Mot-cle principal

css grid flexbox 2025

Variantes: CSS, Grid, Flexbox, Responsive

FAQ SEO

Questions frequentes autour du sujet

Que couvre cet article sur css grid flexbox 2025 ?

Cet article synthese des actions concretes, des points de vigilance et des priorites d execution pour passer plus vite de la theorie a la mise en place.

Suite logique

Transformer ce sujet en plan d action

Si tu veux appliquer ce que tu viens de lire a ton site (SEO, conversion, structure de contenu, automatisation), je peux t aider a prioriser les actions utiles.