une étiquette peut se référer uniquement aux éléments d'entrée?
Question
W3Schools ont ceci à dire à propos de :
La balise
<label>
définit une étiquette pour un élément Entrée . [souligné dans l'original]
Est-ce que cela signifie que le code HTML suivant n'est pas valide?
<!doctype html>
<html>
<head>
<title>Example document</title>
</head>
<body>
<label for="x">Label</label>
<hr>
<div id="q" contentEditable="true">Hello</div>
<hr>
<div id="x" contentEditable="true">World</div>
</body>
</html>
Les deux Chrome et IE8 donner le focus à World
lorsque Label
est cliqué, Firefox ne fonctionne pas.
Ce qui est correct?
La solution
Selon le W3C il applique aux contrôles de formulaire et les contrôles de formulaire sont défini comme :
- Boutons
- Les cases à cocher
- Les boutons radio
- Menus
- Saisie de texte
- Fichier sélectionner
- contrôles cachés
- balises objet
FireFox est techniquement juste, bien que je considère à peine à « casser » si un navigateur ne limite pas à ces éléments.
Autres conseils
La spécification HTML dit, à propos de l'attribut « pour » de label
, « Quand il est présent, la valeur de cet attribut doit être la même que la valeur de l'attribut id d'un autre contrôle dans le même document. En cas d'absence, l'étiquette étant définie est associée avec le contenu de l'élément. "
Ainsi, les références d'identité dans « pour » doit être celle d'un contrôle. Qu'est-ce qu'un contrôle? La spécification dit essentiellement tout input
est un contrôle, comme button
, select
ou object
. Donc, Firefox est techniquement juste -. Un div
est pas un contrôle
Je dirais que ce n'était pas une utilisation appropriée du balisage, parce que la sémantique de l'étiquette sont qu'ils sont spécifiquement pour les contrôles.
L'élément d'étiquette est utilisée pour spécifier les étiquettes des commandes qui ne sont pas labels implicites,
La dernière spécification WhatWG a ceci à dire:
Certains éléments, tous les associés sous forme, sont classés comme éléments marquables. Ce sont des éléments qui peuvent être associés à un élément d'étiquette.
button
,input
(si l'attributtype
est pas dans l'état caché),meter
,output
,progress
,select
,textarea
...
L'attribut
for
peut être spécifié pour indiquer un contrôle de la forme avec laquelle la légende doit être associé. Si l'attribut est spécifié, la valeur de l'attribut doit être l'ID d'un élément dans marquable le même arbre que l'élémentlabel
.
(Source: https://html.spec.whatwg.org/multipage/ Forms.html.)
En d'autres termes, la norme ne permet que des attributs for
pour pointer sur des éléments de l'un des 7 types de balises énumérés ci-dessus. Le code HTML exposé dans la question (qui utilise un élément de for
pour pointer vers un div
modifiable) est donc techniquement HTML invalide en vertu de la spécification actuelle.
Le (qui est Nu Html Vérificateur approuvé par WhatWG) est d'accord; si vous le demandez, il vous dira de valider le document HTML de la question:
Erreur :. La valeur de l'attribut
for
de l'élément delabel
doit être l'ID d'un contrôle de forme non masquée