Lecture libre, sans compteChapitre 6 · Les formulaires HTML

Éléments avancés de formulaire

~2 min de lectureLeçon 19 sur 22Apprendre le HTML - Bases solides pour débutants

Éléments avancés de formulaire

En bref
  • 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

Chargement du diagramme...

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.

html
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

AttributDescriptionExemple
rowsNombre de lignes visiblesrows="4"
colsNombre de colonnes visiblescols="50"
placeholderTexte d'aideplaceholder="Votre message..."
maxlengthLimite de caractèresmaxlength="500"
readonlyLecture seulereadonly

💡 À retenir : Utilisez rows et cols pour 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

html
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

html
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 selected permet 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.

html
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 name pour 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.

html
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

html
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 name est 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'attribut for correspondant à l'id de 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émentCas d'usageAvantagesPoints d'attention
TextareaMessages longs, commentaires, descriptionsTexte multiligne, redimensionnableLimiter la taille (maxlength)
SelectListes longues, pays, catégoriesÉconomise l'espace, organiséOption vide par défaut
RadioChoix unique obligatoire (taille, genre)Toutes options visiblesMême attribut name
CheckboxSélections multiples, acceptationsFlexibilité, indépendanceNoms distincts