← Retour au cours : CSS de Zéro à Héros
⚠️ Mode Visiteur : Vous lisez ce cours gratuitement. Créez un compte pour sauvegarder votre progression et obtenir des badges ! 🏆

Flexbox - Layout Moderne

Maîtriser Flexbox

Flexbox révolutionne le positionnement CSS avec une approche simple et puissante.

Activer Flexbox

.container {
    display: flex;
}

Le conteneur devient un flex container, ses enfants deviennent des flex items.

Direction (flex-direction)

/* Horizontal (défaut) */
.container {
    display: flex;
    flex-direction: row;
}

/* Horizontal inversé */
.container {
    flex-direction: row-reverse;
}

/* Vertical */
.container {
    flex-direction: column;
}

/* Vertical inversé */
.container {
    flex-direction: column-reverse;
}

Alignement horizontal (justify-content)

/* Au début */
.container {
    justify-content: flex-start;
}

/* À la fin */
.container {
    justify-content: flex-end;
}

/* Centré */
.container {
    justify-content: center;
}

/* Espace entre */
.container {
    justify-content: space-between;
}

/* Espace autour */
.container {
    justify-content: space-around;
}

/* Espace égal */
.container {
    justify-content: space-evenly;
}

Alignement vertical (align-items)

/* Au début */
.container {
    align-items: flex-start;
}

/* À la fin */
.container {
    align-items: flex-end;
}

/* Centré */
.container {
    align-items: center;
}

/* Étiré (défaut) */
.container {
    align-items: stretch;
}

/* Ligne de base */
.container {
    align-items: baseline;
}

Centrer parfaitement

.container {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}

Retour à la ligne (flex-wrap)

/* Une seule ligne (défaut) */
.container {
    flex-wrap: nowrap;
}

/* Plusieurs lignes */
.container {
    flex-wrap: wrap;
}

/* Lignes inversées */
.container {
    flex-wrap: wrap-reverse;
}

Espacement (gap)

/* Même espace partout */
.container {
    display: flex;
    gap: 20px;
}

/* Espace différent (ligne, colonne) */
.container {
    gap: 20px 10px;
}

Propriétés des items

flex-grow (croissance)

.item {
    flex-grow: 1; /* Prend l'espace disponible */
}

.item:nth-child(2) {
    flex-grow: 2; /* Prend 2× plus d'espace */
}

flex-shrink (rétrécissement)

.item {
    flex-shrink: 1; /* Peut rétrécir (défaut) */
    flex-shrink: 0; /* Ne rétrécit jamais */
}

flex-basis (taille de base)

.item {
    flex-basis: 200px;
    flex-basis: 33.33%;
    flex-basis: auto;
}

Notation courte (flex)

.item {
    flex: 1; /* flex-grow: 1, flex-shrink: 1, flex-basis: 0 */
    flex: 0 0 200px; /* Fixe à 200px */
}

Alignement individuel

.item {
    align-self: flex-start;
    align-self: center;
    align-self: flex-end;
}

Ordre

.item:nth-child(1) {
    order: 3;
}

.item:nth-child(2) {
    order: 1; /* S'affiche en premier */
}

.item:nth-child(3) {
    order: 2;
}

Exemples pratiques

Navigation

.navbar {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 20px;
}

.nav-links {
    display: flex;
    gap: 20px;
}

Grille de cartes

.cards {
    display: flex;
    flex-wrap: wrap;
    gap: 20px;
}

.card {
    flex: 0 0 calc(33.33% - 20px);
}

/* Responsive */
@media (max-width: 768px) {
    .card {
        flex: 0 0 calc(50% - 20px);
    }
}

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

Disposition sidebar

.layout {
    display: flex;
    min-height: 100vh;
}

.sidebar {
    flex: 0 0 250px;
    background: #f5f5f5;
}

.main-content {
    flex: 1;
    padding: 20px;
}

Footer sticky

body {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

header {
    flex: 0 0 auto;
}

main {
    flex: 1;
}

footer {
    flex: 0 0 auto;
}

Points clés

  • display: flex active Flexbox
  • justify-content aligne horizontalement
  • align-items aligne verticalement
  • flex-wrap permet le retour à la ligne
  • gap crée de l'espace entre les items
  • flex: 1 fait grandir l'item

📝 Exercices (1)

Exercice 1 : Flexbox

Propriété pour activer Flexbox ?

📝 Vous avez terminé cette leçon ?

Créez un compte gratuit pour sauvegarder votre progression !

Créer un compte gratuit