Aller au contenu principal

13-1 Découverte de Flexbox

Lors de cette activité, nous allons explorer Flexbox de façon progressive avec des boîtes colorées.

Fichiers de départ​

Utilisez les fichiers de départ suivants pour cette activité.

index.html​

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Découverte Flexbox</title>
<link rel="stylesheet" href="./styles/app.css">
</head>
<body>
<h1>Découverte Flexbox</h1>

<div class="container">
<div class="box box-1">1</div>
<div class="box box-2">2</div>
<div class="box box-3">3</div>
<div class="box box-4">4</div>
<div class="box box-5">5</div>
</div>
</body>
</html>

styles/app.css (styles de base fournis)​

body {
font-family: Arial, sans-serif;
background-color: #f0f0f0;
padding: 40px;
}

h1 {
text-align: center;
color: #333;
margin-bottom: 30px;
}

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
}

.box {
width: 100px;
height: 100px;
text-align: center;
line-height: 100px;
font-size: 32px;
font-weight: bold;
color: white;
border-radius: 8px;
}

.box-1 {
background-color: #e91e63;
}

.box-2 {
background-color: #9c27b0;
}

.box-3 {
background-color: #2196f3;
}

.box-4 {
background-color: #4caf50;
}

.box-5 {
background-color: #ff9800;
}

Partie 1: Activer Flexbox​

Sans Flexbox, les boîtes s'empilent verticalement, car les <div> sont des éléments block par défaut.

Activer display: flex​

Ajoutez display: flex au conteneur:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
}

Questions de découverte​

  • Que s'est-il passé avec les boîtes?
  • Dans quelle direction sont-elles maintenant?
info

display: flex transforme le conteneur en conteneur flex et ses enfants directs deviennent des éléments flex. Par défaut, ils s'alignent horizontalement (en rangée (row)).

Partie 2: Direction avec flex-direction​

Explorons maintenant comment changer la direction des éléments.

Phase 1: Direction en colonne​

Ajoutez flex-direction: column:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: column;
}
  • Comment les boîtes sont-elles disposées maintenant?

Phase 2: Direction inversée​

Changez pour flex-direction: row-reverse:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row-reverse;
}
  • Quel changement observez-vous?
  • L'ordre des boîtes a-t-il changé dans le HTML?

Changez pour flex-direction: column-reverse:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: column-reverse;
}
  • Quel changement observez-vous?

Phase 3: Retour en rangée​

Revenez à la direction par défaut:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
}
info

flex-direction contrôle la direction principale du conteneur:

  • row : Horizontal, de gauche à droite (défaut)
  • row-reverse : Horizontal, de droite à gauche
  • column : Vertical, de haut en bas
  • column-reverse : Vertical, de bas en haut

Partie 3: Alignement horizontal avec justify-content​

justify-content aligne les éléments le long de l'axe principal (horizontal si row, vertical si column).

Phase 1: Centrer les boîtes horizontalement​

Ajoutez justify-content: center:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: center;
}
  • Comment cela a-t-il changé la disposition des boîtes?

Phase 2: Espacer les boîtes​

Essayez justify-content: space-between:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: space-between;
}
  • Comment l'espace est-il distribué?
  • Y a-t-il de l'espace avant la première boîte? Et après la dernière?
info

space-between distribue l'espace équitablement entre les éléments, mais n'ajoute pas d'espace au début, ni à la fin du conteneur.

Phase 3: Espace autour​

Essayez justify-content: space-around:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: space-around;
}
  • Quelle est la différence avec space-between?
  • L'espace entre les boîtes est-il le même qu'à gauche de la première?
info

space-around distribue l'espace équitablement entre les éléments et ajoute un espace correspondant à la moitié de l'espace entre les éléments, au début et à la fin du conteneur.

Phase 4: Espace égal partout​

Essayez justify-content: space-evenly:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: space-evenly;
}
  • Comment est l'espacement maintenant?
  • Quelle est la différence avec space-around?
info

space-evenly distribue l'espace équitablement entre les éléments et ajoute le même espace au début et à la fin du conteneur.

Phase 5: Garder justify-content: center​

Retournez à justify-content: center;:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: center;
}
info

justify-content distribue l'espace le long de l'axe principal (horizontal si row, vertical si column):

  • flex-start: Au début (défaut)
  • flex-end: À la fin
  • center: Au centre
  • space-between: Espace entre les éléments (pas aux extrémités)
  • space-around: Espace autour de chaque élément
  • space-evenly: Espace égal partout

Partie 4: Alignement vertical avec align-items​

align-items aligne les éléments le long de l'axe secondaire (vertical si row, horizontal si column).

Phase 1: Centrer verticalement​

Ajoutez align-items: center:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
  • Où sont les boîtes verticalement?

Phase 2: Aligner en haut​

Changez pour align-items: flex-start:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: flex-start;
}
  • Les boîtes sont-elles alignées en haut?

Phase 3: Aligner en bas​

Essayez align-items: flex-end:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: flex-end;
}
  • Les boîtes sont-elles alignées en bas?

Phase 4: Retour au centre​

Revenez à align-items: center pour la suite:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
info

align-items aligne les éléments sur l'axe secondaire:

  • stretch: Étire pour remplir le conteneur (défaut)
  • flex-start: Au début
  • flex-end: À la fin
  • center: Au centre
  • baseline: Alignés sur la ligne de base du texte

Partie 5: Retour à la ligne avec flex-wrap​

Par défaut, les éléments flex restent sur une seule ligne. Explorons le comportement avec plusieurs éléments.

Phase 1: Ajouter plus de boîtes (dans le HTML)​

Ajoutez une sixième boîte dans votre HTML après la boîte 5:

<!-- ... -->
<body>
<h1>Découverte Flexbox</h1>

<div class="container">
<div class="box box-1">1</div>
<div class="box box-2">2</div>
<div class="box box-3">3</div>
<div class="box box-4">4</div>
<div class="box box-5">5</div>
<div class="box box-6">6</div>
</div>
</body>
<!-- ... -->

Et dans votre CSS, ajoutez le style pour cette nouvelle boîte:

.box-6 {
background-color: #00bcd4;
}
  • Que se passe-t-il? Les boîtes ont-elles rétréci?

Phase 2: Activer le retour à la ligne​

Ajoutez flex-wrap: wrap:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
flex-wrap: wrap;
}
  • Les boîtes passent-elles maintenant à la ligne?
  • Rétrécissez la largeur de votre navigateur. Que se passe-t-il?

Phase 3: Retirer la 6e boîte​

Enlevez la boîte 6 du HTML pour revenir à 5 boîtes. Gardez flex-wrap: wrap dans le CSS.

info

flex-wrap contrôle si les éléments doivent passer à la ligne:

  • nowrap: Pas de retour à la ligne (défaut)
  • wrap: Retour à la ligne si nécessaire
  • wrap-reverse : Retour à la ligne en ordre inverse

Partie 6: Espacement avec gap​

Au lieu d'utiliser des marges sur chaque boîte, gap crée de l'espace entre les éléments flex.

Ajouter de l'espace entre les boîtes​

Ajoutez gap: 15px:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: space-evenly;
align-items: center;
flex-wrap: wrap;
gap: 15px;
}
  • Un espace apparaît-il entre les boîtes?
  • Essayez gap: 30px pour voir la différence.

Revenez à gap: 15px:

.container {
background-color: #e3f2fd;
border: 3px dashed #1976d2;
padding: 20px;
min-height: 400px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
flex-wrap: wrap;
gap: 15px;
}
info

gap définit l'espace entre les éléments flex. C'est plus simple que d'utiliser des marges! Vous pouvez aussi utiliser:

  • gap: 20px : Même espacement horizontal et vertical
  • gap: 20px 10px : 20px vertical, 10px horizontal
  • row-gap et column-gap: Contrôle séparé

Partie 7: Faire grandir un élément avec flex-grow​

flex-grow permet à un élément de prendre plus d'espace disponible.

Faire grandir la boîte 2​

Ajoutez flex-grow: 1 à .box-2:

.box-2 {
background-color: #9c27b0;
flex-grow: 1;
}
  • Que se passe-t-il avec la boîte 2?
  • Prend-elle plus d'espace que les autres?
  • Essayez de rétrécir et agrandir la largeur du navigateur. Comment la boîte 2 réagit-elle?
info

flex-grow détermine comment un élément grandit pour remplir l'espace disponible:

  • 0 : Ne grandit pas (défaut)
  • 1 : Prend l'espace disponible
  • 2 : Prend 2× plus d'espace qu'un élément avec flex-grow: 1

Si plusieurs éléments ont flex-grow, l'espace est distribué proportionnellement.

Partie 8: Réorganiser avec order​

order permet de changer l'ordre visuel des éléments sans modifier le HTML.

Déplacer la boîte 5 au début​

Ajoutez order: -1 à .box-5:

.box-5 {
background-color: #ff9800;
order: -1;
}
  • Où est la boîte 5 maintenant?
  • L'ordre a-t-il changé dans le HTML? (Vérifiez le code source)

Expérimenter avec order​

Essayez d'ajouter différentes valeurs d'order aux autres boîtes entre 0 et 4.

  • Comment les boîtes sont-elles ordonnées?
  • Que se passe-t-il si deux boîtes ont le même order?

Retirer les propriétés order​

Enlevez toutes les propriétés order que vous avez ajoutées pour revenir à l'ordre normal.

info

order change l'ordre d'affichage des éléments:

  • Valeur par défaut: 0
  • Les valeurs négatives placent les éléments au début
  • Les valeurs positives placent les éléments à la fin
  • En cas d'égalité, l'ordre du HTML est respecté

Partie 9: Alignement individuel avec align-self​

align-self permet à un élément de s'aligner différemment des autres.

Aligner la boîte 3 différemment​

Ajoutez align-self: flex-start à .box-3:

.box-3 {
background-color: #2196f3;
align-self: flex-start;
}
  • Où est la boîte 3 maintenant?
  • Les autres boîtes ont-elles bougé?

Essayez align-self: flex-end:

.box-3 {
background-color: #2196f3;
align-self: flex-end;
}

Enlevez align-self de .box-3 pour terminer.

info

align-self permet à un élément individuel d'avoir un alignement différent:

  • auto: Utilise la valeur du conteneur (défaut)
  • flex-start, flex-end, center, stretch : Même valeurs qu'align-items

C'est utile quand un seul élément doit être aligné différemment!

Bravo! Vous maîtrisez maintenant les bases de Flexbox! 🎉