All guides
IntermediateSelf-pacedFree GuideSection 11/95

CSS — Flexbox et responsive design

Practise development foundations: programming, web, APIs, data and AI tools. Work through sections and exercises to build your first projects.

The full lessons for this course are currently available in French. Use the section menu to navigate the French course.

💡

Free content, available without an account. Tools and models change: use the current model guide to check their versions. Models and sources

Section 11.1.11 : CSS — Flexbox et responsive design

🎯 Objectif pédagogique

Maîtriser Flexbox pour créer des layouts flexibles et le responsive design pour adapter votre site à tous les écrans. Vous serez capable de construire des mises en page modernes qui fonctionnent du mobile au desktop.


Le problème que Flexbox résout

Marc a essayé de mettre 3 cartes côte à côte. Il a essayé float: left (un vestige des années 2000), puis display: inline-block (presque, mais des espaces parasites). Puis il a découvert Flexbox — et tout est devenu simple.

Flexbox (Flexible Box Layout) est le système de mise en page CSS standard depuis 2020. Il gère la disposition des éléments dans une direction (horizontale ou verticale).

Flexbox : les bases

.container \{
  display: flex;           /* Active Flexbox */
  flex-direction: row;     /* Éléments en ligne (défaut) */
  /* flex-direction: column; → Éléments empilés */
  
  justify-content: center; /* Alignement horizontal */
  /* flex-start | center | flex-end | space-between | space-around | space-evenly */
  
  align-items: center;     /* Alignement vertical */
  /* flex-start | center | flex-end | stretch | baseline */
  
  gap: 1rem;               /* Espace entre les éléments */
  flex-wrap: wrap;          /* Retour à la ligne si nécessaire */
\}
Loading diagram…

Exemples pratiques

nav \{
  display: flex;
  justify-content: space-between;  /* Logo à gauche, liens à droite */
  align-items: center;
  padding: 1rem 2rem;
\}

.nav-links \{
  display: flex;
  gap: 2rem;
\}

Grille de cartes

.cards-grid \{
  display: flex;
  flex-wrap: wrap;             /* Retour à la ligne */
  gap: 1.5rem;
  justify-content: center;
\}

.card \{
  flex: 1 1 300px;             /* Grandit, rétrécit, min 300px */
  max-width: 400px;
  padding: 2rem;
  background: white;
  border-radius: 12px;
  border: 1px solid #E2DFD8;
\}

Centrage parfait (le classique)

.hero \{
  display: flex;
  justify-content: center;    /* Centre horizontalement */
  align-items: center;        /* Centre verticalement */
  min-height: 100vh;          /* Plein écran */
\}

La règle de Marc pour Flexbox

"Si je veux aligner des choses en ligne → flex-direction: row. En colonne → column. Pour l'espace → gap. Pour la répartition → justify-content. C'est 4 propriétés pour 90% des layouts."

Responsive Design

Un site responsive s'adapte à toutes les tailles d'écran :

DeviceLargeur typiqueApproche
Mobilemoins de 480pxUne colonne, texte plus grand
Tablette481-768pxDeux colonnes, margins réduits
Desktop769-1200pxLayout complet
Large> 1200pxMax-width, marges auto

Media Queries

/* Desktop first (par défaut) */
.cards-grid \{
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
\}

.card \{
  flex: 1 1 300px;
\}

/* Tablette */
@media (max-width: 768px) \{
  .card \{
    flex: 1 1 100%;            /* Pleine largeur */
  \}
  
  nav \{
    flex-direction: column;    /* Menu empilé */
    gap: 0.5rem;
  \}
\}

/* Mobile */
@media (max-width: 480px) \{
  body \{
    font-size: 14px;
  \}
  
  h1 \{
    font-size: 1.8rem;
  \}
  
  section \{
    padding: 0 0.5rem;
  \}
\}

La meta viewport

Sans cette balise, votre page sera zoomée sur mobile :

<meta name="viewport" content="width=device-width, initial-scale=1.0">

CSS Grid — Quand Flexbox ne suffit pas

Pour les layouts 2D (lignes ET colonnes), CSS Grid est plus puissant :

.dashboard \{
  display: grid;
  grid-template-columns: 250px 1fr 300px;  /* Sidebar | Main | Panel */
  grid-template-rows: 60px 1fr 50px;       /* Header | Content | Footer */
  gap: 1rem;
  min-height: 100vh;
\}

/* Grid responsive simple */
.gallery \{
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 1rem;
\}
Quand utiliserFlexboxGrid
Navigation✅
Liste de cartes✅✅
Layout de page entière✅
Centrage✅
Dashboard complexe✅

🏋️ Exercice pratique (25 minutes)

Transformez votre portfolio en responsive :

  1. →Ajoutez une section "Projets" avec 3 cartes Flexbox
  2. →Centrez le hero section verticalement avec Flexbox
  3. →Ajoutez des media queries pour mobile
  4. →Testez en redimensionnant la fenêtre du navigateur
  5. →Utilisez les DevTools → Toggle Device Toolbar (Ctrl+Shift+M) pour simuler un iPhone
/* Ajoutez à votre style.css */
.projects \{
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
  justify-content: center;
\}

.project-card \{
  flex: 1 1 280px;
  max-width: 350px;
  background: white;
  border: 1px solid #E2DFD8;
  border-radius: 12px;
  padding: 1.5rem;
\}

.project-card h3 \{ margin-bottom: 0.5rem; \}
.project-card p \{ color: #666; font-size: 0.9rem; \}

@media (max-width: 768px) \{
  .project-card \{ flex: 1 1 100%; max-width: none; \}
  nav \{ flex-direction: column; text-align: center; \}
\}
Quick Check

Quelle propriété CSS répartit les éléments flex avec un espace égal entre eux ?

Quick Check

Comment faire passer 3 colonnes en une seule colonne sur mobile ?

Quick Check

Quelle est la différence principale entre Flexbox et CSS Grid ?

Your progress

Progress is self-reported and stored in your browser. The final completion record is not a qualification or an independent assessment.

View progress and completion record

Learn AI, from prompts to agents

15 free guidesQuizzes, diagrams and workshopsNo account needed

One practical AI workflow in your inbox

Methods, resources and new exercises. Free, unsubscribe at any time.