Créa-blog

#100JoursPourCoder
Projet Créa-code

Ressources pour développeur web

Théme de la semaine : Les REGEX

Flexbox CSS : Mise en page moderne avec Flexbox

Temps de lecture estimé : 11 minutes
Accueil CSS3 Flexbox CSS : Mise en page moderne avec Flexbox

Pendant longtemps, mettre en page un site web relevait presque de l’acrobatie. On empilait des float, on bricolait des margin dans tous les sens, et le moindre alignement vertical devenait une épreuve de patience. Si vous avez déjà essayé de centrer un élément sans Flexbox CSS, vous savez exactement de quoi je parle.

  • Comprendre comment organiser et aligner des éléments sans calculs complexes ni bricolage, pour créer des mises en page propres, modernes et fiables dès vos premiers projets CSS
  • Gagner en autonomie pour construire des interfaces adaptables qui s’ajustent naturellement aux écrans, aux contenus et aux usages réels du web actuel
  • Développer de bons réflexes de développeur en choisissant quand et comment utiliser Flexbox efficacement, afin d’écrire un CSS plus lisible, plus logique et plus durable

Flexbox CSS a changé cette façon de penser. Ce n’est pas juste une nouvelle propriété à apprendre, mais une nouvelle logique de mise en page. Une logique plus naturelle, plus souple et surtout pensée pour le web moderne, celui qui s’adapte aux écrans, aux contenus et aux usages.

Dans ce chapitre, vous allez découvrir Flexbox pas à pas, en partant de zéro, sans prérequis compliqué. L’objectif est simple : à la fin, vous saurez organiser vos éléments proprement, les aligner sans douleur et comprendre pourquoi Flexbox est devenu incontournable en CSS.

Pourquoi Flexbox a révolutionné la mise en page CSS

Avant Flexbox CSS, le navigateur n’était pas vraiment doué pour organiser des éléments entre eux. Il empilait les blocs verticalement et plaçait les éléments en ligne les uns à côté des autres, sans trop se poser de questions. Dès que l’on voulait sortir de ce schéma basique, tout se compliquait.

Flexbox est né d’un constat simple : sur une page web, on travaille souvent avec des groupes d’éléments. Un menu, une galerie d’images, des cartes produits, une barre d’outils. Tous ces éléments ont besoin d’être alignés, espacés, parfois inversés ou réorganisés selon la taille de l’écran.

Flexbox CSS apporte une réponse élégante à ce problème. Il permet de dire au navigateur comment répartir l’espace disponible entre plusieurs éléments, comment les aligner et comment ils doivent réagir quand la place manque.

La première fois que Flexbox est apparu dans les navigateurs, beaucoup de développeurs ne l’ont pas pris au sérieux. « Encore une nouveauté CSS », disaient-ils. Quelques mois plus tard, tout le monde l’utilisait pour centrer un élément verticalement en une seule ligne. Comme quoi, parfois, une petite révolution commence par un détail.

Comprendre la logique fondamentale de Flexbox

Avant d’écrire la moindre ligne de code, il faut comprendre une chose essentielle. Flexbox fonctionne toujours avec deux types d’éléments : un conteneur et des éléments enfants.

Le conteneur Flexbox est l’élément parent. C’est lui qui décide des règles du jeu. Les éléments enfants, appelés éléments flexibles, se contentent de suivre ces règles.

Pour activer Flexbox, tout commence par une propriété très simple.

.container {
  display: flex;
}

À partir de ce moment, tous les éléments enfants de .container passent sous le contrôle de Flexbox CSS. Le navigateur ne les place plus de manière classique. Il les organise selon un axe principal et un axe secondaire.

Cet aspect est fondamental pour comprendre Flexbox.

Axe principal et axe secondaire : le cœur de Flexbox CSS

Quand vous utilisez Flexbox, vous ne raisonnez plus en « horizontal » ou « vertical » de façon rigide. Vous raisonnez en axe principal et en axe secondaire.

Par défaut, l’axe principal est horizontal. Les éléments sont placés de gauche à droite. L’axe secondaire est vertical, de haut en bas. Mais cette logique peut changer.

Flexbox CSS en schéma

La propriété qui contrôle cela s’appelle flex-direction.

.container {
  display: flex;
  flex-direction: row;
}

Ici, row signifie que les éléments sont alignés sur une ligne, de gauche à droite. C’est le comportement par défaut de Flexbox CSS.

Si vous utilisez column, l’axe principal devient vertical.

.container {
  display: flex;
  flex-direction: column;
}

