← 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