Les boutons standards Bootstrap
Créer, styliser, dimensionner et désactiver des boutons avec Bootstrap 5.3
- Connaître les différents boutons proposés par Bootstrap 5.3.
- Être capable de choisir la bonne balise (
<a>,<button>,<input>) selon le besoin. - Savoir appliquer les styles, tailles, contours et états (actif, désactivé) des boutons.
- Savoir personnaliser un bouton avec les variables CSS de Bootstrap 5.3.
1 Présentation
- Les boutons sont présents, sous une forme ou une autre, dans toutes les applications Web : envoyer un formulaire, valider une action, naviguer vers une autre page, ouvrir un menu…
- Techniquement, deux usages sont différents :
- un bouton submit envoie un formulaire et déclenche presque toujours une requête POST;
- un hyperlien (
<a>) permet d'accéder à une page via une requête GET.
- Visuellement, Bootstrap traite les deux de la même manière : grâce à la classe
.btn, un lien et un bouton de formulaire peuvent avoir exactement le même aspect.
Charger Bootstrap 5.3
Pour tous les exemples de ce cours, la page doit charger le CSS et le JavaScript de Bootstrap. Le fichier bootstrap.bundle.min.js contient déjà Popper, nécessaire aux menus déroulants.
<!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Les boutons Bootstrap</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container py-4">
<!-- Vos boutons ici -->
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
2 Les différents types de boutons
- Les classes de boutons peuvent s'appliquer aux balises
<a>,<button>et<input>. - Dans Bootstrap, on rencontre quatre types de boutons :
- les liens:
<a class="btn" role="button">; - les boutons:
<button class="btn">; - les inputs:
<input type="button|submit|reset" class="btn">; - les dropdowns: un bouton qui ouvre une liste de choix.
- les liens:
Lorsque la classe .btn est appliquée à un lien <a> qui déclenche une action sur la page (et non une navigation), ajoutez role="button" pour que les lecteurs d'écran l'annoncent correctement.
Exemple 1
<a class="btn btn-primary" href="#" role="button">Lien</a>
<button class="btn btn-secondary" type="submit">Button</button>
<input class="btn btn-danger" type="button" value="Input">
<input class="btn btn-success" type="submit" value="Submit">
Exemple 2 : les quatre types, dont le dropdown
<!-- Les types de boutons -->
<div class="container">
<div class="d-flex flex-wrap gap-2">
<a href="#" class="btn btn-primary" role="button">Un lien</a>
<button class="btn btn-primary" type="submit">Bouton</button>
<input type="button" class="btn btn-primary" value="Input">
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button"
data-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</button>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">Action 1</a></li>
<li><a class="dropdown-item" href="#">Action 2</a></li>
<li><a class="dropdown-item" href="#">Action 3</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Lien séparé</a></li>
</ul>
</div>
</div>
</div>
Dans Bootstrap 5, les attributs JavaScript commencent par data-bs-: on écrit data-bs-toggle="dropdown" et non data-toggle. Le menu ne s'ouvre que si bootstrap.bundle.min.js est chargé.
3 Les différents styles de boutons
- Bootstrap 5.3 propose plusieurs styles de boutons prédéfinis. Chacun a une signification (sémantique) : la couleur indique à l'utilisateur la nature de l'action.
- La classe
.btnseule ne donne qu'une forme de base, sans couleur : il faut toujours lui ajouter une classe de style.btn-*.
| Classe | Couleur | Usage conseillé |
|---|---|---|
.btn-primary |
Bleu | Action principale de la page (Enregistrer, Envoyer…) |
.btn-secondary |
Gris | Action secondaire ou générale (Annuler, Retour…) |
.btn-success |
Vert | Action positive ou validation |
.btn-info |
Cyan | Information, aide, détail |
.btn-warning |
Jaune orangé | Action délicate, à effectuer avec prudence |
.btn-danger |
Rouge | Action dangereuse ou irréversible (Supprimer…) |
.btn-light |
Blanc cassé | Bouton discret, souvent sur fond sombre |
.btn-dark |
Noir | Bouton contrasté, souvent sur fond clair |
.btn-link |
Aucune (texte) | Donne à un bouton l'apparence d'un lien, tout en gardant son comportement de bouton |
<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-secondary">Secondary</button>
<button type="button" class="btn btn-success">Success</button>
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-warning">Warning</button>
<button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-light">Light</button>
<button type="button" class="btn btn-dark">Dark</button>
<button type="button" class="btn btn-link">Link</button>
Le mode sombre (nouveauté 5.3)
- Bootstrap 5.3 gère un mode sombre grâce à l'attribut
data-bs-theme="dark". - Placé sur
<html>, il s'applique à toute la page ; placé sur un bloc, il ne s'applique qu'à ce bloc. Les boutons adaptent alors automatiquement leurs couleurs (en particulier.btn-light,.btn-darket.btn-link).
<div class="p-3 rounded bg-body-tertiary" data-bs-theme="dark">
<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-light">Light</button>
<button type="button" class="btn btn-outline-light">Outline light</button>
<button type="button" class="btn btn-link">Link</button>
</div>
4 Dimension des boutons
- Par défaut, un bouton a une taille moyenne: aucune classe supplémentaire n'est nécessaire.
- On peut ajuster la dimension avec les classes suivantes :
.btn-lg: grand bouton ;.btn-sm: petit bouton.
- La classe
.w-100de Bootstrap 4 n'existe plus. Pour un bouton qui occupe toute la largeur, on place le bouton dans un conteneur.d-grid, ou on lui ajoute la classe utilitaire.w-100. - Avec
.d-gridet.gap-*, on peut empiler plusieurs boutons pleine largeur sur mobile, puis les remettre côte à côte sur grand écran avec.d-md-flex.
<button type="button" class="btn btn-primary btn-lg">Grand bouton</button>
<button type="button" class="btn btn-primary">Bouton moyen</button>
<button type="button" class="btn btn-primary btn-sm">Petit bouton</button>
<!-- Pleine largeur -->
<div class="d-grid mt-3">
<button type="button" class="btn btn-secondary">Bouton pleine largeur</button>
</div>
<!-- Empilés sur mobile, côte à côte à partir de md -->
<div class="d-grid gap-2 d-md-flex justify-content-md-end mt-3">
<button type="button" class="btn btn-outline-secondary">Annuler</button>
<button type="button" class="btn btn-primary">Enregistrer</button>
</div>
5 Boutons actifs et désactivés
- Bootstrap fournit des styles spécifiques pour l'état actif (bouton enfoncé) et l'état désactivé.
- État actif: ajoutez la classe
.activeet l'attributaria-pressed="true". - Bouton bascule: avec
data-bs-toggle="button", Bootstrap ajoute ou retire automatiquement la classe.activeà chaque clic. - Désactiver un
<button>ou un<input>: utilisez simplement l'attribut HTML standarddisabled. - Désactiver un lien
<a>: l'attributdisabledn'existe pas pour les liens. Utilisez la classe.disabledavecaria-disabled="true". Le plus sûr est aussi de retirer l'attributhref: le lien ne peut alors plus être suivi, même au clavier.
<!-- Bouton actif -->
<button type="button" class="btn btn-primary active" aria-pressed="true">Actif</button>
<!-- Bouton bascule -->
<button type="button" class="btn btn-outline-primary" data-bs-toggle="button">Cliquez-moi</button>
<!-- Boutons désactivés -->
<button type="button" class="btn btn-primary" disabled>Bouton désactivé</button>
<input type="submit" class="btn btn-success" value="Envoyer" disabled>
<!-- Lien désactivé (sans href) -->
<a class="btn btn-secondary disabled" role="button" aria-disabled="true">Lien désactivé</a>
6 Contours des boutons
- Bootstrap 5.3 permet d'appliquer la couleur sémantique au contour seulement, avec un fond transparent. Le fond se remplit au survol.
- Il suffit de remplacer
.btn-*par.btn-outline-*. Cette variante existe pour toutes les couleurs, sauflink.
<button type="button" class="btn btn-outline-primary">Primary</button>
<button type="button" class="btn btn-outline-secondary">Secondary</button>
<button type="button" class="btn btn-outline-success">Success</button>
<button type="button" class="btn btn-outline-info">Info</button>
<button type="button" class="btn btn-outline-warning">Warning</button>
<button type="button" class="btn btn-outline-danger">Danger</button>
<button type="button" class="btn btn-outline-light">Light</button>
<button type="button" class="btn btn-outline-dark">Dark</button>
7 Personnaliser un bouton avec les variables CSS
- Dans Bootstrap 5.3, chaque bouton est construit à partir de variables CSS locales :
--bs-btn-bg,--bs-btn-color,--bs-btn-border-color,--bs-btn-hover-bg,--bs-btn-padding-x, etc. - Pour créer son propre style, il n'est plus nécessaire de recompiler Bootstrap : il suffit de redéfinir ces variables dans une classe.
<style>
.btn-violet {
--bs-btn-bg: #7c3aed;
--bs-btn-border-color: #7c3aed;
--bs-btn-color: #fff;
--bs-btn-hover-bg: #6d28d9;
--bs-btn-hover-border-color: #6d28d9;
--bs-btn-hover-color: #fff;
--bs-btn-active-bg: #5b21b6;
--bs-btn-active-border-color: #5b21b6;
}
</style>
<button type="button" class="btn btn-violet">Mon bouton violet</button>
<!-- Modification ponctuelle, directement sur l'élément -->
<button type="button" class="btn btn-primary"
style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .6rem; --bs-btn-font-size: .75rem;">
Très petit bouton
</button>
.w-100est supprimé : on utilise.d-gridautour du bouton, ou.w-100.- Les attributs
data-toggle,data-target… deviennentdata-bs-toggle,data-bs-target… - jQuery n'est plus nécessaire, et Popper est inclus dans
bootstrap.bundle.min.js. - Les menus déroulants s'écrivent avec
<ul>,<li>et<hr class="dropdown-divider">. - Nouveautés : mode sombre (
data-bs-theme) et personnalisation par variables CSS (--bs-btn-*). - Les classes de styles (
.btn-primary…), de tailles (.btn-lg,.btn-sm) et de contours (.btn-outline-*) restent les mêmes.
8 Activités
Pour chaque activité, créez un fichier HTML basé sur le modèle de la partie 1, qui charge Bootstrap 5.3 (CSS et JS) via le CDN. Testez votre page dans le navigateur et sur un écran de téléphone (outils de développement, mode responsive).
Activité 1 : Les quatre types de boutons
Niveau : débutant ⏱ 30 min- Créez un fichier
activite1.htmlà partir du modèle Bootstrap 5.3. - Dans un
.container, ajoutez un titre<h1>« Les types de boutons ». - Créez quatre boutons ayant le même style
.btn-primary, espacés avec la classe.gap-2:- un lien
<a>qui mène vers la page d'accueil de votre site ; - un
<button type="button">; - un
<input type="button">; - un
<input type="reset">.
- un lien
- Vérifiez que les quatre boutons ont exactement la même apparence.
- Sous les boutons, ajoutez un tableau à trois colonnes : « Balise utilisée », « Comportement au clic », « Cas d'utilisation ». Remplissez-le pour chacun des quatre boutons.
- Ajoutez un dropdown « Mes cours » qui propose quatre liens : HTML, CSS, JavaScript et Bootstrap, avec un séparateur avant le dernier lien.
- Expliquez en deux ou trois phrases, dans un paragraphe de la page, pourquoi on ajoute
role="button"à certains liens.
Activité 2 : Palette complète et mode sombre
Niveau : débutant ⏱ 45 min- Créez un fichier
activite2.html. - Créez un tableau Bootstrap (
.table) dont les lignes correspondent aux neuf styles : primary, secondary, success, info, warning, danger, light, dark et link. - Le tableau contient quatre colonnes :
- « Style » : le nom de la classe ;
- « Plein » : un bouton avec la classe
.btn-*; - « Contour » : un bouton avec la classe
.btn-outline-*(laissez la case vide si la variante n'existe pas) ; - « Désactivé » : le bouton plein avec l'attribut
disabled.
- Ajoutez une cinquième colonne « Exemple d'action » où vous proposez, pour chaque style, une action réelle d'un site Web (ex. : « Supprimer mon compte »).
- Placez le tableau dans un conteneur
.table-responsiveet vérifiez son affichage sur mobile. - Ajoutez au-dessus du tableau un bouton « Mode sombre » qui, en JavaScript, bascule l'attribut
data-bs-themede la balise<html>entrelightetdark. - Comparez les deux modes : quels boutons changent d'apparence ? lesquels restent identiques ? Notez vos observations dans un paragraphe.
Activité 3 : Trouver et corriger les erreurs
Niveau : intermédiaire ⏱ 40 minLe code suivant doit fonctionner avec Bootstrap 5.3, mais il contient au moins dix erreurs (classes inexistantes, attributs mal utilisés, syntaxe d'une ancienne version, problèmes d'accessibilité…).
<div class="container">
<button class="btn-primary">Enregistrer</button>
<button class="btn btn-default">Annuler</button>
<button class="btn btn-danger btn-xs">Supprimer</button>
<a href="/profil" class="btn btn-info" disabled>Mon profil</a>
<input type="submit" class="btn btn-sucess" value="Valider">
<button class="btn btn-outline-link">Aide</button>
<button class="btn btn-dark w-100">Continuer</button>
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
Options <span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="#">Exporter</a></li>
<li class="divider"></li>
<li><a href="#">Imprimer</a></li>
</ul>
</div>
</div>
- Recopiez ce code dans un fichier
activite3.htmlet observez le résultat dans le navigateur. - Repérez chaque erreur. Pour chacune, indiquez dans un tableau : la ligne concernée, l'erreur, la correction proposée et la raison de la correction.
- Réécrivez le code corrigé dans un fichier
activite3-corrige.html. - Comparez les deux pages côte à côte et décrivez les différences visibles et invisibles (comportement au clavier, lecteur d'écran…).
- Bonus : dans la version corrigée, remplacez le bouton « Continuer » par un groupe de deux boutons « Retour » et « Continuer », empilés sur mobile et alignés à droite sur ordinateur.
Activité 4 : Formulaire d'inscription avec gestion des états
Niveau : intermédiaire ⏱ 1 h 30On souhaite créer le formulaire d'inscription d'une plateforme de cours en ligne.
- Créez un formulaire contenant les champs : nom, prénom, adresse e-mail, mot de passe, confirmation du mot de passe, niveau (liste déroulante : débutant, intermédiaire, avancé) et une case « J'accepte les conditions d'utilisation ».
- Ajoutez en bas du formulaire trois boutons alignés :
- « Créer mon compte » : bouton principal, de grande taille ;
- « Effacer » : bouton de type
reset, style à contour ; - « J'ai déjà un compte » : lien vers une page
connexion.html, présenté avec le style.btn-link.
- Le bouton « Créer mon compte » doit être désactivé au chargement de la page.
- En JavaScript, activez ce bouton uniquement lorsque :
- tous les champs sont remplis ;
- les deux mots de passe sont identiques ;
- la case des conditions est cochée.
- Lorsque l'utilisateur clique sur « Créer mon compte », remplacez le texte du bouton par un indicateur de chargement Bootstrap (
.spinner-border-sm) suivi de « Inscription en cours… », désactivez-le pendant deux secondes, puis affichez un message de succès Bootstrap (.alert-success). - Sur mobile, les trois boutons doivent s'afficher les uns sous les autres et occuper toute la largeur (
.d-grid). Sur ordinateur, ils doivent être côte à côte (.d-md-flex). - Vérifiez que l'on peut remplir et envoyer tout le formulaire uniquement au clavier (touche Tab et Entrée).
Activité 5 : Mini-projet « Gestionnaire de tâches »
Niveau : avancé ⏱ 2 h 30Réalisez l'interface d'une petite application de gestion de tâches en utilisant tous les types, styles, tailles et états de boutons étudiés dans ce cours.
Partie A : barre d'outils
- En haut de la page, créez une barre contenant :
- un bouton « + Nouvelle tâche » (action principale) ;
- un dropdown « Trier par » avec les choix : date, priorité, titre ;
- un dropdown « Filtrer » avec les choix : toutes, en cours, terminées ;
- un bouton bascule « Mode sombre » (
data-bs-toggle="button") qui change le thème de la page ; - un bouton « Tout supprimer » (action dangereuse) placé à droite de la barre.
- Sur mobile, la barre doit rester utilisable : choisissez une disposition adaptée et justifiez-la dans un commentaire HTML.
Partie B : liste des tâches
- Affichez au moins cinq tâches sous forme de cartes ou de lignes d'une liste. Chaque tâche contient : un titre, une date, une priorité (haute, moyenne, basse) et trois petits boutons :
- « Terminer » (action positive) ;
- « Modifier » (action secondaire, style à contour) ;
- « Supprimer » (action dangereuse, style à contour).
- Une tâche terminée doit avoir son bouton « Terminer » désactivé et son titre barré.
- La couleur d'un badge ou d'une bordure doit indiquer la priorité de chaque tâche, en respectant la sémantique des couleurs Bootstrap.
- Créez votre propre style de bouton
.btn-tacheà l'aide des variables CSS--bs-btn-*et utilisez-le pour le bouton « + Nouvelle tâche ».
Partie C : interactions en JavaScript
- Le bouton « Terminer » marque la tâche comme terminée (voir question 4).
- Le bouton « Supprimer » retire la tâche de la liste après une confirmation de l'utilisateur.
- Le bouton « Tout supprimer » est désactivé lorsque la liste est vide.
- Les choix du dropdown « Filtrer » affichent ou masquent les tâches correspondantes ; le choix actif est mis en évidence avec la classe
.active. - Le bouton « + Nouvelle tâche » ajoute une tâche dont le titre est saisi par l'utilisateur.
Partie D : rapport
- Rédigez, dans une section « À propos » en bas de la page, un court rapport (10 à 15 lignes) qui explique :
- pourquoi vous avez choisi chaque couleur de bouton ;
- dans quels cas vous avez utilisé
<a>plutôt que<button>; - comment votre interface se comporte en mode sombre ;
- les difficultés rencontrées et la manière dont vous les avez résolues.