Les éléments sont alors empilés du haut vers le bas. Ce simple changement a des conséquences importantes sur tout le reste, notamment sur l’alignement et la répartition de l’espace.

Comprendre cette notion d’axe principal est crucial. Beaucoup de débutants se perdent parce qu’ils essaient d’aligner horizontalement alors que leur axe principal est vertical, ou l’inverse.

Aligner les éléments sur l’axe principal

Une fois l’axe principal défini, Flexbox CSS vous permet de décider comment les éléments se répartissent sur cet axe. C’est le rôle de la propriété justify-content.

Prenons un exemple concret. Imaginons une barre de navigation avec trois liens.

<nav class="menu">
  <a href="#">Accueil</a>
  <a href="#">Blog</a>
  <a href="#">Contact</a>
</nav>
.menu {
  display: flex;
  justify-content: space-between;
}

Avec space-between, le premier élément est collé à gauche, le dernier à droite, et les autres se répartissent automatiquement entre les deux. C’est une mise en page très courante pour les menus.

Si vous utilisez center, tous les éléments se regroupent au centre du conteneur. Avec flex-start, ils se placent au début de l’axe principal. Avec flex-end, à la fin.

Ce qui est intéressant avec Flexbox CSS, c’est que vous n’avez pas besoin de calculer les marges. Le navigateur s’en charge pour vous.

Aligner les éléments sur l’axe secondaire

L’axe secondaire est géré par la propriété align-items. Là encore, tout dépend de l’orientation de votre axe principal.

.container {
  display: flex;
  align-items: center;
}

Cette ligne permet, par exemple, de centrer verticalement des éléments dans un conteneur horizontal. Pendant des années, ce simple centrage a fait souffrir des générations de développeurs. Avec Flexbox, il devient presque banal.

Vous pouvez aussi aligner les éléments en haut avec flex-start, en bas avec flex-end ou les étirer sur toute la hauteur avec stretch, qui est le comportement par défaut.

Un premier exemple complet et concret

Voici un exemple simple mais très parlant. Imaginons trois cartes alignées proprement au centre de la page.

<div class="cartes">
  <div class="carte">Carte 1</div>
  <div class="carte">Carte 2</div>
  <div class="carte">Carte 3</div>
</div>
.cartes {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 20px;
}

.carte {
  width: 150px;
  height: 100px;
  background-color: #eaeaea;
  display: flex;
  justify-content: center;
  align-items: center;
}

Chaque carte est centrée à l’intérieur d’elle-même, et l’ensemble des cartes est centré dans le conteneur. Sans Flexbox CSS, ce résultat aurait demandé bien plus de lignes et de calculs.


À ce stade, vous avez découvert les bases essentielles de Flexbox : le conteneur, les axes, l’orientation et les alignements fondamentaux. Vous commencez déjà à voir à quel point cette approche simplifie la mise en page moderne.

Nous allons voir comment gérer le retour à la ligne, comment contrôler la taille des éléments flexibles et comment créer des mises en page adaptatives sans media queries complexes.

Gérer l’espace et la flexibilité des éléments avec Flexbox CSS

Jusqu’ici, vous avez appris à aligner des éléments et à les positionner proprement. C’est déjà énorme. Mais Flexbox CSS ne s’arrête pas là. Son vrai point fort, c’est sa capacité à s’adapter intelligemment à l’espace disponible. Et c’est précisément ce que nous allons explorer maintenant.

Dans la vraie vie du web, les contenus ne sont jamais figés. Un texte peut être plus long que prévu, un écran plus petit, une fenêtre redimensionnée. Flexbox a été pensé pour absorber ces variations sans casser la mise en page.

Le retour à la ligne avec flex-wrap

Par défaut, Flexbox essaie de tout faire tenir sur une seule ligne. Même si cela implique de réduire les éléments ou de les faire dépasser. Ce comportement peut être problématique, notamment pour des grilles de cartes ou des galeries.

C’est là qu’intervient la propriété flex-wrap.

.container {
  display: flex;
  flex-wrap: wrap;
}

Avec wrap, vous autorisez les éléments à passer à la ligne suivante lorsqu’il n’y a plus assez de place. Le navigateur gère automatiquement le retour à la ligne, sans calculs compliqués.

Prenons un exemple très concret : une liste de cartes produits.

<div class="produits">
  <div class="produit">Produit 1</div>
  <div class="produit">Produit 2</div>
  <div class="produit">Produit 3</div>
  <div class="produit">Produit 4</div>
</div>
.produits {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
}

.produit {
  width: 200px;
  height: 120px;
  background-color: #f2f2f2;
}

