Principes de Bootstrap

Objectif
  • Prise en main du framework

1. Bootstrap : Présentation et utilisation

1.1. Qu’est-ce que Bootstrap ?

Bootstrap est un framework CSS et JavaScript qui simplifie la création de designs web complexes grâce à des classes prédéfinies et des composants interactifs (barres de navigation, modals, etc.).

Bootstrap adopte le principe du design responsive, permettant aux sites web de s’adapter aux différentes résolutions et types d’appareils (smartphones, tablettes, ordinateurs). Son objectif est d’optimiser l’expérience utilisateur en ajustant la mise en page en fonction de la taille de l’écran.

Pour cela, il s’appuie sur des techniques comme les media queries, l’utilisation d’unités relatives (em, rem, %, vh, vw), ainsi qu’un système de grille flexible.

1.2. Pourquoi l’utiliser ?

  • Gain de temps : rapidité de développement grâce aux styles et composants prêts à l’emploi.

  • Cohérence et compatibilité : assure un design responsive et compatible avec tous les navigateurs.

  • Fiabilité : soutenu par Twitter pour son évolution et son maintien.

1.3. Limites de Bootstrap

  • Poids du framework : peut ralentir le chargement des pages.

  • Courbe d’apprentissage : nécessite du temps pour exploiter toutes ses fonctionnalités.

  • Flexibilité limitée : bien que modifiable, il peut restreindre la créativité en dehors des styles prédéfinis.

1.4. Nouveautés de Bootstrap

  • Version 4 (2017)

    • Mobile-first : conçu d’abord pour les mobiles, puis adapté aux grands écrans.

    • Flexbox : remplace float pour un positionnement plus fluide et responsive.

Une synthèse de l’utilisation de Flexbox est disponible sur https://css-tricks.com/snippets/css/a-guide-to-flexbox/

  • Version 5 (fin 2020)

    • Abandon de jQuery pour javascript natif

    • Abandon du support d' Internet Explorer 10 et Internet Explorer 11

    • Amélioration de l’API

    • Ajout d’une bibliothèque spécifique d’icônes

    • Ajout et suppression de composants pour moderniser l’outil.

1.5. Comment l’utiliser ?

Deux options :

2. Mise en place

2.1. IDE

Installez VSCode et Firefox sur votre machine.

Ajoutez à VScode les extensions :

  • Live Server qui permettra de voir le rendu d’une page dans un vrai navigateur avec auto-reload. Le serveur se lance en cliquant en bas à droite sur Go Live

  • Bootstrap IntelliSense qui fournit la complétion des classes Bootstrap. L’extension s’active et configure par click en bas à gauche (Enable completion et Select Bootstrap Version)

De même, pourra être utile W3C Web Validator

Raccourcis clavier utiles de VSCode (windows)
  • Reformater du code : Shift⇧+Alt+F

  • Commenter une ligne ou un bloc de ligne : Ctrl⌃+:

2.2. Inclure Bootstrap

Avec une page vide comme suit, liez les sources de Bootstap par CDN ou en téléchargeant les fichiers .css et .js en local.

<!doctype html>
<html lang="fr">
  <head>
    <meta charset="utf-8"> (1)
    <meta name="viewport" content="width=device-width, initial-scale=1"> (2)(3)
    <title>Bootstrap demo</title>
    <!--ici le code pour inclure les CSS-->
  </head>
  <body>

    <!--ici le code pour inclure le JS (après le chargement du DOM)-->
  </body>
</html>
1 encodage du texte source
2 width=device-width : définit la largeur de la page à celle de l’écran de l’appareil (au lieu d’une largeur fixe).
3 initial-scale=1 : définit le niveau de zoom initial à 1 (100%), c’est-à-dire sans agrandissement ou réduction.

Vérifiez dans les outils de développement de votre navigateur (onglet Réseau) que chaque source est chargée avec un code http 200 ou 300. Notez que lorsque l’on recharge une page avec la touche Shift⇧, on ne passe pas par le cache du navigateur.

Pour la suite des manipulations de découverte de Bootstrap enregistrez la page qui inclue Bootstarp localement sous le nom template.html. Vous pourrez ainsi copier ce fichier pour chaque nouvelle manipulation et tester les fonctionnalités indépendament les unes des autres.

3. Le système de classes

3.1. Classes de Bootstrap

Bootstrap utilise principalement deux fichiers CSS : un avec des sélecteurs d’éléments pour des styles de base, et un autre avec des sélecteurs de classes pour appliquer des styles prédéfinis.

Le fichier de classes CSS Bootstrap définit par exemple un sélecteur de classe .container et lui attribue les styles comme par exemple :

.container {
  width: 100%;
  padding-right: 15px;
  padding-left: 15px;
  margin-right: auto;
  margin-left: auto;
}

@media (min-width: 576px) {
  .container {
    max-width: 540px;
  }
}

Nous utiliserons ces classes directement dans nos éléments HTML sans modifier les fichiers CSS.

Editez le fichier bootstrap.css et retrouvez les déclarations pour la classe .container. Observez les différentes valeurs de largeur d’écran prises en compte.

