Bootstrap#
Bootstrap est un framework CSS : une collection de styles déjà écrits que l'on ajoute à une page pour la mettre en forme rapidement, sans avoir à écrire soi-même tout le CSS. Il a été créé à l'origine par Twitter et il est aujourd'hui très utilisé dans le développement web.
Bootstrap propose beaucoup d'outils (boutons, menus, fenêtres...), mais dans ce chapitre nous nous concentrons sur une seule chose : la grille, qui permet d'organiser le contenu d'une page en lignes et en colonnes.
Installer Bootstrap#
Pour utiliser Bootstrap sur une page, il suffit d'ajouter deux balises dans le fichier HTML.
Dans la balise
<head>, ajoutez la balise<link>ci-dessous. Elle charge les styles de Bootstrap :
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
Juste avant la fermeture de la balise
</body>, ajoutez la balise<script>ci-dessous. Elle charge les fonctionnalités interactives :
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" crossorigin="anonymous"></script>
La grille : lignes et colonnes#
La grille de Bootstrap repose sur trois classes que l'on emboîte les unes dans les autres :
container: la zone qui contient toute la grille.row: une ligne de la grille.col: une colonne à l'intérieur d'une ligne.
L'idée est toujours la même : un container contient des row (les lignes), et
chaque row contient des col (les colonnes).
Le conteneur container#
On place d'abord tout le contenu dans une balise <div> ayant la classe
container. Elle centre le contenu et lui donne une largeur adaptée à l'écran.
<body>
<div class="container">
...
</div>
</body>
Les lignes row#
À l'intérieur du container, on groupe dans une <div class="row"> tous les
éléments qui doivent apparaître sur la même ligne. Ici, il y aurait donc
trois lignes distinctes, l'une en dessous de l'autre :
<div class="container">
<div class="row"> ... </div>
<div class="row"> ... </div>
<div class="row"> ... </div>
</div>
Les colonnes col#
Enfin, à l'intérieur de chaque ligne, on entoure chaque élément d'une
<div class="col">. Toutes les colonnes d'une même ligne se partagent
automatiquement et à parts égales la largeur disponible : deux col occupent
chacune la moitié de la ligne, trois col occupent chacune un tiers, et ainsi de
suite.
<div class="container">
<div class="row">
<div class="col"> Colonne 1 </div>
<div class="col"> Colonne 2 </div>
<div class="col"> Colonne 3 </div>
</div>
</div>
Voici un exemple complet, rendu par le navigateur. Chaque colonne est colorée pour bien voir comment la grille répartit l'espace : trois colonnes égales sur la première ligne, deux sur la deuxième, une seule (toute la largeur) sur la troisième.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<style>
.col { background-color: lightblue; border: 1px solid steelblue; padding: 8px; }
.row { margin-bottom: 8px; }
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col">1re colonne</div>
<div class="col">2e colonne</div>
<div class="col">3e colonne</div>
</div>
<div class="row">
<div class="col">1re de 2 colonnes</div>
<div class="col">2e de 2 colonnes</div>
</div>
<div class="row">
<div class="col">Sur cette ligne il n'y a qu'une colonne</div>
</div>
</div>
</body>
</html>
Note
Sur un petit écran (téléphone), les colonnes d'une même ligne se placent automatiquement les unes en dessous des autres pour rester lisibles. C'est tout l'intérêt de Bootstrap : la mise en page s'adapte à la taille de l'écran.
Exercices#
Exercice 19#
Notez la classe Bootstrap qui permet de :
... créer la zone qui contient toute la grille ?
... créer une ligne ?
... créer une colonne à l'intérieur d'une ligne ?
Exercice 20#
Lisez le code ci-dessous sans l'exécuter et prédisez le résultat.
<div class="container">
<div class="row">
<div class="col">A</div>
<div class="col">B</div>
<div class="col">C</div>
<div class="col">D</div>
</div>
<div class="row">
<div class="col">E</div>
<div class="col">F</div>
</div>
</div>
Combien de colonnes y a-t-il sur la première ligne ?
La colonne E est-elle sur la même ligne que la colonne A ?
Les quatre colonnes de la première ligne ont-elles toutes la même largeur ?
Une colonne de la première ligne est-elle plus étroite qu'une colonne de la deuxième ligne ?
Si on ajoutait une cinquième colonne à la première ligne, les colonnes de cette ligne deviendraient...
Solution
4 colonnes (A, B, C, D).
Non. E est dans la deuxième
row, donc sur une nouvelle ligne, en dessous de A.Oui. Les
cold'une même ligne se partagent la largeur à parts égales : ici chacune occupe un quart de la ligne.Oui. Sur la première ligne, chaque colonne occupe un quart de la largeur ; sur la deuxième, chaque colonne en occupe la moitié. Une colonne de la première ligne est donc deux fois plus étroite.
Plus étroites. Comme les colonnes se partagent toujours la largeur à parts égales, ajouter une colonne réduit la part de chacune : un cinquième de la ligne au lieu d'un quart.
Exercice 21#
La page ci-dessous devrait afficher les trois colonnes côte à côte, mais elles s'affichent les unes en dessous des autres. Exécutez le code pour observer le problème, puis corrigez-le.
1<!DOCTYPE html>
2<html>
3 <head>
4 <meta charset="utf-8">
5 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
6 <style>
7 .col { background-color: lightblue; border: 1px solid steelblue; padding: 8px; }
8 </style>
9 </head>
10 <body>
11 <div class="container">
12 <div class="col">Colonne 1</div>
13 <div class="col">Colonne 2</div>
14 <div class="col">Colonne 3</div>
15 </div>
16 </body>
17</html>
Solution
Il manque la ligne <div class="row"> ... </div> autour des colonnes. Une
colonne (col) ne se place correctement que si elle est à l'intérieur d'une ligne
(row). Sans row, les colonnes ne se répartissent pas et s'empilent.
1<!DOCTYPE html>
2<html>
3 <head>
4 <meta charset="utf-8">
5 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
6 <style>
7 .col { background-color: lightblue; border: 1px solid steelblue; padding: 8px; }
8 </style>
9 </head>
10 <body>
11 <div class="container">
12 <div class="row">
13 <div class="col">Colonne 1</div>
14 <div class="col">Colonne 2</div>
15 <div class="col">Colonne 3</div>
16 </div>
17 </div>
18 </body>
19</html>
Exercice 22#
En utilisant l'éditeur ci-dessous, complétez la row pour obtenir une galerie de
trois photos côte à côte. La première colonne est déjà remplie : elle contient un
sous-titre <h3>, une image <img> et une légende <p>. Ajoutez les deux
colonnes manquantes sur le même modèle (utilisez les images
https://picsum.photos/id/1025/200/140 et https://picsum.photos/id/1003/200/140).
1<!DOCTYPE html>
2<html>
3 <head>
4 <meta charset="utf-8">
5 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
6 <style>
7 .col { background-color: lightblue; border: 1px solid steelblue; padding: 8px; }
8 </style>
9 </head>
10 <body>
11 <div class="container">
12 <div class="row">
13 <div class="col">
14 <h3>Photo 1</h3>
15 <img src="https://picsum.photos/id/1020/200/140">
16 <p>Une vue de la nature.</p>
17 </div>
18 <!-- Ajoutez ici les deux autres colonnes, sur le même modèle -->
19 </div>
20 </div>
21 </body>
22</html>
Solution
1<!DOCTYPE html>
2<html>
3 <head>
4 <meta charset="utf-8">
5 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
6 <style>
7 .col { background-color: lightblue; border: 1px solid steelblue; padding: 8px; }
8 </style>
9 </head>
10 <body>
11 <div class="container">
12 <div class="row">
13 <div class="col">
14 <h3>Photo 1</h3>
15 <img src="https://picsum.photos/id/1020/200/140">
16 <p>Une vue de la nature.</p>
17 </div>
18 <div class="col">
19 <h3>Photo 2</h3>
20 <img src="https://picsum.photos/id/1025/200/140">
21 <p>Un ami à quatre pattes.</p>
22 </div>
23 <div class="col">
24 <h3>Photo 3</h3>
25 <img src="https://picsum.photos/id/1003/200/140">
26 <p>Un moment en plein air.</p>
27 </div>
28 </div>
29 </div>
30 </body>
31</html>
Exercice 23#
Le contenu de la fiche ci-dessous est déjà écrit, mais il n'a aucune structure de
grille : tout s'affiche les uns en dessous des autres. Ajoutez les div
(container, row et col) pour l'organiser en deux lignes :
une première ligne avec deux colonnes : l'image à gauche, le titre
<h2>et le paragraphe<p>à droite ;une deuxième ligne avec une seule colonne contenant le second
<h2>et la liste<ul>.
N'ajoutez que des div : ne modifiez pas les autres balises.
1<!DOCTYPE html>
2<html>
3 <head>
4 <meta charset="utf-8">
5 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
6 <style>
7 .col { background-color: lightblue; border: 1px solid steelblue; padding: 8px; }
8 .row { margin-bottom: 8px; }
9 </style>
10 </head>
11 <body>
12 <img src="https://picsum.photos/id/1062/260/180">
13 <h2>Le renard</h2>
14 <p>Le renard roux est un petit carnivore très répandu en Europe. Il est
15 reconnaissable à son pelage roux et à sa longue queue touffue.</p>
16 <h2>Ses caractéristiques</h2>
17 <ul>
18 <li>Pelage roux et queue touffue</li>
19 <li>Animal surtout nocturne</li>
20 <li>Se nourrit de petits rongeurs, de fruits et d'insectes</li>
21 </ul>
22 </body>
23</html>
Solution
1<!DOCTYPE html>
2<html>
3 <head>
4 <meta charset="utf-8">
5 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
6 <style>
7 .col { background-color: lightblue; border: 1px solid steelblue; padding: 8px; }
8 .row { margin-bottom: 8px; }
9 </style>
10 </head>
11 <body>
12 <div class="container">
13 <div class="row">
14 <div class="col">
15 <img src="https://picsum.photos/id/1062/260/180">
16 </div>
17 <div class="col">
18 <h2>Le renard</h2>
19 <p>Le renard roux est un petit carnivore très répandu en Europe. Il est
20 reconnaissable à son pelage roux et à sa longue queue touffue.</p>
21 </div>
22 </div>
23 <div class="row">
24 <div class="col">
25 <h2>Ses caractéristiques</h2>
26 <ul>
27 <li>Pelage roux et queue touffue</li>
28 <li>Animal surtout nocturne</li>
29 <li>Se nourrit de petits rongeurs, de fruits et d'insectes</li>
30 </ul>
31 </div>
32 </div>
33 </div>
34 </body>
35</html>