Formulaires, tableaux et médias en HTML
DébutantUnité 3 sur 8 de la formation Formation : HTML et CSS : création et publication de sites web
Ce que tu vas apprendre
- Crée un formulaire, choisis un contrôle adapté à chaque information, associe une étiquette à chaque contrôle et comprends exactement ce que le navigateur envoie lors de la soumission du formulaire.
- Crée un formulaire et comprends les données qu’il envoieUtilise l’élément form, les noms et les valeurs, les boutons d’envoi et les attributs action et method pour déterminer quelles données quittent la page et où elles vont.
- Choisis des types de champs adaptés aux donnéesChoisis le type de champ qui correspond à chaque information pour que les navigateurs proposent le clavier ou le sélecteur adapté et vérifient le format de base.
- Utilise des zones de texte multiligne, des listes déroulantes et d’autres contrôlesRecueille des textes plus longs, propose des listes de choix fixes et des suggestions de saisie, et affiche une progression ou des mesures avec textarea, select, datalist, progress et meter.
- Associe une étiquette à chaque contrôle et regroupe les contrôles liésAssocie les étiquettes visibles à leurs contrôles, regroupe les contrôles liés avec fieldset et legend, et ajoute des consignes et des indications de remplissage automatique pour que chacun puisse remplir le formulaire.
- Crée un formulaire et comprends les données qu’il envoie
- Utilise les attributs de validation HTML pour que le navigateur repère les valeurs manquantes, trop longues, hors limites ou mal formatées avant l’envoi du formulaire, et comprends les limites de cette vérification.
- Rends des champs obligatoires et limite la longueur du texteUtilise required, minlength et maxlength, et prévois quand le navigateur accepte ou bloque une soumission.
- Définis les bornes et les pas pour les nombres, les dates et les heuresUtilise min, max et step pour n’accepter que des valeurs pertinentes et prévois quelles valeurs seront acceptées.
- Vérifie les formats avec des expressions régulières et fournis des messages utilesÉcris des règles de format simples, explique-les aux utilisateurs, mets en forme les champs valides et invalides et comprends pourquoi le serveur doit vérifier à nouveau les données.
- Rends des champs obligatoires et limite la longueur du texte
- Balise les données tabulaires avec des lignes, des cellules, des en-têtes et un titre, et garde les tableaux plus grands compréhensibles grâce aux portées des en-têtes, aux groupes de lignes et de colonnes et aux cellules fusionnées.
- Crée un tableau de données avec des en-têtes et un titreUtilise table, tr, th, td et caption pour présenter des données en lignes et en colonnes, et donne au tableau une structure claire grâce aux portées des en-têtes et aux groupes de lignes.
- Fusionne les cellules et associe les en-têtes complexes aux donnéesUtilise correctement colspan et rowspan, regroupe les colonnes et associe les cellules à leurs en-têtes lorsqu’un tableau comporte plusieurs niveaux d’en-têtes.
- Crée un tableau de données avec des en-têtes et un titre
- Intègre du son et de la vidéo avec les lecteurs du navigateur, fournis des formats et des contenus de repli qui fonctionnent dans les différents navigateurs, et rends les médias utilisables par tous grâce aux sous-titres pour sourds et malentendants, aux sous-titres et aux transcriptions textuelles.
- Intègre du son et de la vidéo avec les attributs adaptésUtilise les éléments audio et video avec des commandes de lecture, des dimensions, une image d’affiche et des indications de chargement, et détermine quand la lecture automatique et la lecture en boucle sont appropriées.
- Propose des formats et des solutions de repli qui fonctionnent partoutChoisis des formats de fichiers largement pris en charge, énumère les sources de remplacement dans l’ordre et ajoute du contenu de repli.
- Ajoute des sous-titres pour sourds et malentendants, des sous-titres et des transcriptions textuellesÉcris un fichier WebVTT simple, associe-le avec l’élément track et fournis des transcriptions textuelles pour que les médias soient utilisables sans son.
- Intègre du son et de la vidéo avec les attributs adaptés
- Place des cartes, des vidéos et d’autres pages web dans ta propre page avec des iframes, et choisis des réglages qui rendent chaque contenu intégré accessible, rapide, respectueux de la vie privée et sécurisé.
- Intègre une page avec un élément iframeAjoute un iframe avec un titre, des dimensions et un chargement différé, adapte un code d’intégration provenant d’un autre site et reconnais les sites qui n’autorisent pas l’intégration.
- Sécurise les contenus intégrés, protège la vie privée et choisis l’élément adaptéLimite les actions autorisées à une page intégrée avec sandbox et allow, réfléchis aux informations sur les visiteurs que les contenus intégrés partagent et choisis entre iframe, embed, object et les éléments multimédias.
- Intègre une page avec un élément iframe
Formulaires HTML : cours
1Crée des formulaires faciles à utiliser
Un formulaire utile part des informations que les personnes doivent saisir. Choisis des contrôles adaptés à ces informations, donne à chacun une étiquette claire et associe les contrôles à un formulaire qui envoie des noms et des valeurs explicites. Un champ de recherche, un formulaire de message et un envoi de fichier recueillent tous des saisies, mais nécessitent des réglages différents. Lire le HTML en suivant le parcours de la saisie de l’utilisateur jusqu’à la requête envoyée facilite la vérification de ces choix.
1.1 Comment un formulaire envoie des noms et des valeurs
Un formulaire recueille des réponses liées et les envoie à une URL. L’élément <form> entoure ses contrôles et son bouton d’envoi. Garde les formulaires distincts séparés : HTML n’autorise pas un formulaire à l’intérieur d’un autre.
Choisir la destination et la méthode
action indique l’URL destinataire. Sans cet attribut, la requête va à la page courante. method choisit comment le navigateur envoie les données ; la méthode par défaut est GET.
| Méthode | Destination des données | Utilisation courante |
|---|---|---|
| GET | Dans l’URL après un point d’interrogation | Recherches et filtres |
| POST | Dans le corps de la requête | Messages, inscriptions et modifications de données stockées |
Les données GET peuvent apparaître dans l’historique, les favoris et les journaux du serveur. POST ne les place pas dans la chaîne de requête, mais ne les chiffre pas. Utilise HTTPS pour protéger les données pendant leur transfert. Le programme sur le serveur reçoit et traite la requête ; le formulaire HTML n’enregistre pas et n’envoie pas lui-même les réponses par e-mail.
Suivre une requête de recherche
<form action="/search" method="get">
<label for="query">Search</label>
<input id="query" type="search" name="q">
<label for="language">Language</label>
<select id="language" name="lang">
<option value="en">English</option>
</select>
<button type="submit">Search</button>
</form>
Si l’utilisateur saisit « html tables », le navigateur demande /search?q=html+tables&lang=en. Il prend le nom du champ q et sa valeur actuelle, encode l’espace par + et relie les deux paires avec &. Le ? marque le début de la chaîne de requête.
Un contrôle a besoin d’un name pour envoyer des données. Son id a un autre rôle : identifier l’élément sur la page, notamment pour lui associer une étiquette. Un champ avec id="query" mais sans name peut sembler fonctionner normalement sans envoyer de réponse dans la requête.
Savoir quels contrôles envoient des données
Un champ de texte vide qui a un nom envoie une valeur vide, comme comment=. Une case cochée envoie sa value ; sans valeur, elle envoie on. Une case non cochée n’envoie rien. Un contrôle désactivé est inutilisable et omis. Un champ readonly qui prend en charge cet attribut ne peut pas être modifié, mais envoie tout de même sa valeur.
Un champ caché, comme <input type="hidden" name="source" value="newsletter">, envoie une valeur sans contrôle visible. Cette valeur n’est pas secrète : les visiteurs peuvent l’inspecter et la modifier dans les outils de développement.
Préciser le comportement des boutons
Dans un formulaire, un <button> ordinaire soumet le formulaire par défaut. Écris type="submit" pour le bouton d’envoi et type="button" pour un bouton qui nécessite un script. type="reset" rétablit les valeurs initiales et peut effacer le travail d’un utilisateur. Appuyer sur Entrée dans un champ sur une ligne soumet aussi souvent le formulaire. <input type="submit" value="Send"> est un autre contrôle d’envoi ; un <button> peut aussi contenir du contenu en ligne comme une icône.
Envoyer le contenu d’un fichier
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="attachment">Attachment</label>
<input id="attachment" type="file" name="attachment">
<button type="submit">Upload</button>
</form>
POST et enctype="multipart/form-data" sont tous deux nécessaires pour un envoi de fichier ordinaire. Avec l’encodage par défaut du formulaire, les noms des fichiers sont envoyés sous forme de texte, mais pas leur contenu.
Points clés
- Le
named’un contrôle identifie la valeur envoyée ; sonididentifie l’élément sur la page. - GET place les paires dans l’URL ; POST les place dans le corps de la requête. HTTPS chiffre les données pendant leur transfert.
- Les cases non cochées et les contrôles désactivés sont omis ; les champs en lecture seule qui prennent en charge cet état sont envoyés.
- Précise les types des boutons pour éviter toute soumission ou réinitialisation accidentelle.
- L’envoi de fichiers nécessite POST et
multipart/form-data.
1.2 Les types de champs et les valeurs qu’ils recueillent
Un <input> est un élément vide : il n’a donc ni contenu ni balise de fermeture. Son type choisit le contrôle et l’aide fournie par le navigateur. Les types absents ou non reconnus produisent un champ de texte.
Adapter le texte à sa fonction
| Type | Utilisation | Aide du navigateur |
|---|---|---|
text | Une ligne de texte libre | Saisie de texte générale |
search | Une requête de recherche | Peut comporter un bouton d’effacement |
email | Une adresse e-mail | Clavier pour e-mail et vérification de la syntaxe |
url | Une adresse web complète | Clavier pour URL et vérification de la syntaxe |
tel | Un numéro de téléphone | Clavier téléphonique ; aucune vérification du format |
password | Un mot de passe | Masque les caractères visibles |
Un champ d’e-mail vérifie la syntaxe, mais pas l’existence d’une boîte mail. Même « ana@example » passe la vérification de syntaxe de base. Ajoute multiple pour accepter une liste d’adresses séparées par des virgules. Un champ d’URL attend un schéma d’URL : « https://example.com » est accepté, mais pas « example.com ». Les formats de téléphone varient, donc tel n’impose aucune règle de format. Le masquage du mot de passe empêche les personnes à proximité de le lire à l’écran ; HTTPS assure toujours le chiffrement pendant la transmission.
Distinguer les quantités des codes composés de chiffres
Utilise number pour une quantité, comme un nombre d’éléments ou une masse. Ce type comporte souvent des boutons pour augmenter ou diminuer la valeur. Utilise range pour un réglage approximatif comme le volume ; son intervalle par défaut va de 0 à 100 et sa valeur par défaut est 50.
Un code d’adhérent n’est pas une quantité. Utilise <input type="text" inputmode="numeric"> pour un code composé de chiffres afin que les zéros initiaux restent du texte et que les boutons d’incrémentation ne le modifient pas. inputmode suggère seulement un clavier à l’écran : il ne valide pas la saisie. decimal, tel, email et url sont d’autres indications utiles pour le clavier.
Distinguer les formats affichés des formats envoyés
Les sélecteurs de date suivent les paramètres régionaux de l’utilisateur. Le 15 mars 2026 peut apparaître sous la forme « 03/15/2026 » ou « 15/03/2026 », mais la date envoyée est 2026-03-15.
| Type | Exemple de valeur envoyée |
|---|---|
date | 2026-03-15 |
time | 14:30 |
datetime-local | 2026-03-15T14:30 |
month | 2026-03 |
week | 2026-W11 |
Ces contrôles ne stockent pas de fuseau horaire. Il faut donc préciser séparément le lieu ou le fuseau d’un rendez-vous à une heure locale lorsque cela compte.
Proposer des choix indépendants ou un choix unique
Les cases à cocher sont indépendantes : plusieurs peuvent être cochées. Les boutons radio forment un groupe à choix unique lorsque leurs valeurs name correspondent. Donne à chaque bouton radio une value distincte et utilise checked pour un choix par défaut.
<label><input type="radio" name="size" value="S"> Small</label>
<label><input type="radio" name="size" value="M" checked> Medium</label>
<label><input type="radio" name="size" value="L"> Large</label>
La sélection par défaut envoie size=M. Des noms différents créeraient des groupes distincts et permettraient plusieurs sélections.
Choisir des couleurs et des fichiers
color fournit un sélecteur et peut envoyer une couleur RVB comme #ff8800. file ouvre un sélecteur de fichiers ; accept=".pdf,image/*" suggère les PDF et les images, et multiple autorise plusieurs fichiers. Le filtre aide les utilisateurs à choisir ; le serveur doit tout de même vérifier le type et le contenu du fichier reçu. Pour les contrôles qui l’utilisent, value définit la valeur initiale, qui reste la valeur envoyée si l’utilisateur ne fait aucun changement.
Points clés
- Choisis un type selon le sens des données, pas seulement selon son apparence.
- Les types d’e-mail et d’URL vérifient la syntaxe ;
teletinputmodene le font pas. - Pour les codes composés de chiffres, utilise un champ de texte avec une indication de clavier numérique.
- L’affichage des dates et des heures varie selon les paramètres régionaux ; les formats envoyés sont fixes et ne contiennent pas de fuseau horaire.
- Les boutons radio partagent un nom pour permettre un seul choix ; les cases à cocher permettent des choix indépendants.
- Le filtre
acceptd’un sélecteur de fichiers n’est pas une vérification de sécurité.
1.3 Réponses longues, choix fixes et suggestions
Un champ sur une ligne ne convient pas à toutes les réponses. Un texte plus long nécessite de l’espace, tandis qu’un ensemble de choix fixes nécessite des contrôles qui montrent ce qui est autorisé. Avant de choisir l’élément, décide si l’utilisateur peut saisir autre chose que les choix proposés.
Prévoir une zone pour les textes plus longs
<label for="message">Message</label>
<textarea id="message" name="message" rows="5" cols="40"></textarea>
rows indique le nombre de lignes visibles et cols la largeur approximative en caractères. Aucun des deux ne limite la quantité de texte saisissable ; utilise maxlength pour limiter la longueur. Le texte initial se place entre les balises, et non dans un attribut value. Les espaces et les sauts de ligne à cet endroit font partie de la valeur initiale : des balises d’ouverture et de fermeture adjacentes produisent donc une zone vraiment vide.
Envoyer une valeur depuis une liste déroulante
<label for="delivery">Delivery</label>
<select id="delivery" name="delivery" required>
<option value="">Choose delivery</option>
<option value="standard">Standard (3–5 days)</option>
<option value="express">Express (next day)</option>
</select>
Choisir « Express (next day) » envoie delivery=express. Le texte visible peut expliquer un choix tandis que sa value reste courte et stable. Si une option n’a pas de value, son texte est envoyé. Ajoute selected pour présélectionner une option. Ici, la première option a une valeur vide : la liste à choix unique obligatoire ne peut donc pas être soumise tant que l’utilisateur n’a pas choisi un mode de livraison.
Regrouper ou autoriser plusieurs options
Un <optgroup label="Hot drinks"> donne un titre à des options liées. Ce titre n’est pas lui-même un choix. Un élément select avec multiple permet de sélectionner plusieurs options, et size définit ses lignes visibles. Chaque valeur sélectionnée devient une paire distincte avec le même nom : topics=html&topics=css.
Sur ordinateur, la sélection multiple nécessite souvent un Ctrl-clic ou un Cmd-clic. Pour une courte liste de choix indépendants, les cases à cocher rendent généralement la sélection plus claire. Pour une courte liste à choix unique, les boutons radio gardent toutes les options visibles. Un élément select convient bien à une longue liste fixe.
Suggérer sans restreindre
<label for="city">City</label>
<input id="city" name="city" list="cities">
<datalist id="cities">
<option value="Nairobi">
<option value="Osaka">
</datalist>
Le list du champ correspond à l’id de la liste de suggestions. Les utilisateurs voient des suggestions mais peuvent toujours saisir une autre ville. Une liste de suggestions est donc utile pour les réponses courantes à une question ouverte. Remplacer un élément select par une liste de suggestions modifie les choix acceptés ; cela ne change pas simplement l’apparence d’une même liste fixe.
Afficher une progression ou une mesure
<progress> et <meter> affichent des valeurs au lieu de recueillir des réponses. Un indicateur de progression suit l’avancement d’une tâche, comme <progress value="70" max="100">70%</progress>. Une jauge affiche une mesure dans un intervalle connu : <meter value="0.6">60%</meter> peut représenter l’espace de stockage utilisé. Par défaut, une jauge va de 0 à 1, sauf si min et max modifient cet intervalle. Le texte à l’intérieur de ces éléments fournit un contenu de repli lorsque la barre ne peut pas être dessinée. Garde une étiquette explicative à côté de chacun de ces affichages pour que les utilisateurs sachent ce que mesure le nombre.
Points clés
- La valeur initiale d’une zone de texte multiligne est son contenu ;
rowsetcolsdéfinissent seulement sa taille visible. - Un élément select envoie les valeurs des options sélectionnées et peut imposer un choix fixe.
- Une liste de suggestions propose des réponses mais autorise un autre texte.
- Utilise progress pour l’avancement d’une tâche et meter pour une mesure dans un intervalle connu.
1.4 Étiquettes visibles et consignes utiles pour les formulaires
Un champ a besoin d’un nom qui reste visible pendant que l’utilisateur le remplit. Un <label> associé donne aussi au contrôle un nom accessible pour les lecteurs d’écran et fait de son texte une cible cliquable plus grande. Les consignes expliquent les règles que l’étiquette seule ne peut pas transmettre.
Associer l’étiquette au contrôle
<label for="email">Email address</label>
<input id="email" name="email" type="email" autocomplete="email">
Le for de l’étiquette correspond à l’id du champ, casse comprise. Le name sert à l’envoi et n’a pas besoin d’être identique. Chaque id doit être unique sur la page. Si for="email" pointe vers un name mais qu’aucun id ne correspond, l’étiquette semble normale mais n’est pas associée au champ.
Une autre possibilité consiste à placer le champ dans l’étiquette :
<label>
<input type="checkbox" name="news">
Send me the monthly newsletter
</label>
Cette association implicite est utile pour une courte étiquette de case à cocher. Une paire explicite for et id fonctionne aussi lorsque l’étiquette et le contrôle sont séparés dans le HTML.
Distinguer les étiquettes des exemples
Un texte indicatif comme « name@example.com » disparaît dès que la saisie commence. Il peut aussi être difficile à lire et ne constitue pas un nom accessible fiable. Garde l’étiquette visible ; utilise le texte indicatif uniquement comme court exemple lorsqu’il est utile.
Indique les champs obligatoires avec des mots, comme « Nom (obligatoire) », ou explique un astérisque une fois au-dessus du formulaire. La couleur seule ne permet pas à tout le monde de savoir ce qui est obligatoire. Explique un format avant que les utilisateurs essaient de soumettre leur réponse.
<label for="pw">Password (required)</label>
<input id="pw" name="password" type="password"
required minlength="8" aria-describedby="pw-hint">
<p id="pw-hint">Use at least 8 characters.</p>
aria-describedby pointe vers l’id de l’aide. Il ajoute la consigne comme description après le nom du champ ; il ne remplace pas l’étiquette.
Nommer un groupe de contrôles
<fieldset>
<legend>Delivery speed</legend>
<label><input type="radio" name="speed" value="standard"> Standard</label>
<label><input type="radio" name="speed" value="express"> Express</label>
<label><input type="radio" name="speed" value="pickup"> Pickup</label>
</fieldset>
La légende donne la question commune ; chaque étiquette nomme une réponse. Un groupe de champs peut aussi réunir des champs d’adresse liés. Place la légende en premier. disabled sur un groupe de champs désactive ses contrôles descendants, sauf ceux situés dans sa première légende. Garde les contrôles de formulaire ordinaires hors de la légende pour éviter les surprises dues à cette exception.
Aider les navigateurs à remplir les informations connues
autocomplete décrit la finalité des informations concernant l’utilisateur. Ses valeurs comprennent name, email, tel, street-address, postal-code, country-name, bday, new-password, current-password et one-time-code. Des finalités exactes facilitent la saisie à partir de données enregistrées et contribuent au respect du critère 1.3.5 des WCAG 2.2, Identifier la finalité de la saisie (AA). autocomplete="off" est une demande ; les navigateurs peuvent tout de même proposer des mots de passe enregistrés.
Pour un champ de téléphone facultatif, utilise l’étiquette « Numéro de téléphone (facultatif) » avec type="tel", name="phone" et autocomplete="tel". Clique sur son étiquette pour vérifier le focus, puis parcours le formulaire avec Tabulation. Teste ainsi chaque étiquette, y compris celles des cases à cocher et des boutons radio.
Points clés
- Une étiquette visible doit être réellement associée à son contrôle.
forcorrespond à unidunique ; l’envoi utilisename.- Une légende nomme un groupe de champs, tandis que les étiquettes nomment ses différents contrôles.
- Associe les aides visibles avec
aria-describedbyet indique les champs obligatoires par du texte. - Indique des finalités exactes pour le remplissage automatique et vérifie le formulaire avec des clics et au clavier.
2Vérifie les réponses avant la soumission
Le navigateur peut repérer les réponses manquantes, les textes de longueur incorrecte, les valeurs hors d’un intervalle et les saisies qui ne respectent pas un format fixe. Ces vérifications reposent d’abord sur le type de champ et les attributs HTML. Examine comment plusieurs règles se combinent, y compris les cas où une valeur vide est autorisée. Des consignes claires aident les utilisateurs à corriger leur saisie ; les vérifications côté serveur restent nécessaires, car les règles du navigateur peuvent être contournées.
2.1 Champs obligatoires et longueur du texte
La validation intégrée vérifie les contrôles d’un formulaire lorsque l’utilisateur le soumet. Un contrôle invalide bloque la soumission ; le navigateur donne le focus au premier champ invalide et fournit un message dans sa propre langue. Le texte exact est choisi par le navigateur. Pour le modifier, il faut utiliser JavaScript.
Exiger une réponse
required signifie qu’un contrôle doit avoir une valeur. Pour un champ de texte, une chaîne vide est refusée. Sur une case à cocher, required signifie que cette case précise doit être cochée, comme pour accepter des conditions. Pour des boutons radio de même nom, placer required sur l’un d’eux signifie qu’un bouton du groupe doit être sélectionné. Une liste à choix unique obligatoire avec une première option vide nécessite la sélection d’une option non vide.
<label for="username">Username (required)</label>
<input id="username" name="username"
required minlength="4" maxlength="12">
Le navigateur combine ces règles. Le champ doit contenir une réponse, et le texte saisi par l’utilisateur doit respecter les limites de longueur. Omettre type produit un champ de texte ordinaire.
Compter les caractères saisis
minlength définit la longueur minimale autorisée et maxlength la longueur maximale. Les espaces et la ponctuation comptent. La longueur est mesurée en unités de code UTF-16 : certains émojis comptent donc pour deux ; les lettres latines ordinaires comptent chacune pour un.
Dans cet exemple, « Li » comporte deux caractères et ne satisfait pas au minimum. « Lina » en comporte quatre et est accepté. « mountainhiker » comporte 13 caractères. Lors d’une saisie ordinaire, le navigateur s’arrête après le douzième, laissant « mountainhike ». La largeur d’une zone de texte ne définit pas cette limite.
Distinguer les règles de présence et de longueur
Un champ facultatif avec minlength="4" peut être vide. La longueur minimale est vérifiée dès que l’utilisateur fournit une valeur. Ajouter required fait aussi échouer une saisie vide. Cela compte pour un pseudonyme facultatif : l’utilisateur peut l’omettre, mais un pseudonyme fourni doit tout de même comporter suffisamment de caractères.
required est un attribut booléen. Sa présence l’active, y compris avec required="false". Pour rendre le champ facultatif, supprime l’attribut. La même règle de présence s’applique à de nombreux autres attributs HTML qui activent une fonction.
Comprendre ce que ces vérifications ne décident pas
Une chaîne d’espaces constitue tout de même du contenu dans un champ de texte. required l’accepte donc, et les espaces comptent aussi dans la longueur. Une règle exigeant un caractère visible nécessite un motif adapté ou une vérification côté serveur. N’indique pas aux utilisateurs que required seul garantit une réponse qui a un sens.
Les contraintes de longueur dépendent aussi de la manière dont la valeur a été saisie. Une valeur initiale écrite dans le HTML, ou affectée par un script, n’est pas signalée par minlength ou maxlength simplement parce qu’elle est trop courte ou trop longue. Une valeur par défaut correcte reste importante même lorsque la saisie ordinaire est limitée.
Pour vérifier ce champ, essaie une soumission vide, puis saisis deux lettres, quatre lettres et plus de 12 lettres. Chaque essai isole une règle différente. Lorsque le navigateur arrête la saisie à la limite, lis la valeur effectivement présente dans le champ au lieu de supposer que toute la saisie tentée a été acceptée.
Points clés
requiredet les limites de longueur répondent à des problèmes différents.- Les attributs booléens restent activés même lorsqu’ils sont écrits avec la valeur
"false". - Les espaces comptent comme du contenu ; certains émojis utilisent deux unités de code UTF-16.
- Un bouton radio obligatoire impose une sélection dans son groupe de même nom.
2.2 Bornes et pas autorisés
Une valeur numérique ou une date peut avoir le bon format tout en étant inadaptée. min et max définissent ses bornes ; step définit les incréments autorisés entre elles. Un nombre doit satisfaire aux deux vérifications.
Définir l’intervalle
<label for="weight">Parcel weight (kg)</label>
<input id="weight" name="weight" type="number"
min="0.5" max="30" step="0.5">
Les bornes sont incluses. Les valeurs de 0,5 à 30 kg sont dans l’intervalle, mais elles doivent aussi correspondre à des pas d’un demi-kilogramme. En partant de 0,5, on obtient 0,5, 1, 1,5 et ainsi de suite jusqu’à 30 : 60 valeurs autorisées. Une saisie de 31 dépasse le maximum ; 2,25 est dans l’intervalle mais ne respecte pas le pas.
Trouver le point de départ avant de compter
Les pas sont comptés à partir de min lorsqu’il est présent. Sinon, ils sont comptés à partir d’un attribut HTML value valide, puis à défaut à partir de la base par défaut du type. Pour number, cette base par défaut est 0. Le pas par défaut est 1.
Avec min="1" step="2", les valeurs acceptées sont 1, 3, 5, 7 et ainsi de suite. Quatre est refusé bien qu’il soit un multiple de deux, car la suite commence à un. Avec min="0.5" et sans attribut de pas, le pas reste de un : 0,5, 1,5 et 2,5 sont acceptés, mais pas 1 ni 2.
Si ni min ni un attribut value ne fournit une base différente, un champ numérique par défaut accepte les nombres entiers. Utilise step="0.01" pour des incréments d’un centième ou step="any" pour supprimer la vérification du pas. any ne supprime ni le minimum ni le maximum.
Utiliser les bonnes unités pour les dates et les heures
| Type | Pas par défaut | Exemple de borne |
|---|---|---|
number ou range | 1 | max="30" |
date | 1 jour | min="2026-06-01" |
time | 60 secondes | max="17:00" |
Un champ de date avec min="2026-06-01" max="2026-08-31" accepte les dates de cet intervalle, bornes comprises. Écris les attributs dans le format envoyé, même si le sélecteur affiche la date dans un autre ordre.
Pour les rendez-vous, type="time" min="09:00" max="17:00" step="900" utilise 900 secondes, soit 15 minutes, par pas. La suite commence à 09 h 00 et se termine à 17 h 00. Il y a 32 intervalles et 33 heures sélectionnables, les deux bornes comprises.
Distinguer la saisie de la valeur stockée
Certains navigateurs configurés pour une langue donnée autorisent la saisie décimale "2,5" mais envoient 2.5. Selon le navigateur, un texte qui n’est pas un nombre est bloqué ou laisse la valeur numérique vide. Un champ vide facultatif reste autorisé en l’absence de required.
Un curseur range reste dans son intervalle autorisé et se cale sur les pas : les utilisateurs ne rencontrent donc pas les mêmes erreurs de borne et de pas qu’avec un nombre saisi. Par ailleurs, les champs email et url non vides subissent des vérifications de type même sans required : rendre une réponse facultative ne rend pas valide une réponse fournie au mauvais format.
Points clés
- Vérifie séparément les bornes et le respect du pas.
- Cherche la base du pas dans cet ordre :
min,valuedans le HTML, puis la base par défaut du type. step="any"supprime la vérification du pas mais conserve les autres contraintes.- Les pas horaires sont en secondes ; les pas de date sont en jours.
- Compte les deux bornes pour trouver le nombre d’heures autorisées.
2.3 Motifs fixes et messages utiles
Un motif est utile lorsqu’une organisation définit un format de texte exact, comme un code produit. Le navigateur vérifie la valeur non vide dans son ensemble par rapport au motif. Explique le format à côté du champ pour que les utilisateurs puissent le respecter avant qu’une erreur apparaisse.
Construire un petit motif
<label for="code">Product code (required)</label>
<input id="code" name="code" required
pattern="[A-Z]{3}-[0-9]{4}" aria-describedby="code-hint">
<p id="code-hint">Use 3 capital letters, a hyphen, and 4 digits (ABC-1234).</p>
[A-Z] correspond à une lettre latine majuscule et {3} la répète exactement trois fois. Le trait d’union hors des groupes de caractères est littéral. [0-9]{4} exige quatre chiffres. « ABC-1234 » est accepté. « abc-1234 », « ABC1234 » et « ABC-12345 » ne respectent chacun pas une partie différente de la règle.
| Partie du motif | Signification |
|---|---|
[A-Za-z] | Une lettre latine de base |
{2,5} | Deux à cinq répétitions |
+ | Une ou plusieurs répétitions |
? | Élément précédent facultatif |
(cm|mm) | L’une des deux possibilités, cm ou mm |
Les motifs sont comparés à la valeur entière : tout texte supplémentaire au début ou à la fin est donc refusé. N’ajoute pas les barres obliques qui entourent les expressions régulières en JavaScript. pattern s’applique aux champs apparentés au texte comme text, search, tel, email, url et password, mais pas à une zone de texte multiligne. Les valeurs vides échappent à la vérification du motif ; required prend en charge l’absence de réponse.
Écrire soigneusement la ponctuation littérale
Les caractères comme ., + et ? ont des significations particulières. Fais-les précéder d’une barre oblique inverse lorsqu’ils doivent apparaître littéralement : \. correspond à un point. Dans un groupe de caractères, les motifs HTML modernes exigent aussi une barre oblique inverse devant des signes de ponctuation comme un trait d’union littéral : [a-z0-9\-]. Ce trait d’union diffère de celui qui définit l’intervalle a-z.
Un motif invalide est ignoré. Les autres règles, dont required et les vérifications de type, continuent de s’appliquer. Teste un motif avec des saisies qui doivent être acceptées et d’autres qui doivent être refusées ; un formulaire qui envoie une valeur attendue n’a pas encore montré que le motif refuse quoi que ce soit.
Expliquer la règle et l’erreur
Garde une aide visible à côté du contrôle. Un title peut contribuer à certains messages du navigateur ; garde la consigne de format visible à côté du champ. Évite les motifs rigides pour les noms, les téléphones ou les codes postaux, sauf si le format accepté est réellement fixe ; les réponses valides de différents pays peuvent beaucoup varier.
CSS propose :valid et :invalid pour l’état de validation actuel d’un champ. :user-invalid retarde l’état invalide jusqu’à une interaction de l’utilisateur, ce qui évite qu’un formulaire encore vierge soit couvert de marques d’erreur. Associe les couleurs à des mots ou à une icône pour que la distinction reste visible sans perception des couleurs.
Décider quand les vérifications s’exécutent
novalidate sur le formulaire ignore la validation du navigateur lors de la soumission. formnovalidate sur un bouton d’envoi l’ignore pour ce bouton, ce qui peut permettre d’ajouter « Enregistrer le brouillon » à côté d’un bouton « Envoyer » ordinaire. Les vérifications du navigateur peuvent aussi être supprimées par les outils de développement ou contournées par une requête directe. Le serveur doit vérifier à nouveau les données reçues avant de leur faire confiance.
Points clés
- Un motif vérifie la valeur non vide dans son ensemble ;
requiredprend en charge l’absence de réponse. - Vérifie les codes fixes d’une organisation avec des motifs et explique leur format de manière visible.
- Un motif mal formé est ignoré tandis que les autres contraintes continuent de s’appliquer.
- Mets en forme les états de validation en utilisant plus que la couleur seule.
- La possibilité d’ignorer ou de contourner une vérification du navigateur rend essentielle la validation côté serveur.
formnovalidateagit sur un bouton d’envoi ;novalidateagit sur le formulaire.
3Crée des tableaux qui expliquent leurs données
Une cellule de données prend son sens grâce à sa ligne et à sa colonne. Les tableaux HTML permettent d’exprimer ces relations afin que chacun puisse lire une valeur avec les en-têtes qui l’expliquent. Commence par un titre et des en-têtes simples, puis ajoute des groupes de lignes ou des cellules fusionnées uniquement si les données le nécessitent. Compter les cases de la grille et associer chaque valeur à ses en-têtes permet de garder le tableau utile aussi bien à la lecture à voix haute qu’à l’écran.
3.1 Lignes, en-têtes et titre clair pour le tableau
Utilise un tableau lorsqu’une valeur dépend à la fois de sa ligne et de sa colonne : un carnet d’entraînement, un emploi du temps ou une comparaison de mesures. Utilise CSS pour la mise en page. Une mise en page créée à partir de cellules de tableau présente aux lecteurs d’écran des relations trompeuses entre lignes et colonnes et s’adapte mal aux écrans étroits.
Construire la structure à partir des données
<table> contient le tableau, <tr> une ligne, <th> une cellule d’en-tête et <td> une cellule de données. Les cellules sont écrites de gauche à droite dans chaque ligne. Une cellule de données en gras reste une cellule de données ; utilise <th> pour indiquer un en-tête.
<table>
<caption>Running log, week 12</caption>
<thead>
<tr>
<th scope="col">Day</th>
<th scope="col">Distance (km)</th>
<th scope="col">Time (min)</th>
</tr>
</thead>
<tbody>
<tr><th scope="row">Monday</th><td>5.0</td><td>28</td></tr>
<tr><th scope="row">Wednesday</th><td>7.5</td><td>45</td></tr>
<tr><th scope="row">Saturday</th><td>10.0</td><td>62</td></tr>
</tbody>
<tfoot>
<tr><th scope="row">Total</th><td>22.5</td><td>135</td></tr>
</tfoot>
</table>
Le titre est le premier élément à l’intérieur du tableau. Il indique aux lecteurs ce que décrit l’ensemble du tableau avant qu’ils ne découvrent ses valeurs. Un titre de section à proximité peut aider visuellement, mais le titre du tableau est associé au tableau lui-même.
Associer chaque valeur à ses en-têtes
scope="col" indique qu’un en-tête s’applique à une colonne. scope="row" indique qu’il s’applique à une ligne. La valeur numérique 7,5 appartient donc à la ligne « Wednesday » et à la colonne « Distance (km) ». Un lecteur d’écran peut annoncer ce sens complet au lieu d’un nombre isolé.
Place les unités dans les en-têtes de colonnes pour qu’elles s’appliquent partout de la même façon. Chaque distance est ici en kilomètres ; chaque durée est en minutes. La distance totale est obtenue à partir de 5,0, 7,5 et 10,0, soit 22,5 km. Les durées 28, 45 et 62 donnent 135 min.
Donner un rôle à chaque groupe
<thead> regroupe les lignes d’en-tête, <tbody> les données principales et <tfoot> le récapitulatif après le corps. Ces groupes décrivent la structure et fournissent des points d’appui à CSS. Les navigateurs insèrent un <tbody> autour des lignes ordinaires écrites directement dans un tableau : la structure affichée peut donc différer du code source sans groupes.
Vérifier le sens autant que l’apparence
Chaque ligne couvre ici trois colonnes. Omettre une cellule de données n’indique pas au navigateur quelle valeur intermédiaire manque : les cellules suivantes peuvent se retrouver sous le mauvais en-tête. Écris les cellules à leur place et utilise « 0 » pour un zéro connu ou « sans objet » lorsqu’une valeur ne s’applique pas. Une cellule vide sans explication laisse le lecteur dans l’incertitude.
Les tableaux n’ont pas de bordures par défaut. Pour tracer des lignes simples, applique border: 1px solid aux cellules et border-collapse: collapse au tableau. L’ancien attribut border est obsolète. Une bordure aide à montrer la grille, mais elle ne peut ni établir des relations manquantes avec les en-têtes ni corriger une valeur mal placée.
Points clés
- Les tableaux expriment les relations entre les lignes et les colonnes des données.
- Utilise
thpour les en-têtes ettdpour les données ; le gras seul ne donne pas de sens sémantique. - Place le titre du tableau en premier et utilise
scopepour associer les en-têtes simples aux données. - Regroupe les lignes avec
thead,tbodyettfoot, et vérifie les colonnes couvertes par chaque ligne. - Place les unités dans les en-têtes et précise le sens des données manquantes.
3.2 Cellules fusionnées et niveaux d’en-têtes
Les cellules fusionnées permettent à une entrée de couvrir plusieurs emplacements de la grille. Elles modifient le nombre de nouvelles cellules nécessaires dans une ligne : prévois donc les emplacements occupés avant d’écrire les balises.
Compter les cellules d’un emploi du temps fusionné
Considère trois colonnes : « Heure », « Lundi » et « Mardi ». À 09 h 00, le lundi contient « Formulaires » et le mardi « Tableaux ». À 10 h 00, le lundi commence « Validation », qui se poursuit sur la ligne de 11 h 00. Le mardi contient « Médias » à 10 h 00 et « Contenus intégrés » à 11 h 00. À 12 h 00, « Pause déjeuner » couvre les deux jours.
<tr>
<th scope="row">10:00</th>
<td rowspan="2">Validation</td><td>Media</td>
</tr>
<tr>
<th scope="row">11:00</th><td>Embeds</td>
</tr>
<tr>
<th scope="row">12:00</th><td colspan="2">Lunch break</td>
</tr>
À 11 h 00, l’emplacement du lundi est déjà occupé par la cellule de la ligne précédente. Les seules nouvelles cellules sont l’en-tête horaire et l’entrée du mardi. Ajouter une autre cellule pour le lundi pousserait la dernière valeur dans une quatrième colonne. À 12 h 00, l’en-tête horaire couvre une colonne et la cellule de la pause déjeuner en couvre deux, soit trois au total.
colspan étend une cellule horizontalement sur des colonnes ; rowspan l’étend verticalement sur des lignes. Leur valeur par défaut est un dans les deux cas. Pour vérifier une ligne, compte les emplacements remplis par de nouvelles cellules et par les cellules étendues depuis les lignes précédentes.
Décrire les groupes de colonnes
<colgroup> et <col> décrivent les colonnes et apparaissent après le titre du tableau mais avant les groupes de lignes. <col span="2"> représente deux colonnes. Seul un ensemble limité de styles s’applique par ces éléments, notamment les arrière-plans, la largeur, la visibilité et les bordures selon les règles de bordure applicables au tableau. Ils ne remplacent pas les en-têtes.
Pour placer « Distance (km) » au-dessus de deux colonnes nommées « Planned » et « Actual », définis ces deux colonnes comme un groupe. Donne à l’en-tête supérieur colspan="2" scope="colgroup" et aux en-têtes inférieurs scope="col". L’étendue règle la largeur, tandis que la portée indique la relation avec l’en-tête. Une portée de groupe de colonnes nécessite un groupe de colonnes correspondant dans la structure du tableau.
Associer explicitement les en-têtes si nécessaire
Pour les relations que scope ne peut pas exprimer clairement, donne aux en-têtes des identifiants uniques et énumère-les dans l’attribut headers de la cellule de données :
<table>
<caption>Monday distance plan</caption>
<colgroup></colgroup>
<colgroup span="2"></colgroup>
<thead>
<tr>
<th rowspan="2" scope="col">Day</th>
<th id="distance" colspan="2" scope="colgroup">Distance (km)</th>
</tr>
<tr>
<th id="planned" scope="col">Planned</th>
<th id="actual" scope="col">Actual</th>
</tr>
</thead>
<tbody>
<tr>
<th id="mon" scope="row">Monday</th>
<td headers="mon distance planned">8</td>
<td headers="mon distance actual">7.5</td>
</tr>
</tbody>
</table>
La valeur prévue de 8 renvoie à Monday, Distance (km) et Planned. La valeur réelle de 7,5 partage les en-têtes de ligne et de groupe, mais renvoie à Actual. Les noms séparés par des espaces doivent correspondre aux identifiants des en-têtes, et non à leur texte visible.
L’attribut abbr d’un en-tête peut fournir une version plus courte à répéter, comme dans <th abbr="Distance">Distance covered in kilometers</th>. Certains lecteurs d’écran utilisent cette forme courte. Lorsque de nombreuses cellules étendues ou trois niveaux d’en-têtes rendent un tableau difficile à suivre, répartis les données dans des tableaux plus simples ayant chacun leur titre. Évite d’imbriquer un tableau dans la cellule d’un autre.
Points clés
- Compte les emplacements occupés dans la grille, y compris ceux couverts depuis les lignes précédentes.
- Un colspan remplace des cellules voisines ; un rowspan occupe des emplacements dans les lignes suivantes.
- Utilise des groupes de colonnes avec
scope="colgroup"pour les en-têtes de groupes. - L’attribut
headersd’une cellule énumère les identifiants de ses cellules d’en-tête. - Privilégie des tableaux plus simples lorsque les fusions et les niveaux d’en-têtes masquent les relations.
4Ajoute des médias que chacun peut regarder et écouter
Un lecteur n’est qu’une partie d’un média utilisable. Les visiteurs ont aussi besoin d’un fichier pris en charge, d’un moyen de lancer et d’arrêter la lecture et d’un accès aux informations lorsque le son ou les images ne sont pas disponibles. Construis le lecteur à partir du fichier multimédia : réserve son espace, propose des sources adaptées et ajoute des sous-titres vérifiés ou une transcription textuelle. Les indications de chargement et des choix de lecture adaptés aident aussi les visiteurs à gérer le temps et les données que consomme une vidéo.
4.1 Lecteurs, lecture et choix de téléchargement
<video> et <audio> relient des fichiers multimédias à une page. Le navigateur télécharge ces fichiers distincts ; la vidéo ou le son n’est pas stocké dans le HTML. Ajouter controls affiche les commandes de lecture, de pause, de progression et de volume du navigateur.
<video src="intro.mp4" controls width="640" height="360"
poster="intro-poster.jpg" preload="metadata"></video>
<audio src="episode-12.mp3" controls></audio>
Sans commandes, un élément audio n’a pas de lecteur visible et une vidéo n’a pas de bouton de lecture visible. La page aurait besoin de commandes programmées pour donner cet accès aux utilisateurs. Pour une page simple, conserve les commandes de lecture natives.
Réserver un espace aux bonnes proportions
width et height acceptent des nombres simples en pixels CSS. Ils réservent de l’espace pendant le chargement d’une vidéo et réduisent les mouvements de la page. Une vidéo de 1 920 × 1 080 affichée à une largeur de 640 a une hauteur correspondante de 360 : la largeur a été divisée par trois, donc la hauteur doit aussi être divisée par trois. Une boîte de lecteur de proportions différentes conserve celles de l’image et ajoute des bandes vides.
poster fournit une image fixe avant la lecture. Sans image d’affiche, le navigateur attend des données multimédias avant de pouvoir afficher la première image. L’image d’affiche est utile lorsque peu ou pas de vidéo est préchargée.
Décider de la quantité à précharger
| Valeur | Indication de chargement |
|---|---|
none | Ne pas précharger le média |
metadata | Récupérer des informations comme la durée et les dimensions |
auto | Le navigateur peut télécharger le fichier entier |
Ce sont des indications : le navigateur peut les ignorer. La lecture automatique prend aussi le dessus sur le préchargement. none est utile pour les médias longs que beaucoup de visiteurs ne regarderont pas ; les métadonnées permettent d’afficher la durée sans demander intentionnellement le téléchargement du clip entier.
Comprendre les attributs qui activent la lecture
controls, autoplay, muted, loop et playsinline sont des attributs booléens. Leur présence les active : muted="false" démarre tout de même sans son. Supprime l’attribut pour le désactiver.
La lecture automatique avec du son est généralement bloquée jusqu’à une interaction de l’utilisateur, selon les autorisations et les réglages du navigateur. Une vidéo muette est plus souvent autorisée ; Safari sur iPhone nécessite aussi playsinline dans ce cas. Un clip silencieux en boucle peut utiliser autoplay muted loop playsinline. loop relance le clip lorsqu’il se termine. Ne compte pas sur la lecture automatique pour transmettre des informations essentielles.
Un son automatique peut gêner l’écoute d’un lecteur d’écran et un mouvement peut distraire. Le critère 1.4.2 des WCAG 2.2 (A) exige un moyen de mettre en pause ou d’arrêter un son automatique de plus de trois secondes, ou de régler son volume indépendamment. Le critère 2.2.2 (A) concerne les contenus animés automatiquement qui durent plus de cinq secondes à côté d’autres contenus, sauf s’ils sont essentiels. Prévois un mécanisme de pause accessible ; les commandes natives en fournissent un pour ces lecteurs multimédias.
Estimer le volume de données
Un clip de deux minutes à 5 mégabits par seconde contient 600 mégabits. En divisant par huit, on obtient environ 75 mégaoctets avant les données supplémentaires. Des clips plus courts et une indication de préchargement adaptée réduisent les transferts inutiles. Le lecteur iframe d’une plateforme hébergée peut transférer la diffusion hors du serveur de ton site, mais les visiteurs téléchargent toujours le média lorsqu’ils le regardent.
Points clés
- Conserve les commandes natives pour que les visiteurs puissent lancer, mettre en pause et régler la lecture.
- Utilise des valeurs numériques pour la largeur et la hauteur afin de réserver l’espace d’une vidéo.
- Le préchargement est une indication ; la lecture automatique peut prendre le dessus.
- Les attributs booléens sont activés par leur présence.
- Prévois les restrictions de lecture automatique et donne aux utilisateurs le contrôle des sons ou mouvements automatiques.
- Un lecteur de plateforme change le fournisseur du média, mais le visiteur doit toujours le télécharger.
4.2 Sources de remplacement et solutions de repli fiables
L’extension d’un fichier multimédia identifie son conteneur, la structure du fichier qui contient l’image et le son. Les codecs compressent et décodent les flux qu’il contient. Un navigateur doit prendre en charge à la fois le conteneur et ses codecs ; une extension .mp4 seule ne permet pas de connaître son contenu.
Choisir des formats adaptés
MP4 avec la vidéo H.264 et l’audio AAC offre une large compatibilité sur les systèmes actuels courants. WebM avec la vidéo VP9 ou AV1 et l’audio Opus est aussi largement pris en charge et peut réduire la taille à qualité égale. Pour l’audio, MP3 est un choix unique largement pris en charge. La prise en charge dépend toujours du codec réel et du système de l’utilisateur : teste donc les fichiers eux-mêmes.
Proposer les sources par ordre de priorité
<video controls width="640" height="360" poster="tour.jpg">
<source src="tour.webm" type="video/webm">
<source src="tour.mp4" type="video/mp4">
<p>Your browser cannot play this video.
<a href="tour.mp4">Download the tour video (MP4)</a>.
</p>
</video>
<p><a href="tour.mp4">Download the tour video (MP4)</a></p>
Le navigateur essaie les sources enfants dans l’ordre et utilise la première qu’il peut lire. WebM est préféré ici ; MP4 offre une autre possibilité si WebM ne peut pas être lu. Omets src sur le <video> lui-même lorsque tu utilises des sources enfants. Un src sur l’élément multimédia est prioritaire et la liste des sources enfants est ignorée.
Le type est un type MIME qui décrit le fichier. Il permet au navigateur d’ignorer un format non pris en charge sans récupérer d’abord des données multimédias. Un type incorrect peut faire ignorer un fichier lisible : la déclaration doit donc correspondre au fichier réel. Présenter le même encodage incompatible sous un autre nom ne crée pas une solution compatible.
Placer la solution de repli là où elle reste accessible
Le contenu dans <video> sert de repli pour un navigateur qui ne reconnaît pas l’élément vidéo. Un navigateur moderne qui le reconnaît mais ne peut lire aucune source n’affiche pas ce paragraphe interne comme message d’erreur général. Le lien de téléchargement distinct à l’extérieur du lecteur reste accessible dans ce cas. Un lien de repli et des sources de remplacement répondent à des échecs différents.
Appliquer le même principe à l’audio
<audio controls>
<source src="episode-12.opus" type="audio/ogg; codecs=opus">
<source src="episode-12.mp3" type="audio/mpeg">
<p>Your browser cannot play this audio.</p>
</audio>
<p><a href="episode-12.mp3">Download episode 12 (MP3)</a></p>
Ce premier fichier utilise un conteneur Ogg avec de l’audio Opus. La solution MP3 utilise audio/mpeg, le type MIME correct pour le MP3. Le navigateur ne peut pas déduire du paragraphe de repli qu’il doit changer de fichier ; les éléments source permettent ce choix. Lors de la vérification de la page, contrôle les chemins, les formats réels des fichiers et la lecture, puis confirme séparément que le lien de téléchargement extérieur fonctionne.
Points clés
- La lecture nécessite la prise en charge du conteneur et des codecs.
- Les sources enfants sont essayées dans l’ordre lorsque l’élément multimédia n’a pas de
src. - Des types MIME exacts aident les navigateurs à choisir une source lisible.
- Garde un lien de téléchargement à l’extérieur du lecteur en cas d’échec des sources dans les navigateurs modernes.
4.3 Sous-titres, transcriptions textuelles et minutage WebVTT
Les informations d’un média doivent être accessibles autrement lorsqu’une personne ne peut pas les entendre ou les voir. Les sous-titres pour sourds et malentendants comprennent les paroles, les personnes qui parlent et les sons porteurs de sens. Les sous-titres transcrivent ou traduisent les dialogues pour les personnes qui entendent l’audio mais ont besoin d’aide pour le comprendre. Une transcription textuelle présente les paroles et les sons importants par écrit près du lecteur ou par un lien proche clairement nommé. L’audiodescription décrit les informations visuelles importantes.
Associer une piste de sous-titres
<video controls>
<source src="intro.mp4" type="video/mp4">
<track kind="captions" src="intro.en.vtt"
srclang="en" label="English" default>
</video>
<p><a href="intro-transcript.html">Read the introduction transcript</a></p>
Place <track> après les sources. src pointe vers un fichier de piste de texte, kind indique sa fonction, srclang indique la langue et label fournit le texte du menu du lecteur. Une piste de sous-titres doit avoir srclang ; inclus-le aussi pour les sous-titres pour sourds et malentendants. Une seule piste devrait porter default. Sans kind, la valeur par défaut est subtitles.
Écrire le fichier de sous-titres
WebVTT est du texte UTF-8 enregistré avec une extension .vtt. La première ligne est WEBVTT, suivie d’une ligne vide. Chaque repère comporte ensuite une ligne de minutage et son texte, avec une ligne vide avant le repère suivant. Un identifiant facultatif peut précéder le minutage d’un repère.
WEBVTT
00:00:01.000 --> 00:00:04.500
MAYA: Welcome to the workshop.
00:00:05.000 --> 00:00:07.250
[door closes]
00:00:07.500 --> 00:00:11.000
MAYA: Let's build our first form.
Le premier repère dure 3,5 secondes, le deuxième 2,25 secondes et le troisième 3,5 secondes. Le repère sonore communique quelque chose qu’un auditeur entend alors que personne ne parle.
Respecter exactement la syntaxe du minutage
Les minutes et les secondes utilisent deux chiffres ; les millisecondes en utilisent trois après un point. Les heures peuvent être omises : 01:05.000 signifie une minute et cinq secondes. La fin doit être postérieure au début. Une ligne vide termine un repère : garde donc tout son texte ensemble sans ligne vide au milieu.
SRT utilise des horodatages avec une virgule comme 00:00:01,000 ; une piste nécessite à la place WebVTT. La conversion nécessite l’en-tête WebVTT et des horodatages avec un point, ainsi que la vérification de la syntaxe des autres parties des repères. Renommer une extension .srt ne convertit pas son contenu.
Vérifier la mise à disposition et l’accessibilité
Garde la piste à la même origine que la page : même schéma d’URL, même hôte et même port. Une piste d’une autre origine nécessite un réglage crossorigin adapté sur la vidéo et l’autorisation de ce serveur. Sinon, un fichier correct peut ne pas se charger.
Le critère 1.2.2 des WCAG 2.2 (A) exige des sous-titres pour sourds et malentendants pour les vidéos préenregistrées avec audio, sous réserve de son exception pour les médias de remplacement. Le critère 1.2.1 (A) exige une solution de remplacement pour les contenus préenregistrés uniquement audio, comme une transcription textuelle pour un podcast. Vérifie les noms, les termes techniques, les changements de locuteur et les sons dans les sous-titres automatiques avant publication.
Les autres types de pistes comprennent descriptions, chapters et metadata. Les lecteurs des navigateurs ne les affichent généralement pas comme des sous-titres ordinaires. Ne place pas de consignes visibles essentielles dans une piste de métadonnées en t’attendant à ce qu’elles apparaissent à l’écran.
Points clés
- Les sous-titres pour sourds et malentendants incluent les sons porteurs de sens et indiquent qui parle ; les sous-titres se concentrent sur les dialogues.
- Associe un fichier
.vttavectracket indique sa fonction et sa langue. - Un repère WebVTT nécessite des horodatages valides avec un point, du texte et une ligne vide de séparation.
- Vérifie l’exactitude des sous-titres et fournis un accès proche à une transcription textuelle.
- Les pistes d’une autre origine nécessitent à la fois des réglages du navigateur et l’autorisation du serveur.
5Intègre une autre page avec soin
Un iframe ouvre une fenêtre sur une autre page web à l’intérieur de la tienne. Cette page apporte son propre code, ses autorisations, son comportement de chargement et sa dépendance à son fournisseur. Donne à la fenêtre un nom utile et des dimensions adaptées, puis choisis quand elle se charge et ce qu’elle peut faire. Comprendre qu’un contenu intégré est un document distinct aide à expliquer les cadres bloqués, les choix de confidentialité et la raison pour laquelle les styles de ta page n’atteignent pas le lecteur d’un autre site.
5.1 Un cadre avec un titre et un lien de repli utilisable
Un <iframe> est un cadre intégré : il affiche une page web distincte dans la page courante. Ce document possède son propre HTML, son CSS et ses scripts. Les styles de ta page peuvent dimensionner le cadre, mais ne mettent pas en forme le contenu d’un autre document à l’intérieur.
Commencer par un cadre clair et dimensionné
<iframe src="https://maps.example.com/venue"
title="Map of the venue"
width="600" height="400" loading="lazy"></iframe>
<p><a href="https://maps.example.com/venue">Open the venue map</a></p>
src indique la page à charger. Le titre indique à une personne utilisant un lecteur d’écran ce que contient le cadre avant qu’elle y entre. « Map of the venue » décrit sa fonction ; « iframe » ou « contenu » ne le fait pas. Le lien direct offre un autre accès si le navigateur du visiteur bloque le cadre.
width et height acceptent des nombres simples en pixels CSS. Sans ces attributs, le cadre par défaut mesure 300 × 150 pixels CSS. Les navigateurs dessinent aussi une bordure par défaut. Mets-la en forme avec CSS plutôt qu’avec l’attribut obsolète frameborder.
Adapter le code d’intégration fourni
Les services de cartographie et de vidéo proposent généralement un fragment de code d’intégration parmi leurs commandes de partage. Après l’avoir collé, inspecte l’URL, améliore le titre, vérifie les dimensions et supprime les attributs de présentation obsolètes. Une URL d’iframe est l’adresse d’une page ou d’un lecteur de service, pas nécessairement celle d’un fichier multimédia direct.
Utilise HTTPS pour l’adresse intégrée. Un cadre HTTP dans une page HTTPS est un contenu mixte actif et il est bloqué. Écrire un titre ou modifier les dimensions du cadre ne peut pas, à lui seul, faire charger une URL non sécurisée.
Charger au moment utile
loading="lazy" retarde le chargement d’un cadre jusqu’à ce qu’il soit proche de la zone d’affichage, ce qui évite du travail initial pour une carte située loin en bas de page. La valeur par défaut eager lance le chargement immédiatement. Utilise le chargement immédiat pour un contenu intégré bien visible en haut de page afin que les visiteurs n’attendent pas son contenu principal. Le chargement différé modifie le moment du chargement ; il ne supprime pas le contact réseau lorsque le cadre finit par se charger.
Pour adapter un lecteur à son conteneur, CSS peut fixer sa largeur à 100 % et conserver ses proportions :
iframe.video-player {
width: 100%;
height: auto;
aspect-ratio: 16 / 9;
border: 0;
}
Applique class="video-player" à l’iframe concerné. Les dimensions HTML fournissent toujours des informations initiales, tandis que CSS contrôle la taille affichée.
Reconnaître le refus d’un fournisseur
Un site peut interdire son intégration dans un cadre grâce au champ d’en-tête de réponse HTTP X-Frame-Options ou à une règle frame-ancestors de Content Security Policy. Le navigateur peut afficher un cadre vide ou une erreur. Ces restrictions aident à empêcher le détournement de clic, où une page intégrée trompeuse intercepte des clics destinés à autre chose.
Le HTML de ta page ne peut pas passer outre le refus de l’autre site. Utilise l’adresse d’intégration autorisée du fournisseur s’il en propose une ; sinon, fournis un lien ordinaire. Garde aussi ce lien en cas de problème ultérieur : si un fournisseur supprime ou déplace son contenu, un iframe inchangé sur ta page peut cesser de fonctionner.
Points clés
- Un iframe contient un document distinct avec ses propres styles et scripts.
- Donne à chaque cadre un titre descriptif et des dimensions adaptées.
- Utilise le chargement différé pour les contenus intégrés hors écran et des URL HTTPS.
- Un fournisseur peut refuser l’intégration dans un cadre ; propose un lien direct dans ce cas.
5.2 Autorisations, vie privée et choix de l’élément
Un contenu tiers intégré contacte son fournisseur lors de son chargement, même avant que le visiteur lance la lecture. Cette requête révèle des informations comme une adresse IP et peut impliquer des cookies. Décide si la page a besoin de ce contact immédiatement et de quels accès le document intégré a besoin.
Retarder le contact lorsque c’est approprié
Le chargement différé retarde le chargement d’un cadre hors écran jusqu’à ce qu’il soit proche de l’écran. Un aperçu qui ne charge le contenu intégré qu’après un clic donne aux visiteurs un choix plus direct. Certains services proposent aussi des modes renforçant la confidentialité. Un cadre du même site ne contacte pas nécessairement un autre fournisseur ; srcdoc intégré évite de récupérer une page distincte, même si les ressources auxquelles ce HTML fait référence peuvent toujours déclencher des requêtes réseau.
Limiter le comportement du document avec sandbox
<iframe src="https://quiz.example.com/start"
title="Practice quiz"
sandbox="allow-scripts allow-forms"></iframe>
Un sandbox vide applique toutes ses restrictions, notamment le blocage des scripts, de la soumission de formulaires et des fenêtres surgissantes, ainsi que l’attribution d’une origine opaque. Des jetons lèvent certaines restrictions. Ici, le questionnaire peut exécuter des scripts et soumettre des formulaires, mais allow-popups n’a pas été accordé. Ajoute uniquement les jetons dont le contenu a besoin ; sinon, une liste d’autorisations copiée peut annuler des limites utiles.
allow-same-origin permet au document de conserver son origine normale. Ne le combine pas avec allow-scripts pour du contenu intégré provenant de ta propre origine : cette combinaison peut permettre au document de supprimer son bac à sable. Un bac à sable ne signifie pas non plus qu’un cadre n’effectue aucune requête réseau.
Accorder séparément les fonctionnalités du navigateur
allow est une politique d’autorisations pour des fonctionnalités comme le plein écran, l’incrustation vidéo, la caméra et le microphone. Un lecteur vidéo peut demander allow="fullscreen; picture-in-picture". Il n’a pas besoin d’accéder à la caméra simplement parce qu’il contient de la vidéo. L’ancien attribut allowfullscreen accorde lui aussi l’accès au plein écran.
Les jetons du bac à sable régissent le comportement du document ; les autorisations de fonctionnalités répondent à une autre question. Accorder le plein écran ne permet pas à lui seul à une page en bac à sable de soumettre un formulaire ou d’exécuter un script.
Contrôler le référent et le contenu intégré directement
referrerpolicy="no-referrer" omet l’adresse de la page référente dans la requête. Avec la politique par défaut habituelle, une requête HTTPS vers une autre origine envoie l’origine plutôt que le chemin complet ; les requêtes vers une connexion moins sécurisée n’envoient aucun référent. Cela contrôle un champ d’en-tête, pas toutes les informations reçues par un fournisseur.
srcdoc fournit directement le HTML du cadre et prend le dessus sur src :
<iframe title="Message preview" sandbox
srcdoc="<p>Preview of your message</p>"></iframe>
Le bac à sable maintient les restrictions sur ce petit aperçu. Les aperçus HTML plus généraux demandent de faire attention aux ressources et au balisage qu’ils autorisent.
Choisir l’élément selon la ressource
| Ressource | Élément |
|---|---|
| Image | img |
| Fichier audio ou vidéo | audio ou video |
| Page web, carte ou lecteur de service | iframe |
| Document externe comme un PDF | object ou embed |
<object> peut contenir du contenu de repli, comme un lien de téléchargement, si la ressource ne peut pas être affichée. Les anciens contenus nécessitant un module externe, comme Flash, ne fonctionnent plus dans les navigateurs courants actuels ; Adobe a mis fin à la prise en charge de Flash Player à la fin de 2020. Garde des liens directs à côté des contenus intégrés importants et vérifie régulièrement que le fournisseur les met toujours à disposition.
Points clés
- Le chargement d’un contenu tiers contacte son fournisseur avant même la lecture.
- Un bac à sable commence avec des restrictions ; des jetons rétablissent certaines possibilités.
- Ne combine pas
allow-scriptsetallow-same-originpour du contenu de même origine. - Utilise
allowpour les fonctionnalités nécessaires du navigateur et la politique de référent pour l’adresse de la page référente. - Choisis les éléments multimédias pour les fichiers multimédias et les iframes pour les pages distinctes.
Formulaires HTML : exemples
1Crée un formulaire d’inscription à un atelier
20 étapes
- 1IntroductionPars des réponses dont tu as besoin
Une inscription à un atelier nécessite un nom, des coordonnées, le choix d’une séance, des centres d’intérêt facultatifs et un message. Chaque réponse nécessite un contrôle adapté et une étiquette.
Construis le formulaire par étapes : décide où il envoie les données, choisis les contrôles, puis associe les étiquettes et les consignes. Tu vérifieras à la fois ce qu’un visiteur peut saisir et ce qui arrive au programme destinataire.
- 2ExplicationChoisis une destination et une méthode
Utilise
<form action="/registrations" method="post">pour envoyer une inscription à l’URL destinataire. POST place les réponses dans le corps de la requête et convient à une soumission qui crée des données stockées.La connexion a toujours besoin de HTTPS pour être chiffrée. Une méthode ne rend pas les informations confidentielles à elle seule, et le HTML ne stocke pas l’inscription ; c’est le programme destinataire qui s’en charge.
- 3ExempleDonne une clé de données à la réponse
Commence par
<input id="attendee" name="attendee">. Si le visiteur saisit « Nora », le contrôle envoieattendee=Nora.Le
nameindique au programme destinataire de quelle réponse il s’agit. L’ididentifie le champ sur la page. Supprimer le nom peut laisser une zone qui semble fonctionner mais n’envoie rien lors de la soumission. Une étiquette sera associée plus tard grâce à l’identifiant. - 4DéfiPrévois les champs envoyés
Un formulaire contient
<input name="guest" value="Nora">,<input name="notes" value="">et une case non cochée nomméeupdates. Quels champs envoient des données ?---reveal---
Les champs de texte envoient
guest=Noraetnotes=. La case non cochée n’envoie aucune paire. Une valeur de texte vide est différente d’une case omise : l’une nomme un champ sans texte ; l’autre est absente des données envoyées. - 5ConseilRends l’envoi explicite
Ajoute
<button type="submit">Register</button>. Un bouton dans un formulaire le soumet par défaut : un type explicite rend donc l’intention claire.Si tu ajoutes ensuite un bouton pour une action programmée, utilise
type="button". Un bouton de réinitialisation rétablit les valeurs initiales et peut effacer toute la saisie du visiteur. Appuyer sur Entrée dans un champ sur une ligne peut aussi déclencher la soumission : le formulaire doit donc fonctionner sans dépendre d’un clic de souris. - 6ExplicationChoisis les types de champs pour les coordonnées
Utilise
type="email"pour l’adresse e-mail ettype="tel"pour un numéro de téléphone facultatif. Ces types orientent le choix du clavier sur téléphone, mais leurs vérifications diffèrent.Le type e-mail vérifie la syntaxe, pas l’existence de la boîte mail. Le type tel n’impose aucun format de téléphone. Un champ de mot de passe masque les caractères à l’écran mais nécessite toujours HTTPS lors de la soumission. Choisis les types selon les informations qu’ils représentent, pas seulement selon le clavier souhaité.
- 7ExempleGarde les codes sous forme de texte
Supposons que l’atelier envoie aux membres un code composé de chiffres. Utilise
type="text" inputmode="numeric"pour ce code. L’indication de pavé numérique facilite la saisie des chiffres sans transformer le code en quantité.Un champ
numberpeut proposer des boutons d’incrémentation et un comportement lié aux quantités, qui ne conviennent pas à un identifiant.inputmodelui-même ne vérifie rien ; un format de code fixe peut recevoir une règle de validation distincte. - 8ExplicationCrée un groupe de boutons radio pour choisir une séance
Propose trois séances avec des boutons radio qui utilisent tous
name="session". Donne-leur des valeurs commemorning,afternoonetevening.Choisir le bouton de l’après-midi envoie
session=afternoonet efface le choix précédent dans ce groupe. Des noms différents permettraient de garder plusieurs séances sélectionnées. Utilise des cases à cocher distinctes pour les centres d’intérêt indépendants, car les visiteurs peuvent en vouloir plusieurs. - 9DéfiCorrige un groupe à choix unique
Deux boutons radio de séance utilisent
name="morning" value="morning"etname="afternoon" value="afternoon". Un visiteur peut sélectionner les deux. Quelle modification permet d’en faire un seul groupe ?---reveal---
Donne aux deux le même nom, comme
name="session", en gardant leurs valeurs différentes. Le nom commun crée le groupe ; les valeurs distinctes identifient la séance choisie. Rendre seulement leurs identifiants identiques créerait des identifiants en double sur la page sans corriger le regroupement. - 10Point cléDistingue une date affichée de sa valeur
Un sélecteur de date peut afficher le même jour dans des ordres différents selon les appareils. Un champ de type
dateenvoie toujours une valeur fixe dans l’ordre année-mois-jour, comme2026-11-18.L’affichage suit les paramètres régionaux du visiteur ; la requête ne copie pas cette chaîne affichée. Les champs de date et d’heure ne fournissent pas de fuseau horaire. Un rendez-vous nécessite donc assez de contexte visible pour que le visiteur sache à quel lieu correspond l’heure indiquée.
- 11ExemplePropose un choix fixe obligatoire
Une longue liste de lieux d’atelier convient à une liste de sélection. Donne-lui une première option vide, comme
<option value="">Choose a location</option>, et ajouterequiredà l’élément select.Chaque option réelle possède sa propre valeur envoyée. Choisir
<option value="studio">Main studio</option>envoie la paire clé-valeur stablelocation=studiolorsque l’élément select est nommélocation. Le texte visible peut rester descriptif. - 12ExemplePrévois de la place pour un message
Ajoute
<textarea id="message" name="message" rows="5"></textarea>pour une réponse plus longue. Le texte initial se place entre ses balises ; les balises adjacentes gardent ici la valeur initiale vide.Rows contrôle la hauteur visible, pas la longueur maximale de la réponse. Une liste de suggestions a une autre fonction : associe-la à l’attribut
listd’un champ pour proposer des suggestions tout en autorisant d’autres réponses. Elle ne peut pas imposer les choix fixes d’une liste de sélection. - 13DéfiChoisis entre suggestions et réponses fixes
L’atelier n’autorise que les lieux indiqués, mais quelqu’un remplace la liste de sélection par un champ de texte associé à une liste de suggestions. Le visiteur peut-il maintenant saisir un lieu absent de la liste ?
---reveal---
Oui. Une liste de suggestions propose des réponses sans les restreindre. Garde une liste de sélection lorsque les valeurs autorisées correspondent exactement aux choix fournis. Utilise une liste de suggestions lorsqu’une autre réponse doit rester possible, comme une ville absente des suggestions courantes.
- 14LienAffiche un état sans recueillir de réponse
Un indicateur de progression peut montrer l’avancement du traitement d’une inscription. Une jauge peut afficher une mesure dans un intervalle connu, comme l’utilisation du stockage.
Aucun des deux n’est un contrôle de saisie de réponse. Utilise
<progress value="70" max="100">70%</progress>pour l’avancement d’une tâche et ajoute-lui un texte explicatif. Pour un groupe de centres d’intérêt facultatifs et indépendants, utilise des cases à cocher afin que les visiteurs puissent réellement modifier et envoyer leurs choix. - 15ExempleAssocie une étiquette visible
Écris
<label for="attendee">Name (required)</label>à côté du champ avecid="attendee". La valeur de for doit correspondre exactement à l’identifiant, casse comprise.Cliquer sur l’étiquette devrait donner le focus au champ. Garde l’étiquette visible pendant la saisie ; un texte indicatif ne peut pas remplir ce rôle. L’indication obligatoire informe l’utilisateur de ce qui est attendu, tandis que l’attribut required oblige le navigateur à vérifier la présence d’une valeur.
- 16ExplicationDonne une question commune aux choix
Place les boutons radio de séance dans un groupe de champs dont le premier enfant est
<legend>Session</legend>. Garde une étiquette distincte pour chaque option radio.La légende explique la question commune ; les étiquettes nomment ses réponses. Pour les champs de coordonnées, des valeurs autocomplete exactes comme
name,emailettelaident le navigateur à proposer les informations enregistrées. Une aide de format située à proximité peut être associée au champ pararia-describedby, grâce à l’identifiant de cette aide. - 17DéfiRepère l’association d’étiquette défectueuse
Le balisage contient
<label for="contact">Email</label>et<input id="email" name="contact" type="email">. Pourquoi cliquer sur l’étiquette ne donne-t-il pas le focus à ce champ ?---reveal---
La valeur de for correspond au nom, mais pas à l’identifiant. Remplace-la par
for="email"ou choisis un nouvel identifiant unique correspondant. Le nom sert déjà à la soumission : modifier l’association de l’étiquette ne nécessite donc pas de changer la clé de données attendue par le programme destinataire. - 18ConseilAjoute un champ de fichier avec son encodage
Si l’inscription nécessite un document, ajoute un champ
type="file"doté d’un nom et définisenctype="multipart/form-data"sur le formulaire POST. Cet encodage transmet le contenu du fichier.Un filtre accept peut guider le sélecteur de fichiers, mais ne garantit pas ce que le serveur recevra. N’oublie pas non plus que les contrôles désactivés sont omis, tandis que les champs en lecture seule qui prennent en charge cet état sont envoyés. Utilise l’attribut qui correspond au comportement souhaité pour les données.
- 19DéfiVérifie le formulaire terminé
Un champ de lieu doté d’une étiquette ne propose que des suggestions par datalist, et le champ d’e-mail possède un identifiant mais pas de nom. Le visiteur doit choisir un lieu dans la liste et le serveur a besoin de l’e-mail. Quelles sont les deux corrections nécessaires ?
---reveal---
Utilise une liste de sélection pour les choix fixes de lieux et ajoute un nom au champ d’e-mail. La liste de sélection contrôle les choix proposés ; le nom donne une clé à l’e-mail envoyé. Une étiquette visible seule ne résout aucun de ces problèmes.
- 20RécapitulatifLis le formulaire dans les deux sens
Du côté du visiteur, vérifie le type de contrôle, l’étiquette visible, la question commune et les consignes. Du côté du serveur, vérifie la destination, la méthode, les noms et les valeurs envoyées.
Clique ensuite sur chaque étiquette et parcours le formulaire avec Tabulation. Ces vérifications repèrent des problèmes différents : un formulaire peut être facile à remplir tout en omettant des données, ou envoyer les bonnes données tout en étant difficile à comprendre.
2Débogue les règles de validation d’un formulaire
15 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionSuis les vérifications qui bloquent l’envoi
- 2ExplicationRends un pseudonyme obligatoire
- 3ExempleTeste séparément la présence et la longueur
- 4DéfiRends le champ facultatif
- 5ConseilTeste la saisie de l’utilisateur, pas seulement la valeur par défaut
- 6ExempleApplique d’abord les bornes
- 7ExempleCompte à partir de la base réelle
- 8DéfiDistingue le pas du maximum
- 9LienLis les pas horaires en secondes
- 10ExplicationVérifie le code fixe de l’organisation
- 11DéfiTrouve un motif ignoré
- 12ConseilExplique et affiche l’erreur
- 13Point cléUne vérification pratique ne garantit pas la fiabilité des données
- 14DéfiDiagnostique plusieurs erreurs différentes
- 15RécapitulatifUtilise une courte liste de tests aux limites
3Crée et vérifie un planning de séances
11 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionConçois le tableau avant ses balises
- 2ExplicationNomme le tableau et ses colonnes
- 3ExempleÉcris une ligne de données complète
- 4DéfiCorrige un en-tête purement visuel
- 5ConseilRends clair le sens des cellules vides
- 6ExempleÉtends une séance sur deux lignes
- 7DéfiCompte une ligne sous un rowspan
- 8ExempleÉtends le déjeuner sur les deux salles
- 9ExplicationAssocie une cellule à plusieurs niveaux d’en-têtes
- 10DéfiCorrige à la fois l’alignement et le sens
- 11RécapitulatifSuis une valeur dans le tableau
4Publie une courte vidéo avec des sous-titres
17 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionPublie les informations autant que le fichier
- 2ExempleRéserve un espace pour un lecteur avec commandes
- 3ExplicationChoisis une indication de chargement adaptée
- 4DéfiDésactive un réglage booléen
- 5ConseilPermets de mettre en pause les médias automatiques
- 6ExplicationVérifie le conteneur et les codecs
- 7ExempleAjoute d’abord une source préférée
- 8DéfiTrouve les solutions de remplacement inutilisées
- 9Point cléGarde une solution de repli à l’extérieur du lecteur
- 10ExplicationChoisis des sous-titres pour transmettre les informations sonores
- 11ExempleÉcris le premier repère
- 12ExempleAjoute un repère pour un son porteur de sens
- 13ExempleAssocie le fichier après les sources
- 14DéfiConvertis correctement un horodatage
- 15ConseilTeste la piste et la transcription textuelle
- 16DéfiCorrige deux problèmes d’accès distincts
- 17RécapitulatifVérifie tout le parcours d’accès au média
5Examine une carte et un questionnaire intégrés
12 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionConsidère un contenu intégré comme un autre document
- 2ExempleNomme la carte avant de la charger
- 3ExplicationDiffère le chargement d’une carte sous le contenu principal
- 4ConseilInspecte le code d’intégration copié
- 5DéfiReconnais une règle d’intégration du serveur
- 6ExplicationCommence le questionnaire avec des restrictions
- 7Point cléGarde le contrôle de l’origine et des scripts
- 8DéfiN’accorde au questionnaire que ce dont il a besoin
- 9LienDistingue la confidentialité du champ d’en-tête de référent
- 10ExplicationChoisis un élément adapté à la ressource
- 11DéfiExamine un contenu intégré qui a changé de place
- 12RécapitulatifExamine le cadre comme une petite dépendance
Formulaires HTML : QCM
Série 1 : Recueille et envoie les bonnes réponses10 Questions Pratiques
Question 1 sur 10
id="visitor" mais pas de name. Pourquoi son texte est-il absent des données envoyées par le formulaire ?Afficher la réponseMasquer la réponse
name. Son identifiant repère l’élément sur la page et peut associer une étiquette, mais ne fournit pas de clé pour l’envoi. Passer la requête de GET à POST ne permettrait pas à ce contrôle sans nom d’envoyer son texte.Question 2 sur 10
Afficher la réponseMasquer la réponse
Question 3 sur 10
for="address" ; le champ d’e-mail utilise id="email" name="address". Quelle modification unique associe cette étiquette sans changer la clé de données envoyée ?Afficher la réponseMasquer la réponse
for="email" crée donc la correspondance manquante. Le nom peut rester address, ce qui conserve la clé attendue par le programme destinataire. Modifier le nom seul laisserait l’étiquette pointer vers un identifiant qui n’existe toujours pas.Question 4 sur 10
<option value="">Choose delivery</option>. Que se passe-t-il si l’utilisateur soumet le formulaire sans choisir une autre option ?Afficher la réponseMasquer la réponse
Question 5 sur 10
/lookup et contient un champ de texte name="term" contenant « css grid », une case non cochée name="archived" value="yes" et un champ désactivé name="region" value="east". Quelle est l’URL de la requête obtenue ?Afficher la réponseMasquer la réponse
+. La case non cochée et le champ désactivé sont tous deux omis : il ne reste que term=css+grid. Une valeur désactivée n’est pas envoyée simplement parce qu’elle apparaît dans le HTML, et une case non cochée ne crée pas automatiquement une valeur no.Question 6 sur 10
online et onsite. Comment faut-il modifier le regroupement ?Afficher la réponseMasquer la réponse
attendance, et des valeurs différentes qui identifient les deux modes. Required détermine si un groupe nécessite une sélection ; il ne réunit pas dans un même groupe des boutons radio portant des noms différents.Question 7 sur 10
Afficher la réponseMasquer la réponse
Question 8 sur 10
minlength="5". Que devient sa vérification de longueur lorsque l’utilisateur le laisse vide ?Afficher la réponseMasquer la réponse
Question 9 sur 10
Afficher la réponseMasquer la réponse
enctype="multipart/form-data", tandis qu’un bouton d’aide qui ne soumet pas le formulaire nécessite type="button". Ces modifications corrigent deux comportements distincts. POST avec l’encodage par défaut ne transmet toujours pas le contenu du fichier, et l’absence de type sur le bouton d’aide conserve son comportement normal de soumission dans un formulaire.Question 10 sur 10
required="false" minlength="3". L’auteur souhaite qu’il soit facultatif, avec au moins trois caractères pour toute réponse saisie. Que faut-il changer ?Afficher la réponseMasquer la réponse
Série 2 : Vérifie les bornes, les motifs et la structure des tableaux10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
step="300" sur un champ de type time ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
min="2" max="14" step="4". Quelle valeur saisie satisfait à toutes ces contraintes ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
min="08:20" max="10:20" step="1200". Combien de valeurs horaires non vides satisfont à ces réglages ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
pattern="[A-Z]{2}-[0-9]{3}". Quel code saisi est accepté ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
"[". Un utilisateur saisit « ravi ». Que se passe-t-il lors de la soumission normale ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
<tr><th scope="row">B</th><td>18</td></tr> ; elle doit indiquer une masse indisponible et un temps de 18 minutes. Comment faut-il corriger la ligne ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
muted="false". L’auteur souhaite désactiver le réglage initial de coupure du son. Quelle modification le permet ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Rends les médias et les pages intégrées utilisables10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
src="preview.mp4". Pourquoi l’ordre des sources enfants ne détermine-t-il pas la lecture ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
00:00:12.250 à 00:00:16.000. Combien de temps ce repère reste-t-il visible ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
rows="4" cols="35" et aucun attribut de longueur. Pourquoi un visiteur peut-il saisir plus de 140 caractères ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Débogue des problèmes HTML combinés10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
value="0.25", sans attribut min ni step. L’utilisateur remplace sa valeur. Quelle saisie respecte la règle de pas par défaut ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
[A-Z]{2}[0-9]{2}. La validation normale du formulaire est activée. Son bouton d’envoi « Enregistrer le brouillon » possède formnovalidate, tandis que « Envoyer » ne le possède pas. Le code est « xy8 ». Que se passe-t-il avec chaque bouton ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
r, planned et actual. Quel balisage convient pour la deuxième ligne ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
name="member" value="K8" readonly, un champ de texte nommé note vide et une case nommée copy non cochée. La requête utilise HTTPS. À quel comportement concernant les données le programme destinataire doit-il s’attendre ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
2.4. Quelle unité correspond à cette valeur ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
abréviation d’en-tête
abbr="Distance" pour une répétition plus courte.aide associée par aria-describedby
id, explique « Utilise au moins 8 caractères » avant la soumission du formulaire.attribut action
action="/messages" dirige l’envoi d’un message vers l’adresse du site qui reçoit les messages.attribut autocomplete
autocomplete="tel" pour que le navigateur puisse suggérer le numéro de téléphone enregistré de l’utilisateur.attribut booléen
required="false" reste obligatoire : l’attribut doit donc être supprimé pour le rendre facultatif.attribut headers
headers="mon distance planned" pointe vers trois en-têtes qui expliquent ensemble sa valeur.attribut pattern
attribut required
required.audiodescription
autorisation de fonctionnalité
B
bac à sable
base du pas
min="1" step="2" autorise 1, 3 et 5 : une saisie de 4 comprise entre les bornes est donc refusée.C
cadre intégré
case à cocher
cellule d’en-tête
cellule de données
chargement différé
loading="lazy" tandis que le contenu principal en haut de page se charge rapidement.codec
commandes de lecture natives
controls.conteneur multimédia
contenu de repli
contenu de repli de l’élément object
contenu mixte
contournement de la validation
formnovalidate tandis que le bouton ordinaire « Envoyer » conserve les vérifications.curseur
min="0" max="10" lorsqu’un réglage approximatif est plus utile qu’une saisie exacte.D
date et heure locales
2026-07-09T10:30 ; le lieu doit fournir tout contexte de fuseau horaire nécessaire.détournement de clic
document de cadre intégré
srcdoc="<p>Preview of your message</p>" sans récupérer de page HTML distincte.E
encodage multipart/form-data
enctype="multipart/form-data" afin que les octets du document sélectionné puissent être envoyés.expression régulière
[A-Z]{3} accepte exactement trois lettres latines de base majuscules lorsqu’elle est utilisée comme motif pour une valeur entière.É
élément source
état de validité
:user-invalid peut retarder la mise en forme d’erreur jusqu’à ce que l’utilisateur ait interagi avec le contrôle.étendue en colonnes
colspan="2" couvre les deux colonnes à côté de l’en-tête horaire distinct de la ligne.étendue en lignes
rowspan="2" occupe déjà l’emplacement du lundi dans la ligne suivante.étiquette de champ
id correspond à l’attribut for de l’étiquette.F
formulaire
G
GET
groupe d’options
groupe de boutons radio
name="speed" et des valeurs distinctes pour permettre une sélection unique.groupe de champs
groupe de colonnes
groupe de lignes
tfoot, après les lignes du corps.I
image d’affiche
indicateur de progression
J
jauge
value="0.6" et son intervalle par défaut affiche une mesure à 60 % de cet intervalle.L
lecture automatique
légende
liste de sélection
express.liste de suggestions
longueur maximale
maxlength="12" cesse d’accepter un treizième caractère latin ordinaire pendant la saisie.longueur minimale
minlength="4" peut être omis, mais un pseudonyme fourni de deux lettres est refusé.M
maximum
max="2026-08-31" autorise le 31 août mais refuse une date ultérieure saisie.minimum
min="0.5" step="0.5", un colis peut peser 0,5 kg et les pas suivants commencent à cette valeur.mode de saisie
inputmode="numeric" pour faciliter la saisie des chiffres sur téléphone.N
nom accessible
non-respect du pas
O
origine
P
paire nom-valeur
delivery=express, même si son texte visible est « Livraison express ».pas
step="900" utilise des incréments de 15 minutes, car les pas horaires sont mesurés en secondes.piste de texte
politique de référent
referrerpolicy="no-referrer" contacte toujours son fournisseur mais n’envoie pas l’adresse de la page référente.portée de l’en-tête
scope="row", tandis que l’en-tête de distance utilise scope="col" pour les valeurs situées dessous.POST
préchargement
preload="none" pour éviter de demander son média à l’avance lorsque beaucoup de visiteurs risquent de ne pas le regarder.Q
quantificateur
[0-9]{4}, le quantificateur exige quatre chiffres : trois chiffres ne suffisent donc pas à compléter le code attendu.R
rapport largeur-hauteur
repère WebVTT
00:00:01.000 --> 00:00:04.500 affiche un repère pendant trois secondes et demie.restriction d’intégration dans un cadre
S
sous-titres
sous-titres pour sourds et malentendants
T
tableau de données
titre du tableau
transcription textuelle
type de champ
type="date" fournit un sélecteur au lieu d’une zone de texte libre sur une ligne.type MIME
type="audio/mpeg", ce qui permet au navigateur de reconnaître le format audio prévu.V
validation côté serveur
validation des contraintes
W
WebVTT
intro.en.vtt, dont les horodatages utilisent des points avant les chiffres des millisecondes.Z
zone de texte multiligne
rows="5" pour la hauteur visible, tandis que maxlength limite séparément le texte saisi.À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.