3.2. Reboot et Styles de base

Le fichier Reboot définit les styles par défaut pour tous les éléments HTML afin d’assurer une expérience homogène, quel que soit le navigateur. Il repose sur normalize.css pour une remise à zéro des styles de base des différents navigateurs.

3.3. Mobile-First & Responsive

Bootstrap 5 suit la philosophie "mobile-first", avec des règles CSS adaptées d’abord aux écrans mobiles. Il utilise des breakpoints avec des règles @media pour ajuster les styles sur des écrans plus grands. Ces règles @media avec min-width s’appliquent aux écrans dépassant une certaine taille. Les classes .container et d’autres sont ajustées en fonction des tailles d’écran (sm, md, lg, xl). Le breakpoint xs est principalement pour les écrans mobiles, mais rarement utilisé directement.

Retrouvez dans bootstrap.css la définition en pixel des différents breakpoints.

3.4. Affichage des Composants

Bootstrap utilise ausi la propriété CSS z-index pour gérer l’ordre d’affichage des composants (par exemple, fenêtres modales, barres de navigation) en cas de chevauchement de ceux-ci.

4. Conteneurs et Grilles Bootstrap

Bootstrap repose sur une grille de 12 colonnes utilisant Flexbox. Les éléments doivent être contenus dans .container pour avoir une largeur fixe selon le breakpoint ou .container-fluid pour une largeur de 100%.

Il est recommandé d’utiliser un conteneur .container ou .container-fluid comme conteneur générique dans lequel on placera tout le contenu HTML, même sans recourir au système de grille de Bootstrap.

En relisant les déclarations CSS de .container par exemple, on comprend que :

  • la largeur par défaut est égale à 100% de l’espace disponible

  • pour les écrans de largeur minimum 1400px, le conteneur occupera une place de 1320px.

  • pour les écrans de largeur comprise entre 1200px et 1400px, le conteneur occupera une place de 1400px

  • pour les écrans de largeur comprise entre 992px et 1200px, le conteneur occupera une place de 960px

  • etc.

Testez ce bloc de code dans un nouveau fichier html.

ex3 1

Visualisez le rendu de cette page dans Firefox avec la vue adaptive (Ctrl⌃+Shift⇧+M ou icone de deux écrans à droite des outils de développement (Ctrl⌃+Shift⇧+I)) pour modifier la largeur de l’écran ou son orientation. Observez le comportement des deux containeurs.

Pour son système d’axe Flexbox, Bootstrap utilise l’axe horizontal ; les lignes servent ainsi de conteneurs aux colonnes. Une ligne est déclarée par la classe .row.

Pour chaque ligne, il est possible de déterminer le nombre de colonnes utiilisées à partir des 12 colonnes de base en utilisant les classes .col-*. Bootstrap crée automatiquement 12 colonnes par défaut dans chaque grille ; ces colonnes peuvent ensuite être combinées au sein de chaque ligne pour créer des colonnes personnalisées.

La grille Bootstrap est donc construite comme suit :

  • Les lignes (classe .row) doivent être placées dans des conteneurs (.container ou .container-fluid) ;

  • Les lignes ne sont utilisées que pour contenir des colonnes (classes .col ou .col-*)

4.1. Grilles de colonnes

La classe .col permet de définir des colonnes personnalisées pour une ligne sans leur affecter de taille explicite.

Testez ce bloc de code dans un nouveau fichier html.

ex4 1

Observez la répartition des colonnes et modifiez la taille de l’écran.

Testez ce bloc de code dans un nouveau fichier html.

ex4 2

Observez la répartition des colonnes dans chaque ligne.

Pour définir précisément le nombre de colonnes de base que doivent occuper nos colonnes personnalisées, nous utiliserons les classes .col-1, .col-2, …​ .col-12. La classe .col-1 indique qu’on souhaite créer une colonne d’une taille équivalente à celle d’une colonne de base de la grille. .col-2 crée une colonne avec l’espace de deux colonnes de base etc.

Testez ce bloc de code dans un nouveau fichier html.

ex4 3

Si on essaie de créer des colonnes débordants des 12 colonnes de base, alors les colonnes débordantes seront positionnées en dessous des précédentes (à la ligne).

Testez ce bloc de code dans un nouveau fichier html.

ex4 4

On peut mélanger des éléments utilisant .col et .col-1, .col-2.col-12 dans une même ligne. Les colonnes avec une taille spécifiée prendront d’abord l’espace disponible, puis l’espace restant sera réparti entre les colonnes définies avec la classe .col.

Testez ce bloc de code dans un nouveau fichier html.

ex4 5

Enfin, si le contenu d’une colonne dépasse l’espace qui lui est attribué, l’espace de la ligne sera réajusté pour permettre à la colonne de s’adapter, ce qui peut provoquer un passage à la ligne automatique des autres colonnes.

Testez ce bloc de code dans un nouveau fichier html.

ex4 6

Observez la répartition des colonnes avec le changement de taille d’écran.

4.2. Grille responsive

