Intégration web

Flexbox CSS : layouts flexibles et responsive

Flexbox Layout Css Responsive Css3 Flex-Direction Justify-Content Align-Items Flex-Wrap Gap Front-End Css-Moderne Integration-Web Design-Web
Flexbox CSS : layouts flexibles et responsive

Maîtrisez Flexbox pour des layouts modernes : flex-direction, justify-content, align-items, flex-wrap, gap et patterns réutilisables pour vos projets web.

Introduction

Flexbox (Flexible Box Layout) est un système de layout CSS moderne qui permet de créer des mises en page flexibles et responsives sans utiliser des floats ou des grilles complexes. C'est un outil indispensable pour tout développeur web.

Avantage clé : Flexbox résout les problèmes de centrage, d'espacement et de responsivité en quelques lignes de CSS. C'est plus simple et plus puissant que les anciennes méthodes.

Flexbox fonctionne en deux niveaux : le conteneur (parent) et les éléments (enfants). Seul le conteneur reçoit display: flex.

Display: flex — Activer Flexbox

Pour utiliser Flexbox, appliquez display: flex au conteneur parent :

.container {
    display: flex;
}

C'est tout ce qu'il faut pour transformer vos éléments enfants en éléments flexibles. Par défaut :

  • Les enfants s'alignent en ligne (horizontalement)
  • Ils prennent la hauteur du conteneur
  • Ils conservent leur largeur naturelle
Exemple visuel : 3 boxes s'alignent horizontalement immédiatement après l'ajout de display: flex.
<div class="container">
    <div class="box">Box 1</div>
    <div class="box">Box 2</div>
    <div class="box">Box 3</div>
</div>

<style>
.container {
    display: flex;
    gap: 10px;
}
.box {
    flex: 1;
    padding: 20px;
    background: #3498db;
    color: white;
}
</style>

Flex-direction — Direction du layout

Contrôle comment les enfants s'alignent. Par défaut c'est row (horizontal) :

Valeur Comportement Cas d'usage
row Éléments côte à côte (gauche → droite) Menus, barres de navigation
row-reverse Éléments côte à côte (droite → gauche) Layouts RTL (droite à gauche)
column Éléments empilés verticalement Navs verticales, listes
column-reverse Éléments empilés (bas → haut) Chats, logs inversés
.container-row {
    display: flex;
    flex-direction: row;
}

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

Justify-content — Alignement horizontal

Contrôle l'alignement des enfants le long de l'axe principal (horizontal par défaut) :

flex-start — Aligné au début (défaut)

.container {
    display: flex;
    justify-content: flex-start;
}
/* Tous les éléments sont à gauche */

flex-end — Aligné à la fin

.container {
    display: flex;
    justify-content: flex-end;
}
/* Tous les éléments sont à droite */

center — Centré

.container {
    display: flex;
    justify-content: center;
}
/* Les éléments sont au centre */

space-between — Espace égal ENTRE les éléments

.container {
    display: flex;
    justify-content: space-between;
}
/* Premier à gauche, dernier à droite, les autres répartis */

space-around — Espace égal AUTOUR des éléments

.container {
    display: flex;
    justify-content: space-around;
}
/* Espace égal avant/après chaque élément */

space-evenly — Espace parfaitement égal partout

.container {
    display: flex;
    justify-content: space-evenly;
}
/* Espace parfaitement égal entre tous les éléments ET les bords */
Cas pratique : Une navbar avec logo à gauche et menu à droite = justify-content: space-between

Align-items — Alignement vertical

Contrôle l'alignement des enfants le long de l'axe transversal (vertical par défaut) :

stretch — Tire les éléments (défaut)

.container {
    display: flex;
    align-items: stretch;
    height: 200px;
}
/* Les enfants prennent la hauteur totale */

flex-start — En haut

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

flex-end — En bas

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

center — Centré verticalement (très utile !)

.container {
    display: flex;
    align-items: center;
    height: 300px;
}
/* Centres tous les enfants verticalement */

baseline — Aligné sur la baseline du texte

.container {
    display: flex;
    align-items: baseline;
}
Astuce dorée : Pour centrer verticalement ET horizontalement: display: flex; justify-content: center; align-items: center;

Flex-wrap — Retour à la ligne

Contrôle si les éléments restent sur une ligne ou passent à la ligne suivante :

nowrap — Pas de retour à la ligne (défaut)

