CSS Layout

Display, Positionnement & Flexbox

Utilisez les flèches, cliquez ou glissez pour naviguer

Objectifs d'apprentissage

1. Comprendre les modes d'affichage

block, inline, inline-block

2. Maîtriser le positionnement

relative, absolute, fixed, sticky

3. Utiliser Flexbox

Aligner et distribuer les éléments

4. Créer des patterns courants

Header, navigation, cards

Plan de la présentation

Module 1

Les modes d'affichage (display)

Module 2

Le positionnement CSS

Module 3

Flexbox - L'outil principal

Module 4

Patterns courants & Pièges

Module 1

Les modes d'affichage

Comprendre comment les éléments occupent l'espace

LA propriété CSS la plus importante

display

Détermine comment un élément s'affiche et interagit avec ses voisins

Pourquoi ? Sans comprendre display, impossible de maîtriser le layout !

Block vs Inline

Block

  • • Prend toute la largeur
  • • Commence Ă  la nouvelle ligne
  • • width/height fonctionnent
  • • margin/padding tous les cĂ´tĂ©s
Block 1
Block 2

Inline

  • • Preit la largeur du contenu
  • • Reste sur la mĂŞme ligne
  • • width/height ignorĂ©s
  • • margin/padding horizontaux
Inline 1 Inline 2 Inline 3

Inline-block : le meilleur des deux

Combine les avantages de block et inline

âś“ Reste sur la ligne

Comme inline

âś“ width/height

Comme block

âś“ margin/padding

Tous les côtés

Exemple : Boutons cĂ´te Ă  cĂ´te

Comparaison visuelle

display: block

Élément 1
Élément 2
Élément 3

display: inline

Él 1 Él 2 Él 3

inline-block

Él 1 Él 2 Él 3

Éléments par défaut

Quels éléments sont block ou inline par défaut ?

Block par défaut

<div>, <p>, <h1>-<h6>

<ul>, <ol>, <li>

<header>, <footer>, <section>

<article>, <aside>, <nav>

Inline par défaut

<span>, <a>, <strong>

<em>, <img>, <br>

<input>, <button>

<label>, <code>

Module 2

Le positionnement CSS

Sortir du flux normal pour placer les éléments précisément

Les 5 valeurs de position

static

Par défaut

relative

Décalage

absolute

Hors flux

fixed

Viewport

sticky

Hybride

static : le flux normal

Comportement par défaut de tous les éléments

.box {

position: static; /* par défaut */

}

• Les éléments s'affichent dans l'ordre du HTML

• top, left, bottom, right n'ont aucun effet

• L'élément reste dans le flux normal

relative : décalage depuis la position normale

L'élément reste dans le flux mais peut être décalé

.box {

position: relative;

top: 20px;

left: 30px;

}

Décalée

Important : L'espace original est préservé ! Les autres éléments ne bougent pas.

absolute : sort du flux !

⚠️ Concept clé : l'élément est retiré du flux normal

.parent {

position: relative;

}

.child {

position: absolute;

top: 0;

right: 0;

}

Positionné par rapport au premier ancêtre positionné

Parent (position: relative)

Block 1
Block 2
Absolute!

↑ L'élément absolute "flotte" au-dessus

Démo : absolute sort du flux

Sans absolute :

Box 1
Box 2
Box 3

Avec absolute sur Box 2 :

Box 1
Box 2
Box 3
Box 2 (abs)

Box 3 remonte !

Conséquence : Les autres éléments ignorent l'élément absolute et occupent son espace.

fixed : positionné par rapport au viewport

L'élément reste fixe même lors du scroll

.header {

position: fixed;

top: 0;

left: 0;

width: 100%;

}

Cas d'usage

Headers fixes, boutons flottants, modales

Attention

Sort du flux comme absolute

sticky : l'hybride

Se comporte comme relative, puis fixed au scroll

.nav {

position: sticky;

top: 0;

}

1. Normal

Dans le flux

2. Seuil atteint

Devient fixed

3. Parent fini

Retour au flux

⚠️ Piège courant #1

Oubli du position: relative sur le parent

❌ Incorrect

.parent { /* pas de position */ }

.child {

position: absolute;

}

→ Positionné par rapport au body !

âś“ Correct

.parent {

position: relative;

}

.child {

position: absolute;

}