Sur un grand écran, les cartes s’alignent sur une seule ligne. Sur un écran plus étroit, elles se répartissent automatiquement sur plusieurs lignes. Flexbox CSS fait le travail sans que vous ayez à intervenir.

Comprendre la notion de flexibilité

Flexbox ne s’appelle pas ainsi par hasard. Chaque élément peut être flexible, c’est-à-dire capable de grandir, de rétrécir ou de rester fixe selon les règles que vous lui donnez.

Trois propriétés sont au cœur de ce mécanisme : flex-growflex-shrink et flex-basis.

flex-grow : apprendre à partager l’espace disponible

flex-grow indique à un élément s’il a le droit de grandir lorsque de l’espace est disponible.

.element {
  flex-grow: 1;
}

Si plusieurs éléments ont un flex-grow, ils se partagent l’espace restant proportionnellement à leur valeur.

Exemple simple.

.box1 {
  flex-grow: 1;
}

.box2 {
  flex-grow: 2;
}

Ici, .box2 prendra deux fois plus d’espace que .box1. C’est très pratique pour créer des mises en page asymétriques, comme une colonne principale plus large qu’une sidebar.

flex-shrink : contrôler la réduction des éléments

À l’inverse, flex-shrink détermine si un élément a le droit de rétrécir lorsque l’espace manque.

.element {
  flex-shrink: 1;
}

Avec une valeur à 0, l’élément refusera de se réduire, même si cela provoque un débordement. Cela peut être utile pour des boutons ou des éléments qui doivent absolument rester lisibles.

flex-basis : définir la taille de départ

flex-basis correspond à la taille initiale de l’élément avant la répartition de l’espace.

.element {
  flex-basis: 200px;
}

Vous pouvez le voir comme un point de départ. Flexbox CSS commence par cette taille, puis ajuste en fonction du flex-grow et du flex-shrink.

La propriété raccourcie flex

Pour simplifier l’écriture, Flexbox propose une propriété raccourcie très utilisée.

.element {
  flex: 1;
}

Cette écriture signifie généralement que l’élément peut grandir, rétrécir et partir d’une base automatique. C’est une syntaxe que vous croiserez très souvent dans des projets réels.

Gérer l’alignement sur plusieurs lignes

Quand vous utilisez flex-wrap, une nouvelle problématique apparaît : comment aligner les lignes entre elles. C’est le rôle de align-content.

.container {
  display: flex;
  flex-wrap: wrap;
  align-content: space-between;
}

Cette propriété fonctionne uniquement lorsque plusieurs lignes sont présentes. Elle permet de répartir les lignes sur l’axe secondaire, un peu comme justify-content le fait sur l’axe principal.

C’est particulièrement utile pour des grilles verticales ou des blocs occupant toute la hauteur de l’écran.

Formation web et informatique - Alban Guillier - Formateur

Des formations informatique pour tous !

Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…

Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.

Découvrez mes formations Qui suis-je ?

Un exemple réel : une mise en page type blog

Imaginons une page classique avec un contenu principal et une colonne latérale.

<div class="page">
  <main class="contenu">Contenu principal</main>
  <aside class="sidebar">Sidebar</aside>
</div>
.page {
  display: flex;
}

.contenu {
  flex: 3;
}

.sidebar {
  flex: 1;
}

Sans calculer la moindre largeur en pourcentage, vous obtenez une mise en page fluide. Le contenu prend naturellement plus de place que la sidebar, et l’ensemble s’adapte à la largeur de l’écran.

Pourquoi Flexbox CSS est idéal pour le responsive

Flexbox CSS excelle dans les mises en page adaptatives. Grâce à sa flexibilité, beaucoup de problèmes de responsive sont résolus sans media queries complexes.

Un simple changement de direction peut transformer une mise en page desktop en mise en page mobile.

.page {
  display: flex;
  flex-direction: column;
}

En une ligne, vous empilez les éléments verticalement. C’est une approche très utilisée pour les versions mobiles.


Vous commencez maintenant à exploiter la vraie puissance de Flexbox. Vous ne vous contentez plus d’aligner des éléments, vous leur donnez un comportement intelligent face à l’espace.

Maintenant, nous allons découvrir comment cibler un élément individuellement, comment modifier son ordre d’affichage et comment résoudre des cas concrets du quotidien comme les cartes de blog, les boutons alignés ou les layouts complexes.

Contrôler individuellement les éléments avec Flexbox CSS

Jusqu’à présent, vous avez surtout donné des règles globales au conteneur Flexbox. C’est déjà très puissant, mais Flexbox CSS permet aussi de prendre le contrôle élément par élément. Et c’est souvent là que tout devient vraiment confortable.

