Éléments avancés de formulaire
Éléments avancés de formulaire
- 1Textarea permet de créer des zones de texte multilignes pour les messages et commentaires
- 2Select et options créent des listes déroulantes pour organiser les choix multiples
- 3Radio buttons et checkboxes offrent des sélections uniques ou multiples avec une interface claire
Introduction
Après avoir maîtrisé les éléments de base comme les champs texte et les boutons, il est temps de découvrir les éléments avancés qui rendront vos formulaires plus interactifs et professionnels. Ces éléments permettent de collecter des informations plus complexes tout en améliorant l'expérience utilisateur.
Comprendre les types d'éléments avancés
L'élément Textarea : zones de texte étendues
Structure et syntaxe
L'élément <textarea> permet de créer des zones de saisie multilignes, parfaites pour les messages, commentaires ou descriptions longues.
1<!-- Textarea de base -->
2<textarea name="message" id="message"></textarea>
3
4<!-- Textarea avec attributs optimisés -->
5<textarea
6 name="commentaire"
7 id="commentaire"
8 rows="5"
9 cols="50"
10 placeholder="Partagez votre expérience..."
11 required>
12</textarea>
13
14<!-- Textarea avec contenu par défaut -->
15<textarea name="description" id="description">
16Contenu par défaut qui apparaît dans la zone
17</textarea>Attributs essentiels
| Attribut | Description | Exemple |
|---|---|---|
rows | Nombre de lignes visibles | rows="4" |
cols | Nombre de colonnes visibles | cols="50" |
placeholder | Texte d'aide | placeholder="Votre message..." |
maxlength | Limite de caractères | maxlength="500" |
readonly | Lecture seule | readonly |
💡 À retenir : Utilisez
rowsetcolspour définir la taille, mais privilégiez le CSS pour un contrôle plus précis du design.
L'élément Select : listes déroulantes organisées
Syntaxe de base
1<!-- Select simple -->
2<select name="pays" id="pays">
3 <option value="">-- Choisissez un pays --</option>
4 <option value="fr">France</option>
5 <option value="be">Belgique</option>
6 <option value="ch">Suisse</option>
7 <option value="ca">Canada</option>
8</select>
9
10<!-- Select avec option présélectionnée -->
11<select name="service" id="service">
12 <option value="web">Développement Web</option>
13 <option value="mobile" selected>Applications Mobile</option>
14 <option value="design">Design Graphique</option>
15</select>Groupement avec optgroup
1<select name="region" id="region">
2 <optgroup label="Europe">
3 <option value="fr">France</option>
4 <option value="de">Allemagne</option>
5 <option value="it">Italie</option>
6 </optgroup>
7 <optgroup label="Amérique du Nord">
8 <option value="us">États-Unis</option>
9 <option value="ca">Canada</option>
10 </optgroup>
11</select>🎯 En pratique : L'attribut
selectedpermet de présélectionner une option, utile pour les valeurs par défaut ou les formulaires de modification.
Radio buttons : choix exclusifs
Principe et syntaxe
Les boutons radio permettent de faire un choix unique parmi plusieurs options. Tous les radio buttons d'un même groupe doivent avoir le même attribut name.
1<!-- Groupe de radio buttons -->
2<fieldset>
3 <legend>Type de réservation :</legend>
4
5 <input type="radio" id="dejeuner" name="repas" value="dejeuner">
6 <label for="dejeuner">Déjeuner</label>
7
8 <input type="radio" id="diner" name="repas" value="diner" checked>
9 <label for="diner">Dîner</label>
10
11 <input type="radio" id="brunch" name="repas" value="brunch">
12 <label for="brunch">Brunch</label>
13</fieldset>
14
15<!-- Style amélioré avec div -->
16<div class="radio-group">
17 <p>Taille de t-shirt :</p>
18
19 <div class="radio-item">
20 <input type="radio" id="taille-s" name="taille" value="S">
21 <label for="taille-s">Petite (S)</label>
22 </div>
23
24 <div class="radio-item">
25 <input type="radio" id="taille-m" name="taille" value="M">
26 <label for="taille-m">Moyenne (M)</label>
27 </div>
28
29 <div class="radio-item">
30 <input type="radio" id="taille-l" name="taille" value="L">
31 <label for="taille-l">Grande (L)</label>
32 </div>
33</div>⚠️ Attention : Tous les radio buttons d'un même groupe DOIVENT avoir le même attribut
namepour fonctionner correctement. Un seul choix sera possible par groupe.
Checkboxes : sélections multiples
Syntaxe et utilisation
Les cases à cocher permettent des sélections multiples indépendantes.
1<!-- Checkboxes individuelles -->
2<fieldset>
3 <legend>Préférences alimentaires :</legend>
4
5 <div class="checkbox-item">
6 <input type="checkbox" id="vegetarien" name="preferences" value="vegetarien">
7 <label for="vegetarien">Végétarien</label>
8 </div>
9
10 <div class="checkbox-item">
11 <input type="checkbox" id="vegan" name="preferences" value="vegan">
12 <label for="vegan">Vegan</label>
13 </div>
14
15 <div class="checkbox-item">
16 <input type="checkbox" id="sans-gluten" name="preferences" value="sans-gluten" checked>
17 <label for="sans-gluten">Sans gluten</label>
18 </div>
19</fieldset>
20
21<!-- Checkbox unique pour acceptation -->
22<div class="terms-checkbox">
23 <input type="checkbox" id="cgu" name="accepte_cgu" value="oui" required>
24 <label for="cgu">J'accepte les <a href="/cgu">conditions générales d'utilisation</a></label>
25</div>Le saviez-vous ?
Le premier formulaire web a été créé par Tim Berners-Lee en 1993, mais les éléments SELECT et TEXTAREA n'ont été standardisés qu'en 1995 avec HTML 2.0. Avant cela, seuls les champs texte simples existaient !
— Histoire du développement web W3C
Exemple complet : formulaire de contact restaurant
1<!DOCTYPE html>
2<html lang="fr">
3<head>
4 <meta charset="UTF-8">
5 <title>Formulaire de Contact - Restaurant</title>
6 <style>
7 .form-group {
8 margin-bottom: 20px;
9 }
10
11 label {
12 display: block;
13 font-weight: bold;
14 margin-bottom: 5px;
15 }
16
17 input, textarea, select {
18 width: 100%;
19 padding: 8px;
20 border: 2px solid #ddd;
21 border-radius: 4px;
22 font-size: 16px;
23 }
24
25 textarea {
26 resize: vertical;
27 min-height: 100px;
28 }
29
30 .radio-item, .checkbox-item {
31 margin-bottom: 10px;
32 }
33
34 .radio-item input, .checkbox-item input {
35 width: auto;
36 margin-right: 8px;
37 }
38
39 fieldset {
40 border: 1px solid #ccc;
41 padding: 15px;
42 margin-bottom: 20px;
43 border-radius: 4px;
44 }
45
46 legend {
47 font-weight: bold;
48 padding: 0 10px;
49 }
50 </style>
51</head>
52<body>
53 <form action="/contact" method="post">
54 <h2>Réservation et Contact</h2>
55
56 <!-- Champs de base -->
57 <div class="form-group">
58 <label for="nom">Nom complet :</label>
59 <input type="text" id="nom" name="nom" required>
60 </div>
61
62 <div class="form-group">
63 <label for="email">Email :</label>
64 <input type="email" id="email" name="email" required>
65 </div>
66
67 <!-- Select pour le service -->
68 <div class="form-group">
69 <label for="service">Type de demande :</label>
70 <select name="service" id="service" required>
71 <option value="">-- Sélectionnez un service --</option>
72 <option value="reservation">Réservation</option>
73 <option value="evenement">Événement privé</option>
74 <option value="traiteur">Service traiteur</option>
75 <option value="autre">Autre demande</option>
76 </select>
77 </div>
78
79 <!-- Radio buttons pour le type de repas -->
80 <fieldset>
81 <legend>Type de repas souhaité :</legend>
82
83 <div class="radio-item">
84 <input type="radio" id="dejeuner" name="repas" value="dejeuner">
85 <label for="dejeuner">Déjeuner (12h-14h)</label>
86 </div>
87
88 <div class="radio-item">
89 <input type="radio" id="diner" name="repas" value="diner">
90 <label for="diner">Dîner (19h-22h)</label>
91 </div>
92
93 <div class="radio-item">
94 <input type="radio" id="brunch" name="repas" value="brunch">
95 <label for="brunch">Brunch weekend (10h-15h)</label>
96 </div>
97 </fieldset>
98
99 <!-- Checkboxes pour les préférences -->
100 <fieldset>
101 <legend>Préférences alimentaires (optionnel) :</legend>
102
103 <div class="checkbox-item">
104 <input type="checkbox" id="vegetarien" name="preferences[]" value="vegetarien">
105 <label for="vegetarien">Plats végétariens</label>
106 </div>
107
108 <div class="checkbox-item">
109 <input type="checkbox" id="vegan" name="preferences[]" value="vegan">
110 <label for="vegan">Plats vegans</label>
111 </div>
112
113 <div class="checkbox-item">
114 <input type="checkbox" id="sans-gluten" name="preferences[]" value="sans-gluten">
115 <label for="sans-gluten">Sans gluten</label>
116 </div>
117
118 <div class="checkbox-item">
119 <input type="checkbox" id="enfant" name="preferences[]" value="enfant">
120 <label for="enfant">Menu enfant</label>
121 </div>
122 </fieldset>
123
124 <!-- Textarea pour le message -->
125 <div class="form-group">
126 <label for="message">Message ou demandes spéciales :</label>
127 <textarea
128 name="message"
129 id="message"
130 rows="5"
131 placeholder="Décrivez votre demande, le nombre de personnes, la date souhaitée, ou toute information importante..."
132 maxlength="1000">
133 </textarea>
134 </div>
135
136 <!-- Checkbox obligatoire -->
137 <div class="checkbox-item">
138 <input type="checkbox" id="newsletter" name="newsletter" value="oui">
139 <label for="newsletter">Je souhaite recevoir les actualités du restaurant</label>
140 </div>
141
142 <div class="checkbox-item">
143 <input type="checkbox" id="cgu" name="accepte_cgu" value="oui" required>
144 <label for="cgu">J'accepte les conditions d'utilisation *</label>
145 </div>
146
147 <button type="submit">Envoyer la demande</button>
148 </form>
149</body>
150</html>Points clés à retenir
💡 À retenir : L'attribut
nameest crucial pour le traitement des données : même nom pour les radio buttons d'un groupe, noms différents pour les checkboxes indépendantes.
⚠️ Attention : Toujours associer un
<label>à chaque élément de formulaire avec l'attributforcorrespondant à l'idde l'élément pour l'accessibilité.
🎯 En pratique : Utilisez
<fieldset>et<legend>pour regrouper visuellement et sémantiquement les éléments liés, particulièrement pour les radio buttons et checkboxes.
Bonnes pratiques de conception
Tableau récapitulatif des cas d'usage
| Élément | Cas d'usage | Avantages | Points d'attention |
|---|---|---|---|
| Textarea | Messages longs, commentaires, descriptions | Texte multiligne, redimensionnable | Limiter la taille (maxlength) |
| Select | Listes longues, pays, catégories | Économise l'espace, organisé | Option vide par défaut |
| Radio | Choix unique obligatoire (taille, genre) | Toutes options visibles | Même attribut name |
| Checkbox | Sélections multiples, acceptations | Flexibilité, indépendance | Noms distincts |