717 votes

Dois-je placer les éléments d'entrée à l'intérieur d'un élément d'étiquette ?

Existe-t-il une meilleure pratique concernant l'imbrication des éléments suivants label y input Les éléments HTML ?

de manière classique :

<label for="myinput">My Text</label>
<input type="text" id="myinput" />

o

<label for="myinput">My Text
   <input type="text" id="myinput" />
</label>

142 votes

Un des grands avantages de mettre le <input /> à l'intérieur de la <label> c'est que vous pouvez omettre for y id : <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'un label 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'attribut input 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 utiliser id pour de nombreux widgets sans tomber dans unique id per page piège. La seule façon acceptable d'accéder à ce widget est par form + widget_name .

597voto

superUntitled Points 8085

De w3 :

L'étiquette peut être placée avant, après ou autour du contrôle associé. contrôle associé.


<label for="lastname">Last Name</label>
<input type="text" id="lastname" />

o

<input type="text" id="lastname" />
<label for="lastname">Last Name</label>

o

<label>
   <input type="text" name="lastname" />
   Last Name
</label>

Notez que la troisième technique ne peut pas être utilisée lorsqu'un tableau est utilisé pour la mise en page, avec l'étiquette dans une cellule et son champ de formulaire associé dans une autre cellule.

L'un ou l'autre est valable. J'aime utiliser le premier ou le deuxième exemple, car il vous permet de mieux contrôler le style.

16 votes

En tant que réponses, toutes sont valables, mais dans ma propre pratique, je me contente généralement du premier exemple donné ici par superUntitled pour les zones de texte, les zones de texte et les sélections. Mais pour les boutons radio et les cases à cocher, j'utilise généralement le troisième exemple, où je veux que l'entrée soit placée avant le texte d'accompagnement et où je ne veux pas le même type de largeur fixe et/ou flottante que le reste des étiquettes et des champs. Ainsi, sur un formulaire donné, il se peut que j'utilise ces deux formats ensemble.

7 votes

Je me demande si <label for="inputbox"><input id="inputbox" type="text" /></label> est un succès selon leurs critères.

0 votes

@FelipeAls pas difficile à coder ? Lors de l'imbrication de composants dans asp.net, leur id est préfixé avec l'id de tous leurs 'ancêtres' conteneurs. Donc vous ne pouvez pas facilement deviner quelle serait la valeur for. Bien sûr, vous seriez toujours capable d'obtenir cette valeur, mais c'est inutilement compliqué par rapport à la construction de label input/ /label.

81voto

Znarkus Points 5025

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.

4 votes

Inclure l'entrée dans l'étiquette revient à utiliser le HTML pour la mise en page.

8 votes

J'aime cette solution également pour des cas comme celui-ci : <label>Expires after <input name="exp" /> days</label> (l'étiquette est avant et après l'élément d'entrée)

0 votes

Je pense que le dernier exemple, à part les attributs for et id, n'est pas vraiment différent d'une étiquette située à côté de l'entrée, et que les deux sont enveloppés dans une balise div , li ou quoi que ce soit, n'est-ce pas ?

44voto

Terry Points 742

Si vous incluez la balise input dans la balise label, vous n'avez pas besoin d'utiliser l'attribut 'for'.

Cela dit, je n'aime pas inclure la balise input dans mes étiquettes, car je pense qu'il s'agit d'entités distinctes, et non d'une seule entité.

10 votes

La fonction for vous oblige cependant à utiliser un id, ce qui rend la structuration hiérarchique de la mise en page très difficile :-(

19voto

Parrots Points 10968

Personnellement, j'aime garder l'étiquette à l'extérieur, comme dans votre deuxième exemple. C'est pourquoi l'attribut FOR est présent. La raison en est que j'applique souvent des styles à l'étiquette, comme une largeur, pour que le formulaire ait l'air agréable (raccourci ci-dessous) :

<style>
label {
  width: 120px;
  margin-right: 10px;
}
</style>

<label for="myinput">My Text</label>
<input type="text" id="myinput" /><br />
<label for="myinput2">My Text2</label>
<input type="text" id="myinput2" />

Cela me permet d'éviter les tableaux et toutes ces saletés dans mes formulaires.

3 votes

Ne devriez-vous pas laisser la présentation à CSS, au lieu d'utiliser <br /> pour séparer les entrées ?

1 votes

@Znarkus - oui, normalement je les enveloppe dans des OL/LI pour gérer ce genre de formatage, c'était juste un exemple rapide et concis.

1 votes

@Parrots : Cela n'a pas beaucoup de sens sémantiquement, imo. Et si vous avez besoin de les envelopper, pourquoi ne pas simplement les envelopper avec l'étiquette ?

17voto

user470514 Points 91

Voir http://www.w3.org/TR/html401/interact/forms.html#h-17.9 pour les recommandations du W3.

Ils disent que cela peut être fait de l'une ou l'autre façon. Ils décrivent les deux méthodes comme explicites (utilisation de "for" avec l'identifiant de l'élément) et implicites (intégration de l'élément dans l'étiquette) :

Explicite :

L'attribut for associe une étiquette à un autre contrôle de manière explicite : la valeur de l'attribut for doit être la même que la valeur de l'attribut id de l'élément de contrôle associé.

Implicite :

Pour associer implicitement une étiquette à un autre contrôle, l'élément de contrôle doit se trouver dans le contenu de l'élément LABEL. Dans ce cas, l'élément LABEL ne peut contenir qu'un seul élément de contrôle.

0 votes

Je viens de découvrir que l'implicite ne fonctionne pas dans IE....une idée ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X