→ Positionné par rapport au parent

Module 3

Flexbox

L'outil principal pour le layout

Résout 90% des problèmes de mise en page

Pourquoi Flexbox ?

Avant Flexbox, centrer était un cauchemar...

❌ Avant (float, display: table...)

  • • Centrage vertical impossible
  • • Colonnes de hauteur Ă©gale difficile
  • • Floats et clearfix everywhere
  • • Code complexe et fragile

âś“ Avec Flexbox

  • • Centrage en 3 lignes
  • • Hauteurs Ă©gales automatiques
  • • Distribution d'espace facile
  • • Code simple et prĂ©visible

Le conteneur flex : display: flex

.container {

display: flex;

}

Item 1
Item 2
Item 3
Item 4

• Les enfants deviennent des flex items

• Ils s'alignent sur une ligne par défaut (row)

• Ils prennent automatiquement la même hauteur

Les deux axes Flexbox

1
2
3
Main Axis →
Cross Axis →

Main Axis

Axe principal (horizontal par défaut)

justify-content

Cross Axis

Axe transversal (vertical par défaut)

align-items

justify-content : aligner sur l'axe principal

flex-start
flex-end
center
space-between
space-around

align-items : aligner sur l'axe transversal

stretch
flex-start
center
flex-end

⚠️ Piège courant #2

Confusion entre justify-content et align-items

justify-content

Axe principal (horizontal par défaut)

↔ Distribution horizontale

align-items

Axe transversal (vertical par défaut)

↕ Alignement vertical

Astuce : Avec flex-direction: column, les axes s'inversent !

flex-direction : changer l'axe principal

flex-direction: row

→ Horizontal (par défaut)

flex-direction: column

→ Vertical

gap : l'espacement entre items

La façon moderne d'espacer les flex items

.container {

display: flex;

gap: 1rem;

}

❌ Avant (margin)

.item { margin-right: 1rem; }

.item:last-child { margin-right: 0; }

âś“ Maintenant (gap)

.container { gap: 1rem; }

Module 4

Patterns courants & Pièges

Appliquer les concepts à des cas réels

Centrer un élément : 2 approches

margin: auto

.box {

width: 200px;

margin: 0 auto;

}

âś“ Centrage horizontal uniquement

✓ Nécessite une largeur fixe

Flexbox

.container {

display: flex;

justify-content: center;

align-items: center;

}

âś“ Centrage horizontal ET vertical

âś“ Pas de largeur fixe requise

⚠️ Piège courant #3

Confusion entre margin: auto et Flexbox pour centrer

❌ Mauvais choix

Utiliser margin: auto pour centrer verticalement

→ Ne fonctionne pas !

âś“ Bon choix

Utiliser Flexbox pour un centrage complet

→ justify-content + align-items

Règle : margin: auto = centrage horizontal simple | Flexbox = centrage complet

Pattern : Header centré

/* HTML */

<header>

<h1>Mon Site</h1>

</header>

/* CSS */

header {

display: flex;

justify-content: center;

align-items: center;

height: 80px;

}

Résultat :

Mon Site

Pattern : Navigation

nav {

display: flex;

justify-content: space-between;

}

nav ul {

display: flex;

gap: 1rem;

}

Résultat :

Pattern : Cards en ligne

.cards {

display: flex;

gap: 1.5rem;

flex-wrap: wrap;

}

Card 1

Description

Card 2

Description

Card 3

Description

flex-wrap: wrap permet aux cards de passer Ă  la ligne suivante

Points clés à retenir

1. display

LA propriété la plus importante pour le layout

2. position: absolute

Sort l'élément du flux normal

3. Flexbox

Résout 90% des problèmes de layout

4. Axes

justify = principal, align = transversal

⚠️ Les 3 pièges à éviter

1. Oubli du position: relative sur le parent

→ absolute se positionne par rapport au body

2. Confusion justify-content vs align-items

→ justify = axe principal, align = axe transversal

3. margin: auto pour centrer verticalement

→ Utiliser Flexbox avec align-items: center

Pratiquez avec Flexbox Froggy !

flexboxfroggy.com

Un jeu pour maîtriser Flexbox de manière ludique

CSS Tricks

A Complete Guide to Flexbox

MDN Web Docs

Documentation officielle

Merci ! Questions ?