Je préfère
<label>
Firstname
<input name="firstname" />
</label>
<label>
Lastname
<input name="lastname" />
</label>
sur
<label for="firstname">Firstname</label>
<input name="firstname" id="firstname" />
<label for="lastname">Lastname</label>
<input name="lastname" id="lastname" />
Principalement parce que cela rend le HTML plus lisible. Et je pense en fait que mon premier exemple est plus facile à styliser avec CSS, car CSS fonctionne très bien avec les éléments imbriqués.
Mais c'est une question de goût, je suppose.
Si vous avez besoin de plus d'options de style, ajoutez une balise span.
<label>
<span>Firstname</span>
<input name="firstname" />
</label>
<label>
<span>Lastname</span>
<input name="lastname" />
</label>
Le code est toujours mieux à mon avis.
142 votes
Un des grands avantages de mettre le
<input />
à l'intérieur de la<label>
c'est que vous pouvez omettrefor
yid
:<label>My text <input /></label>
dans votre exemple. C'est tellement plus joli !17 votes
Bien que je convienne que
input
n'appartient pas sémantiquement à l'intérieur d'unlabel
J'ai remarqué aujourd'hui que le les développeurs de Bootstrap ne sont pas d'accord avec moi . Certains éléments, comme les cases à cocher en ligne, sont stylisés différemment selon que l'on utilise ou non l'attributinput
est à l'intérieur ou à l'extérieur.7 votes
BTW c'était une très mauvaise idée de créer
<label for="id">
car j'ai de multiples formulaires sur la page et je ne peux pas utiliserid
pour de nombreux widgets sans tomber dansunique id per page
piège. La seule façon acceptable d'accéder à ce widget est parform + widget_name
.9 votes
@MaxZoom si vous avez tellement de formulaires différents sur votre page avec des noms de champs identiques que vous avez du mal à trouver des ID uniques, vous devriez peut-être reconsidérer un peu la conception de votre page, IMHO ; évidemment, je ne connais pas votre situation, mais c'est juste sent mauvais pour moi
5 votes
@kenbellows C'est une idée du designer/de l'entreprise (pas la mienne) de mettre deux formulaires de recherche sur une page. Les meilleures pratiques en matière d'expérience utilisateur peuvent évoluer au fil du temps, mais le code HTML doit être suffisamment flexible (IMHO) pour couvrir tout scénario visible.
1 votes
@kenbellows Je ne pense pas qu'il s'agisse d'une odeur de code. Les aides Html d'ASP.NET MVC (Html.EditFor, etc...) sont capables de trouver des noms/identifiants raisonnables en se basant sur le modèle de données (ce n'est pas parfait, bien sûr). À moins que vous n'implémentiez quelque chose de ce genre côté client (par exemple, knockout), l'utilisation de vues partielles ou de contrôles répétitifs posera immédiatement ce problème. Si j'ai quelque chose qui se répète, cela devient très contextuel quant à la façon de créer des identifiants uniques et, selon moi, cela n'ajoute pas vraiment de valeur.
1 votes
Une note complémentaire (concernant le commentaire de @Znarkus) "L'élément label peut contenir au maximum un descendant de type bouton, input, keygen, meter, output, progress, select, ou textarea".
0 votes
@Blazemonger Sémantiquement parlant, l'étiquette agit comme un contrôle pour le focus, donc pour les cases à cocher et les boutons radio qui sont sélectionnés par la zone carrée autour d'eux - c'est une utilisation correcte. Bien que je sois d'accord pour dire qu'il devrait y avoir un élément spécial "contrôle" uniquement.
0 votes
La deuxième méthode entraîne des problèmes d'analyse de Jsoup. Je ne peux pas obtenir la valeur de l'entrée dans ce label, ni avec
inputElement.val()
nilabelElement.val()
. Gros problème ici....1 votes
@kenbellows Je ne suis pas d'accord pour dire que c'est une odeur de code. Il existe de nombreux cas d'utilisation parfaitement valables pour la réutilisation de formulaires dans une page. Par exemple, un tableau avec édition sur place peut avoir une instance d'un seul formulaire sur chaque ligne et potentiellement dans plusieurs colonnes. La fonctionnalité de recherche dans les sections de la page en est un autre.
0 votes
En gardant
input
à l'intérieur delabel
semblent causer problèmes d'alignement