1189 votes

Comment créer une case à cocher avec une étiquette cliquable ?

Comment puis-je créer une case à cocher HTML dont l'étiquette est cliquable (ce qui signifie qu'en cliquant sur l'étiquette, la case à cocher est activée ou désactivée) ?

5 votes

2216voto

Wesley Murch Points 48959

Méthode 1 : Etiquette enveloppante

Enveloppez la case à cocher dans un label étiquette :

<label><input type="checkbox" name="checkbox" value="value">Text</label>

Méthode 2 : Utilisez le for Attribut

Utilisez le for (correspond à la case à cocher id ) :

<input type="checkbox" name="checkbox" id="checkbox_id" value="value">
<label for="checkbox_id">Text</label>

NOTE : L'ID doit être unique sur la page !

Explication

Puisque les autres réponses ne le mentionnent pas, une étiquette peut inclure jusqu'à 1 entrée et omettre l'élément for et il sera supposé qu'il s'agit de l'entrée qu'il contient.

Extrait de w3.org (c'est moi qui souligne) :

[L'attribut for] associe explicitement l'étiquette définie à un autre contrôle. Lorsqu'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. Lorsqu'elle est absente, l'étiquette définie est associée au contenu de l'élément.

Pour associer une étiquette à un autre contrôle de manière implicite, L'élément de contrôle doit se trouver dans le contenu de l'élément LABEL. . Dans ce cas, l'ÉTIQUETTE ne peut contenir que un élément de contrôle. L'étiquette elle-même peut être positionnée avant ou après le contrôle associé.

L'utilisation de cette méthode présente certains avantages par rapport à for :

  • Il n'est pas nécessaire d'attribuer un id à chaque case à cocher (génial !).

  • Il n'est pas nécessaire d'utiliser l'attribut supplémentaire dans le champ <label> .

  • La zone cliquable de l'entrée est également la zone cliquable de l'étiquette, de sorte qu'il n'y a pas deux endroits distincts où cliquer pour contrôler la case à cocher - un seul, quelle que soit la distance entre les boutons de l'étiquette. <input> et le texte réel de l'étiquette, et quel que soit le type de CSS que vous lui appliquez.

Démonstration avec quelques CSS :

label {
 border:1px solid #ccc;
 padding:10px;
 margin:0 0 10px;
 display:block; 
}

label:hover {
 background:#eee;
 cursor:pointer;
}

<label><input type="checkbox" />Option 1</label>
<label><input type="checkbox" />Option 2</label>
<label><input type="checkbox" />Option 3</label>

16 votes

J'adore, mais s'il vous plaît, modifiez-le à nouveau. Ce n'est bon que pour les cases à cocher. N'encourageons pas les gens à envelopper leurs autres entrées avec des étiquettes, car cela casse le système de grille et la réactivité mobile sera plus difficile à obtenir.

0 votes

Merci pour cela, j'ai fait un pas de plus et créé une bouton de contrôle sans afficher la case à cocher elle-même. Je me demande s'il y a un moyen d'utiliser uniquement les CSS...

1 votes

@Wesley. getbootstrap.com/css/#forms - ne pas envelopper les entrées avec <label> si cela rend les choses plus difficiles pour la réactivité mobile

59voto

Quentin Points 325526

Assurez-vous simplement que l'étiquette est associée à l'entrée.

<fieldset>
  <legend>What metasyntactic variables do you like?</legend>

  <input type="checkbox" name="foo" value="bar" id="foo_bar">
  <label for="foo_bar">Bar</label>

  <input type="checkbox" name="foo" value="baz" id="foo_baz">
  <label for="foo_baz">Baz</label>
</fieldset>

1 votes

Je ne comprends pas pourquoi vous avez donné le même nom aux deux cases à cocher, mais des valeurs différentes. Est-ce intentionnel ?

2 votes

@LarsH - Oui, c'est ainsi que vous créez des groupes de cases à cocher.

0 votes

Merci. Je regardais w3.org/wiki/HTML/Elements/input/checkbox et ça n'a pas été utile à cet égard.

15voto

Moje Points 1490

Vous pouvez également utiliser des pseudo-éléments CSS pour sélectionner et afficher vos étiquettes à partir de tous les attributs de valeur de votre case à cocher (respectivement).
Editar: Cela ne fonctionnera qu'avec les navigateurs basés sur webkit et blink (Chrome(ium), Safari, Opera....) et donc la plupart des navigateurs mobiles. Non Firefox ou le support IE ici.
Cela peut être utile uniquement lorsque vous intégrez webkit/blink dans vos applications.

Toutes les étiquettes des pseudo-éléments seront cliquables.

[type=checkbox]:after {
  content: attr(value);
  margin: -3px 15px;
  vertical-align: top;
  white-space: nowrap;
  display: inline-block;
}

<input type="checkbox" value="My checkbox label value" />

Démonstration : http://codepen.io/mrmoje/pen/oteLl , + L'essentiel

0 votes

Vrai. Gecko et Trident et gecko ne semblent pas aimer cela. Cela fonctionnera uniquement avec Webkit et Blink. Je vais mettre à jour la réponse

7 votes

Voté à la baisse. Même si c'est possible, c'est une mauvaise méthode - elle ne fonctionne pas sur de nombreux navigateurs et n'est pas bonne pour l'accessibilité.

0 votes

Les problèmes de compatibilité mis à part, cette solution n'est pas aussi sémantique que la réponse supérieure car il n'y a pas d'association directe dans le balisage entre le <label> et le <input>.

9voto

Dave Kiss Points 5031
<label for="vehicle">Type of Vehicle:</label>
<input type="checkbox" id="vehicle" name="vehicle" value="Bike" />

3voto

ShaneBlake Points 4844
<label for="myInputID">myLabel</label><input type="checkbox" id="myInputID" name="myInputID />

1 votes

Étant donné que cela peut prêter à confusion pour certains lecteurs, vous devez modifier l'élément name à quelque chose de différent de la valeur présente dans l'attribut for y id puisque ces deux éléments sont liés, alors que name ne l'est pas (il est néanmoins obligatoire de l'inclure, je crois).

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