Module 2Les composants
Chapitre 6 sur 9
Les formulaires
Champs, choix, grilles de formulaire, groupes de saisie, labels flottants et validation.
- ≈ 125 min
- 5 leçons
- 4 vidéos
- 2 exercices
Module 2Les composants
Chapitre 6 sur 9
Champs, choix, grilles de formulaire, groupes de saisie, labels flottants et validation.
Objectifs
Avec ce chapitre, tu sauras…
form-control, form-select et form-label ;is-valid, is-invalid et needs-validation.Les formulaires HTML sont peu esthétiques par défaut. Bootstrap les rend propres, homogènes et responsives en quelques classes, sans rien changer à la structure accessible que tu as apprise (label, name, fieldset).
Leçon 1
<form action="/contact" method="post">
<div class="mb-3">
<label for="email" class="form-label">Adresse e-mail</label>
<input type="email" class="form-control" id="email" name="email" aria-describedby="aide-email" required>
<div id="aide-email" class="form-text">Nous ne partagerons jamais ton e-mail.</div>
</div>
<div class="mb-3">
<label for="objet" class="form-label">Objet</label>
<select class="form-select" id="objet" name="objet">
<option value="devis">Devis</option>
<option value="stage">Stage</option>
</select>
</div>
<div class="mb-3">
<label for="message" class="form-label">Message</label>
<textarea class="form-control" id="message" name="message" rows="4"></textarea>
</div>
<button type="submit" class="btn btn-primary">Envoyer</button>
</form>Tableau: Les classes de formulaire
| Classe | Sur… | Rôle |
|---|---|---|
form-label | <label> | libellé avec la bonne marge |
form-control | <input>, <textarea> | champ pleine largeur, bordure, focus |
form-select | <select> | liste déroulante stylisée |
form-text | <div> | texte d'aide sous le champ |
form-control-lg / -sm | champ | taille |
mb-3 | conteneur | espace entre les groupes |
Vidéo · À regarder
ENBootstrap 5 Crash Course
Web Dev Simplified · YouTube
Leçon 2
Leçon 3
Leçon 4
Vidéo · À regarder
ENBootstrap 5 Crash Course
Web Dev Simplified · YouTube
Vidéo · À regarder
ENBootstrap 5 Crash Course
Web Dev Simplified · YouTube
Leçon 5
| Classe | Effet |
|---|---|
is-valid | bordure verte |
is-invalid | bordure rouge |
valid-feedback / invalid-feedback | message affiché sous le champ selon son état |
needs-validation (sur le form) + novalidate | validation stylisée par Bootstrap au lieu des bulles du navigateur |
was-validated | classe ajoutée au form par JavaScript après la tentative d'envoi |
1Quelle classe stylise un <input type="text"> ?
2Pour une liste déroulante :
3Un interrupteur s'obtient avec…
4Dans form-floating, le <label> se place…
5Pour afficher une bordure rouge :
6La validation Bootstrap…
L'essentiel du chapitre
form-label, form-control, form-select, form-text, groupes espacés par mb-3.form-check + form-check-input + form-check-label ; form-switch ; form-check-inline.row g-3 + col-md-*.input-group + input-group-text ; form-floating (input avant label, avec placeholder).is-valid/is-invalid, invalid-feedback, needs-validation novalidate + script. Le serveur revérifie toujours.Règle
Toujours la validation serveur
Vidéo · À regarder
ENBootstrap 5 Crash Course
Web Dev Simplified · YouTube
Les bases des formulaires (anglais) : champs, labels, selects et mise en grille.
<fieldset class="mb-3">
<legend class="fs-6 fw-semibold">Rythme</legend>
<div class="form-check">
<input class="form-check-input" type="radio" name="rythme" id="jour" value="jour" checked>
<label class="form-check-label" for="jour">En journée</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="rythme" id="soir" value="soir">
<label class="form-check-label" for="soir">En soirée</label>
</div>
</fieldset>
<div class="form-check form-switch mb-3">
<input class="form-check-input" type="checkbox" role="switch" id="newsletter" name="newsletter">
<label class="form-check-label" for="newsletter">Recevoir la newsletter</label>
</div>form-check-inline met les options côte à côte.
<div class="row g-3">
<div class="col-md-6">
<label for="prenom" class="form-label">Prénom</label>
<input type="text" class="form-control" id="prenom" name="prenom">
</div>
<div class="col-md-6">
<label for="nom" class="form-label">Nom</label>
<input type="text" class="form-control" id="nom" name="nom">
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary">S'inscrire</button>
</div>
</div><div class="input-group mb-3">
<span class="input-group-text">@</span>
<input type="text" class="form-control" placeholder="pseudo" aria-label="Nom d'utilisateur">
</div>
<div class="input-group mb-3">
<input type="number" class="form-control" aria-label="Montant">
<span class="input-group-text">DH</span>
</div>
<div class="form-floating mb-3">
<input type="email" class="form-control" id="mail-flottant" placeholder="nom@exemple.com">
<label for="mail-flottant">Adresse e-mail</label>
</div>Pour form-floating, le <input> doit être avant le <label> et doit avoir un attribut placeholder (même factice) : Bootstrap s'en sert pour savoir si le champ est vide et placer le label au bon endroit.
Les groupes de saisie (anglais).
Tableau: Les états de validation
<div class="mb-3">
<label for="mdp" class="form-label">Mot de passe</label>
<input type="password" class="form-control is-invalid" id="mdp" name="mdp" minlength="8" aria-describedby="mdp-erreur" required>
<div id="mdp-erreur" class="invalid-feedback">8 caractères minimum.</div>
</div>document.querySelectorAll('.needs-validation').forEach(form => {
form.addEventListener('submit', event => {
if (!form.checkValidity()) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
});
});Crée une barre de recherche : un groupe de saisie avec un champ type="search" et un bouton « Rechercher » collé à droite contenant l'icône bi-search.
Reprends le formulaire d'inscription de la formation HTML (chapitre 10, section 8) et stylise-le avec Bootstrap : prénom et nom côte à côte à partir de md, e-mail avec un label flottant, téléphone dans un groupe de saisie avec le préfixe « +212 », rythme en boutons radio en ligne, interrupteur pour la newsletter, et validation needs-validation avec messages d'erreur.
Les labels flottants (anglais), en une minute et demie.
Comme en HTML, la validation Bootstrap est un confort pour l'utilisateur. Le serveur doit revérifier toutes les données reçues.
La validation des formulaires (anglais), avec needs-validation et le script.