Menu

Bouton radio HTML : groupes, choix par défaut et style

Comment fonctionnent les boutons radio en HTML : le regroupement avec l'attribut name, un choix par défaut avec checked, les groupes obligatoires, lire la valeur choisie en JavaScript, le comportement au clavier, et les styliser en cercles ou en cartes personnalisés.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Comment faire des boutons radio en HTML

Les boutons radio permettent au lecteur de choisir exactement une option dans un groupe. Chaque option est un <input type="radio">, et c'est leur name commun qui en fait un groupe. Choisissez une taille et appuyez sur Order :

Le formulaire envoie une seule paire, size=m : le name du groupe et la value du bouton sélectionné. Les éléments :

  • Le même name sur chaque bouton du groupe. En sélectionner un désélectionne les autres.
  • Une value différente sur chacun. C'est ce que reçoit le serveur. Un radio sans value envoie on, ce qui n'apprend rien au serveur.
  • checked sur l'option par défaut.
  • Un <label> autour de chacun, pour que le texte soit cliquable, et un <fieldset> avec <legend> pour que les lecteurs d'écran annoncent la question (« Size ») avec chaque option.

Le name fait le groupe

Des radios avec des noms différents forment des groupes séparés, et chaque groupe a sa propre sélection. Cet exemple a deux groupes, plus un ensemble cassé où chaque radio a reçu par erreur son propre nom :

Cliquez sur les trois du groupe cassé : ils restent tous sélectionnés et aucun ne peut plus être désactivé, le pire des deux mondes. Les radios se regroupent par name au sein d'un même formulaire, donc deux formulaires peuvent chacun avoir leur propre groupe name="size".

Groupes obligatoires et absence de choix par défaut

required sur n'importe quel radio du groupe signifie que l'un d'eux doit être sélectionné avant l'envoi du formulaire. Omettre checked oblige le lecteur à choisir activement, ce qui est juste quand il n'y a pas de choix par défaut raisonnable :

Appuyez sur Continue sans choisir et le navigateur bloque l'envoi avec un message. Dès qu'une option est choisie, tout le groupe est valide. Un groupe sans sélection qui n'est pas obligatoire n'envoie rien du tout, comme une case à cocher non cochée.

Un clic peut sélectionner un radio mais jamais le désélectionner. Si « pas de réponse » doit rester possible après un choix, ajoutez une option explicite pour cela.

Lire la valeur sélectionnée en JavaScript

form.elements.name renvoie tout le groupe, et son .value est la valeur du radio sélectionné (une chaîne vide s'il n'y en a aucun). L'événement change se déclenche sur le radio qui vient d'être sélectionné :

L'écouteur est sur le formulaire, il capte donc un changement dans n'importe lequel de ses champs. Hors d'un formulaire, trouvez le radio sélectionné avec document.querySelector('input[name="period"]:checked').

Comportement au clavier

Un groupe de radios est un seul arrêt dans l'ordre de tabulation. Tab entre dans le groupe en se posant sur le radio sélectionné (ou, s'il n'y en a aucun, sur le premier), et les flèches déplacent la sélection entre les options. Un nouveau Tab quitte le groupe. Ce comportement est offert par de vrais inputs radio qui partagent un name, et c'est une raison de plus de ne pas reconstruire des radios avec des éléments <div>.

Styliser les boutons radio

accent-color recolore le radio natif. appearance: none vous laisse dessiner votre propre cercle. Et comme un radio masqué peut toujours être sélectionné via son label, un groupe peut ressembler à un ensemble de cartes tout en gardant tout le comportement radio :

Le cercle personnalisé n'est qu'une bordure épaisse quand il est coché. Les cartes masquent l'input avec opacity: 0 plutôt qu'avec display: none, pour qu'il reste focalisable et que les flèches marchent toujours, et :has(input:checked) stylise la carte sélectionnée. :has() fonctionne dans les versions actuelles de Chrome, Firefox et Safari.

Radio, case à cocher ou select ?

UtilisezQuand
Des boutons radioUn choix parmi quelques options (de 2 à 6 environ) qui doivent toutes être visibles
Des cases à cocherN'importe quel nombre de choix, y compris aucun
Un <select>Un choix dans une longue liste, comme des pays (voir liste déroulante select)

Erreurs fréquentes

  • Des name différents dans un même groupe. Chaque radio peut être sélectionné et aucun ne peut être effacé.
  • Pas de value. Le serveur reçoit on quel que soit le choix.
  • Masquer l'input avec display: none dans un design personnalisé. Il ne peut plus recevoir le focus ni être utilisé au clavier.
  • Pas de <fieldset> ni de <legend>. Les lecteurs d'écran annoncent « Small, bouton radio » sans la question qui va avec.
  • Un seul bouton radio pour une case « J'accepte ». Il ne peut jamais être décoché ; utilisez une case à cocher.
  • checked sur plusieurs radios d'un groupe. Seul le dernier finit sélectionné.

Questions fréquentes

Comment faire des boutons radio en HTML ?

Écrivez un <input type="radio"> par option, donnez-leur à tous le même name et une value différente, et placez chacun dans un <label> : <label><input type="radio" name="size" value="m"> Medium</label>. Le nom partagé en fait un seul groupe où une seule option peut être choisie.

Pourquoi je peux sélectionner plusieurs boutons radio ?

Les boutons ne partagent pas le même name. Les boutons radio ne forment un groupe que par un name identique (dans le même formulaire), et un seul bouton par groupe peut être sélectionné.

Comment récupérer la valeur du bouton radio sélectionné en JavaScript ?

Utilisez form.elements.size.value, où size est le nom du groupe ; cela renvoie la valeur du bouton sélectionné, ou une chaîne vide si aucun ne l'est. Sans formulaire : document.querySelector('input[name="size"]:checked')?.value.

Comment définir un bouton radio par défaut ?

Ajoutez checked à un bouton du groupe : <input type="radio" name="plan" value="free" checked>. Si plusieurs l'ont, c'est le dernier qui l'emporte.

Peut-on décocher un bouton radio ?

Pas en cliquant dessus ; un clic ne fait que sélectionner. Proposez une option « Aucun », réinitialisez le formulaire, ou définissez button.checked = false en JavaScript. Si le choix doit être facultatif et annulable, une case à cocher ou un select conviendra peut-être mieux.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER