HTML & CSS Leçon 6
Mettre en page avec Flexbox
Aligner des éléments côte à côte, les espacer et les centrer, sans prise de tête.
À la fin de cette leçon, tu sauras
- Placer des éléments en ligne avec display: flex
- Les espacer avec gap et justify-content
- Les aligner verticalement avec align-items
Le problème
Par défaut, les blocs comme <div> ou <p> s'empilent les uns sous les autres. Pour un menu, une rangée de cartes ou un en-tête avec un logo à gauche et des liens à droite, il faut les mettre côte à côte. C'est le rôle de Flexbox.
display: flex
On l'applique au parent, la boîte qui contient les éléments. Ses enfants directs se mettent alors en ligne.
<style>
.menu {
display: flex;
gap: 16px;
}
</style>
<nav class="menu">
<a href="#">Accueil</a>
<a href="#">Projets</a>
<a href="#">Contact</a>
</nav>gap met un espace régulier entre les enfants. C'est bien plus simple que d'ajouter des marges à chacun.
Répartir sur la ligne : justify-content
flex-start(par défaut) : tout à gauche ;center: au centre ;space-between: le premier tout à gauche, le dernier tout à droite, le reste réparti entre les deux ;flex-end: tout à droite.
Aligner en hauteur : align-items
Quand les enfants n'ont pas la même hauteur, align-items: center les centre verticalement. C'est la fameuse recette pour centrer quelque chose au milieu d'une boîte :
.entete {
display: flex;
justify-content: space-between;
align-items: center;
}Passer à la ligne : flex-wrap
Sur un petit écran, une rangée de cartes peut déborder. Avec flex-wrap: wrap, les enfants qui ne tiennent plus passent à la ligne suivante.
Astuce : pour voir ce que fait chaque propriété, change une valeur dans l'exercice et regarde le résultat bouger.
À toi de jouer
Construis un en-tête de site :
- la classe
.entetedoit utiliser Flexbox ; - le logo à gauche et le menu à droite (
space-between) ; - les éléments centrés verticalement ;
- les liens du menu (
.menu) en ligne, avec un espace de16pxentre eux.
- .entete utilise display: flex
- Le logo est à gauche et le menu à droite (space-between)
- Les éléments sont centrés verticalement
- .menu utilise display: flex
- Les liens du menu sont espacés de 16px
Bravo, toutes les consignes sont réussies !
Bloqué ? Voir une solution
<style>
.entete {
display: flex;
justify-content: space-between;
align-items: center;
}
.menu {
display: flex;
gap: 16px;
}
</style>
<header class="entete">
<strong>MonSite</strong>
<nav class="menu">
<a href="#">Accueil</a>
<a href="#">Projets</a>
<a href="#">Contact</a>
</nav>
</header>