Dans une vraie interface, tous les éléments ne se comportent pas de la même façon. Certains doivent être plus larges, d’autres alignés différemment, d’autres encore déplacés sans toucher au HTML. Flexbox a prévu tout cela.

Modifier l’ordre d’affichage avec order

En HTML, les éléments s’affichent dans l’ordre où ils sont écrits. Avec Flexbox CSS, cet ordre n’est plus figé. La propriété order permet de modifier l’ordre visuel des éléments sans changer le code HTML.

.element {
  order: 1;
}

Par défaut, tous les éléments ont un order à 0. Plus la valeur est élevée, plus l’élément est placé loin dans l’axe principal.

Prenons un exemple simple.

<div class="ligne">
  <div class="box a">A</div>
  <div class="box b">B</div>
  <div class="box c">C</div>
</div>
.ligne {
  display: flex;
}

.c {
  order: -1;
}

Visuellement, l’élément C apparaîtra avant A et B. Cela peut sembler anodin, mais c’est extrêmement pratique pour le responsive. Vous pouvez afficher un élément en haut sur mobile, et ailleurs sur desktop, sans dupliquer le contenu.

Aligner un élément différemment avec align-self

Parfois, un seul élément doit être aligné différemment des autres. Par exemple, un bouton qui doit être centré alors que les autres sont alignés en haut.

C’est le rôle de align-self.

.element {
  align-self: center;
}

Cette propriété écrase la règle définie par align-items pour un élément précis.

Exemple concret.

<div class="barre">
  <span>Texte</span>
  <button>Bouton</button>
</div>
.barre {
  display: flex;
  align-items: flex-start;
}

.barre button {
  align-self: center;
}

Le texte reste en haut, tandis que le bouton est centré verticalement. Sans Flexbox CSS, ce genre de détail demande souvent des ajustements laborieux.

Créer des cartes propres et équilibrées

Les cartes sont omniprésentes sur le web moderne. Articles de blog, fiches produits, profils utilisateurs. Flexbox est parfaitement adapté à ce type de mise en page.

Voici une carte simple avec un titre, un texte et un bouton toujours collé en bas.

<div class="carte">
  <h3>Titre</h3>
  <p>Un peu de contenu qui peut être plus ou moins long.</p>
  <button>Lire la suite</button>
</div>
.carte {
  display: flex;
  flex-direction: column;
  height: 250px;
}

.carte button {
  margin-top: auto;
}

Le margin-top: auto pousse le bouton vers le bas de la carte. C’est une astuce très utilisée avec Flexbox CSS, simple mais redoutablement efficace.

Centrer absolument tout, facilement

Il est impossible de parler de Flexbox sans évoquer le centrage parfait. Horizontal et vertical. Celui qui faisait autrefois transpirer.

Voici la solution la plus propre.

.centre {
  display: flex;
  justify-content: center;
  align-items: center;
}

Que ce soit un texte, une image ou un loader, tout est centré, peu importe sa taille. Quand on y a goûté une fois, on ne revient jamais en arrière.

Flexbox CSS et les erreurs courantes des débutants

À ce stade, il est important de lever quelques pièges classiques.

Beaucoup de débutants appliquent des propriétés Flexbox à un élément qui n’est pas un conteneur Flexbox. justify-contentou align-items ne fonctionnent que si display: flex est défini.

Autre erreur fréquente : confondre l’axe principal et l’axe secondaire. Quand un alignement ne fonctionne pas comme prévu, il faut toujours se demander dans quel sens est orienté l’axe principal.

Enfin, il arrive souvent que l’on oublie que Flexbox agit uniquement sur les enfants directs. Les petits-enfants ne sont pas concernés, sauf s’ils deviennent eux-mêmes des conteneurs Flexbox.

Flexbox ou Grid : faut-il choisir ?

Une question revient souvent. Faut-il utiliser Flexbox CSS ou Grid ? La réponse est plus simple qu’elle n’en a l’air.

Flexbox est parfait pour aligner des éléments sur un axe, gérer des lignes, des colonnes, des menus, des cartes, des composants. Grid est plus adapté aux mises en page globales en deux dimensions.

Dans la pratique, les deux se complètent très bien. Sur le Créa-Blog, par exemple, il est très courant d’utiliser Grid pour la structure générale et Flexbox pour l’intérieur des blocs.

Pour aller plus loin : Mise en page Flexbox ou Grid


Vous avez maintenant une vision complète et concrète de Flexbox CSS. Vous savez créer des mises en page modernes, souples, lisibles et adaptées aux écrans actuels. Vous avez aussi les clés pour comprendre pourquoi Flexbox est devenu un standard incontournable du CSS moderne.