Les grilles Bootstrap varient en fonction de la taille de la fenêtre, car elles dépendent de la taille du conteneur défini par les classes .container ou .container-fluid, qui sont flexibles. Ainsi, les colonnes peuvent occuper un nombre différent de colonnes de base selon la taille de l’écran.

Cela permet d’optimiser l’affichage pour différentes résolutions. Par exemple, on peut vouloir qu’un élément occupe 3 colonnes sur un grand écran et 6 colonnes sur un écran plus petit.

Pour ce faire, on utilise les classes .col-sm, .col-md, .col-lg, .col-xl et .col-xxl en plus de .col. Ces classes correspondent aux breakpoints prédéfinis par Bootstrap, qui appliquent les styles en fonction de la taille de la fenêtre. Par défaut, la classe .col s’applique à tous les écrans si aucune autre règle plus spécifique n’est définie.

Les classes liées aux tailles d’écran sont les suivantes :

  • Extra small (< 576px)

  • Small (>= 576px)

  • Medium (>= 768px)

  • Large (>= 992px)

  • Extra large (>= 1200px)

  • Extra extra large (>=1400px)

Cela permet de définir des tailles de conteneur maximales qui varient en fonction du breakpoint. Par exemple, les colonnes peuvent être réparties différemment selon la taille de la fenêtre : une colonne peut occuper 6 colonnes de base sur des écrans moyens (plus de 768px) et prendre toute la largeur sur des écrans plus petits.

Notons que la classe .col est implicite dès lors qu’une autre classe .col-{breakpoint} a été définie.

Testez ce bloc de code dans un nouveau fichier html.

ex4 7

Observez la répartition des colonnes avec le changement de taille d’écran autour du breakpoint.

Les classes .col-{breakpoint} prendront priorité les unes après les autres dès qu’un certain seuil de taille d’écran est atteint. Par exemple, En utilisant uniquement la classe .col-sm-, cette classe déterminera le comportement des colonnes pour tous les écrans de plus de 576px. Par ailleurs, si l’on applique à la fois les classes .col-sm- et .col-lg- pour des colonnes, la classe .col-sm- déterminera la taille des colonnes pour les écrans supérieurs à 576px jusqu’au breakpoint de 992px, où la classe .col-lg- prendra le relais et ajustera les dimensions des colonnes.

Testez ce bloc de code dans un nouveau fichier html.

ex4 8

Observez la répartition des colonnes avec le changement de taille d’écran autour des deux breakpoints.

Enfin, si on souhaite que la largeur des colonnes s’ajuste automatiquement en fonction de leur contenu, vous pouvez utiliser les classes .col-{breakpoint}-auto.

Testez ce bloc de code dans un nouveau fichier html.

ex4 9

Changez les classes .col-md en .col-md-auto des différents éléments pour observer l’ajustement automatique.

4.3. Alignement des colonnes

4.3.1. Alignement vertical des colonnes

Par défaut, les colonnes occupent toute la hauteur d’une ligne. Bootstrap permet d’ajuster cet alignement vertical avec les classes .align-items- pour aligner toutes les colonnes, et .align-self- pour aligner chaque colonne individuellement, avec des options de positionnement en haut, centre ou bas.

Testez ce bloc de code dans un nouveau fichier html.

ex5 1

4.3.2. Alignement horizontal des colonnes

Pour aligner horizontalement les colonnes dans une ligne où l’espace est restant, on utilise les classes .justify-content- qui permettent de positionner les colonnes à gauche, au centre, à droite, ou de les répartir de manière égale.

Testez ce bloc de code dans un nouveau fichier html.

ex5 2

Dupliquez les containers pour explorer le fonctionnement de .justify-content-end, .justify-content-around et .justify-content-between dans des lignes contenant 2 ou 3 colonnes de largeur col-4 ou col-3.

4.3.3. Supprimer les gouttières

Les gouttières (espaces entre les colonnes) peuvent être supprimées avec la classe .g-0, ce qui élimine le padding par défaut.

Testez ce bloc de code dans un nouveau fichier html.

ex5 3

4.4. Ordre des colonnes et imbrication des lignes

4.4.1. Modifier l’ordre d’affichage

Les classes .order-* permettent de réorganiser visuellement les colonnes en leur attribuant un numéro entre 1 et 5 (ex. .order-1, .order-2, etc). Plus le chiffre est petit, plus la colonne apparaît tôt.

  • Par défaut, les colonnes ont order : 0 si aucune classe n’est définie.

  • Les classes .order-first et .order-last forcent l’affichage en premier ou dernier.

  • Ces classes sont responsives et acceptent les breakpoints (-sm-, -md-, etc.).

Testez ce bloc de code dans un nouveau fichier html.

ex6 1

4.4.2. Imbriquer des lignes

Pour créer des mises en page complexes, il est possible d’imbriquer des lignes (.row) à l’intérieur de colonnes (.col-*). Chaque ligne imbriquée agit comme une nouvelle grille de 12 colonnes. Toutefois, un trop grand niveau d’imbrication nuit à la lisibilité du code.

Testez ce bloc de code dans un nouveau fichier html.

ex6 2