.container {
    display: flex;
    flex-wrap: nowrap;
}
/* Les éléments restent sur une ligne, même s'ils dépassent */

wrap — Retour à la ligne si nécessaire

.container {
    display: flex;
    flex-wrap: wrap;
}
/* Les éléments passent à la ligne suivante s'il n'y a pas de place */

wrap-reverse — Retour à la ligne inverse

.container {
    display: flex;
    flex-wrap: wrap-reverse;
}
/* Les lignes s'ajoutent vers le haut */
Cas pratique : Une galerie responsive = flex-wrap: wrap + flex: 1 1 300px sur les enfants

Exemples pratiques complets

Exemple 1 : Navigation horizontale avec logo et menu

<nav class="navbar">
    <div class="logo">Logo</div>
    <div class="menu">
        <a href="#">Accueil</a>
        <a href="#">Produits</a>
        <a href="#">Contact</a>
    </div>
</nav>

<style>
.navbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 20px;
    background: #333;
    color: white;
}

.menu {
    display: flex;
    gap: 20px;
}

.menu a {
    color: white;
    text-decoration: none;
}
</style>

Exemple 2 : Galerie d'images responsive

<div class="gallery">
    <img src="image1.jpg" alt="">
    <img src="image2.jpg" alt="">
    <img src="image3.jpg" alt="">
    <img src="image4.jpg" alt="">
</div>

<style>
.gallery {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}

.gallery img {
    flex: 1 1 300px; /* min 300px, puis grandit */
    height: 300px;
    object-fit: cover;
}
</style>

Exemple 3 : Centrage parfait

<div class="modal">
    <div class="modal-content">
        <h2>Bienvenue !</h2>
        <p>Modal centré au milieu</p>
    </div>
</div>

<style>
.modal {
    display: flex;
    justify-content: center;
    align-items: center;
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100vh;
    background: rgba(0, 0, 0, 0.5);
}

.modal-content {
    background: white;
    padding: 40px;
    border-radius: 8px;
}
</style>

Conclusion

Flexbox est la solution moderne pour les layouts. Maîtrisez ces propriétés et vous résoudrez 90% de vos problèmes de positionnement.

  • display: flex — Active Flexbox
  • flex-direction — Contrôle la direction
  • justify-content — Alignement horizontal
  • align-items — Alignement vertical
  • flex-wrap — Retour à la ligne
Prochaine étape : Explorez CSS Grid pour des layouts plus complexes, ou combinez Flexbox avec Media Queries pour la responsivité !

Questions fréquentes

Flexbox est idéal pour les layouts unidimensionnels (une ligne ou une colonne) : navigation horizontale, centrage vertical/horizontal d'éléments, alignement de cartes dans une rangée. CSS Grid excelle pour les layouts bidimensionnels (lignes ET colonnes simultanément) : grilles de galeries, layouts page entière avec header/sidebar/main/footer. En pratique, utilisez Flexbox pour les composants (boutons, nav, cards) et Grid pour les layouts de page. Les deux sont complémentaires et souvent combinés.

La méthode universelle : sur le conteneur parent, ajoutez display: flex; justify-content: center; align-items: center;. justify-content gère l'axe principal (horizontal par défaut) et align-items gère l'axe secondaire (vertical). Pour centrer dans toute la page, ajoutez height: 100vh sur le parent. Pour centrer un seul enfant sans affecter les autres, utilisez margin: auto sur l'enfant — Flexbox absorbe automatiquement l'espace disponible.

Utilisez flex-wrap: wrap sur le conteneur pour permettre le retour à la ligne. Sur chaque enfant, définissez flex: 1 1 300px (grow, shrink, basis) — l'élément prend au minimum 300px, et les items passent automatiquement à la ligne suivante quand ils ne rentrent plus. Cette technique "flex-wrap trick" crée un layout fluide adaptatif sans media query. Combinez avec gap: 1rem pour l'espacement. Ajustez la valeur basis (200px, 250px, 300px) selon la taille minimale souhaitée pour vos cartes.

La distinction dépend de l'axe principal défini par flex-direction. Par défaut (flex-direction: row) : justify-content contrôle l'alignement horizontal (flex-start, flex-end, center, space-between, space-around, space-evenly), align-items contrôle l'alignement vertical (stretch, flex-start, flex-end, center, baseline). Avec flex-direction: column, les axes s'inversent : justify-content devient vertical et align-items horizontal. align-content gère plusieurs lignes de flex items (quand flex-wrap: wrap est actif).

Partager