Il reste une dernière étape importante : prendre du recul et voir comment intégrer Flexbox dans vos habitudes de développement sans en faire trop.

Bonnes pratiques autour de Flexbox CSS

Arrivé à ce stade, vous avez toutes les bases solides pour utiliser Flexbox CSS sereinement. Vous savez aligner, répartir, adapter et organiser vos éléments sans bricolage ni calculs complexes. Mais comme tout outil puissant, Flexbox gagne à être utilisé avec méthode et bon sens.

Avant de conclure, prenons un instant pour voir comment intégrer Flexbox intelligemment dans votre façon de coder, surtout quand on débute.

Penser Flexbox comme un outil, pas comme une solution magique

L’erreur la plus fréquente lorsqu’on découvre Flexbox CSS, c’est de vouloir l’utiliser partout, tout le temps. Parce que ça fonctionne bien, parce que c’est confortable, parce que ça règle beaucoup de problèmes.

Pourtant, Flexbox n’est pas une baguette magique. Il est excellent pour organiser des éléments entre eux, mais il n’a pas vocation à remplacer toutes les méthodes de mise en page. Un simple texte n’a pas besoin de Flexbox. Un élément isolé non plus.

La bonne approche consiste à se poser une question simple avant de l’utiliser : est-ce que j’ai plusieurs éléments à organiser ensemble ? Si la réponse est oui, Flexbox est probablement un bon choix.

Commencer simple et ajouter de la complexité progressivement

Quand on débute avec Flexbox CSS, il est tentant d’écrire beaucoup de propriétés dès le départ. Pourtant, la meilleure manière d’apprendre reste de faire simple.

Commencez par display: flex, observez ce qui se passe, puis ajoutez une propriété à la fois. Modifiez flex-direction, testez justify-content, jouez avec align-items. Le navigateur devient alors un véritable terrain d’expérimentation.

Cette approche progressive permet de comprendre réellement ce que fait chaque propriété, au lieu de copier des recettes sans les maîtriser.

Utiliser Flexbox pour résoudre des problèmes concrets

Flexbox prend tout son sens quand il répond à un besoin réel. Un menu mal aligné, des cartes de blog déséquilibrées, un bouton impossible à centrer. Ce sont ces petites frustrations du quotidien qui font de Flexbox CSS un allié précieux.

Sur un site comme le Créa-Blog, Flexbox est particulièrement adapté pour les listes d’articles, les blocs de navigation, les cartes de chapitres ou encore les zones d’appel à l’action. Il permet d’obtenir un rendu propre et cohérent sans multiplier les exceptions CSS.

Lire son code comme une mise en page, pas comme une formule

Un bon code Flexbox se lit presque comme une description visuelle. Quand vous voyez justify-content: space-between, vous comprenez immédiatement l’intention. Quand vous lisez align-items: center, vous visualisez le résultat.

Si votre code devient difficile à comprendre, c’est souvent le signe qu’il est trop complexe ou mal structuré. Flexbox CSS favorise la lisibilité, à condition de ne pas en abuser.

Laisser le navigateur travailler pour vous

Un des grands avantages de Flexbox, c’est qu’il délègue beaucoup de décisions au navigateur. Répartition de l’espace, adaptation à la taille de l’écran, ajustement automatique des éléments.

Faire confiance à Flexbox, c’est accepter de ne pas tout contrôler au pixel près. Et paradoxalement, c’est souvent ce qui rend une interface plus robuste et plus agréable à utiliser.


Apprendre Flexbox CSS, ce n’est pas seulement apprendre de nouvelles propriétés. C’est changer sa manière de penser la mise en page. On ne place plus des éléments de force, on leur donne des règles et on les laisse s’organiser.

Au fil de vos projets, vous verrez que Flexbox devient presque instinctif. Vous ne chercherez plus comment aligner un élément, vous saurez directement quelle propriété utiliser. Et surtout, vous gagnerez un temps précieux, tout en produisant des interfaces plus propres et plus adaptables.

La mise en page moderne avec Flexbox n’est qu’une étape dans l’apprentissage du CSS, mais c’est une étape déterminante. Elle ouvre la porte à des interfaces plus fluides, plus cohérentes et plus agréables à concevoir. Prenez le temps de pratiquer, d’expérimenter, de vous tromper aussi. C’est exactement comme cela que Flexbox CSS deviendra un outil naturel dans votre quotidien de développeur web.

Chapitre suivant : Mise en page avec Grid CSS