Menu

Select HTML : liste déroulante, option, optgroup, multiple

Comment faire une liste déroulante en HTML avec <select> et <option> : valeurs, option par défaut ou placeholder, required, groupes d'options, sélection multiple, lire et définir la valeur en JavaScript, et styliser la flèche.

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

Comment faire une liste déroulante en HTML

Une liste déroulante est un élément <select> avec un <option> pour chaque choix. La value de chaque option est ce qu'envoie le formulaire ; le texte entre les balises est ce que voit le lecteur. Choisissez une option et appuyez sur Submit :

Le formulaire envoie language=js : le name du select et la value de l'option choisie. selected fixe la valeur par défaut ; sans lui, la première option est choisie. Si une option n'a pas de value, c'est son texte qui est envoyé.

Reliez le label au select avec for et id (ou en l'entourant) pour qu'un clic sur le label mette le focus sur la liste et que les lecteurs d'écran l'annoncent.

Attributs de select et d'option

ÉlémentAttributRôle
<select>nameLa clé sous laquelle la valeur est envoyée
<select>requiredUne vraie option doit être choisie, pas une première option vide servant de placeholder
<select>multiplePlusieurs options peuvent être choisies
<select>sizeLe nombre de lignes visibles (la transforme en zone de liste)
<select>disabledToute la liste est désactivée et n'est pas envoyée
<option>valueCe qui est envoyé quand elle est choisie
<option>selectedChoisie au chargement de la page
<option>disabledAffichée mais impossible à choisir
<optgroup>labelLe titre du groupe

Une option placeholder avec required

Un select a toujours une valeur, donc sans placeholder, la première vraie option est envoyée même si le lecteur n'a jamais touché la liste. Une première option vide règle cela, et required bloque l'envoi tant qu'une vraie option n'est pas choisie :

Appuyez sur Continue avant de choisir : le navigateur refuse et vous demande de sélectionner un élément. Le placeholder a value="", ce que required considère comme vide, et disabled pour qu'il ne puisse plus être choisi une fois un pays sélectionné.

Regrouper les options avec optgroup

<optgroup label="..."> place un titre au-dessus d'un ensemble d'options. Le titre n'est pas sélectionnable :

Les groupes ne peuvent pas être imbriqués : une liste n'a qu'un seul niveau de titres, pas plus. disabled sur un <optgroup> désactive toutes ses options.

Sélection multiple

multiple permet au lecteur de choisir plusieurs options, et transforme la liste déroulante en zone de liste. Maintenez Ctrl (Cmd sur Mac) pour ajouter des options une par une, ou Maj pour sélectionner une plage :

Le formulaire envoie skills=html et skills=css : le même nom une fois par option choisie. Beaucoup de gens ne connaissent pas le geste Ctrl+clic, donc pour quelques options, un groupe de cases à cocher est plus simple à utiliser.

Lire et définir la valeur en JavaScript

select.value lit et définit la valeur de l'option choisie, et l'événement change se déclenche quand le lecteur choisit une autre option. Un usage courant est une seconde liste dont les options dépendent de la première :

new Option(text, value) crée une option. select.selectedIndex est la position de l'option choisie, et select.selectedOptions liste les options choisies, ce qui permet de lire un select multiple.

Styliser un select

La liste ouverte est dessinée par le navigateur et le système d'exploitation, et on ne peut en styliser que peu de chose. La boîte fermée, si : appearance: none retire la flèche native, et une image de fond met la vôtre à sa place :

Le padding de fin supplémentaire laisse de la place à la flèche pour qu'un long texte d'option ne passe pas dessous. font: inherit compte autant ici que sur les boutons : les selects utilisent par défaut la petite police de formulaire du navigateur. Les options de la liste ouverte gardent l'apparence native. Chrome peut aussi styliser la liste ouverte si vous l'activez avec appearance: base-select ; les navigateurs qui ne le prennent pas en charge affichent la liste native. Un contrôle total partout demande un widget personnalisé construit avec ARIA, bien plus difficile à réussir qu'il n'y paraît.

Select, boutons radio ou datalist ?

UtilisezQuand
<select>Un choix dans une longue liste, ou quand la place manque
Des boutons radioUn choix parmi quelques options qui doivent toutes être visibles (voir bouton radio HTML)
<input> avec <datalist>Des suggestions, mais n'importe quelle valeur tapée est acceptée

Erreurs fréquentes

  • Pas de placeholder sur un choix obligatoire. La première vraie option est envoyée même si le lecteur ne l'a jamais choisie.
  • Un placeholder avec une vraie valeur, comme value="none". required le considère comme un choix valide. Utilisez value="".
  • Des options sans value quand le texte est long ou traduit. Le serveur reçoit le texte visible, qui change avec la langue.
  • multiple pour quelques options. Les cases à cocher sont plus simples à utiliser.
  • Écouter click sur les options. Utilisez change sur le <select> ; il se déclenche aussi pour les changements au clavier.
  • Pas de label. Un select qui n'a qu'un placeholder n'a plus de nom une fois une option choisie.

Questions fréquentes

Comment créer une liste déroulante en HTML ?

Utilisez <select> avec un <option> par choix : <select name="color"><option value="red">Red</option><option value="blue">Blue</option></select>. Donnez au select un name et un <label>.

Comment définir l'option par défaut d'un select ?

Ajoutez selected à cette option : <option value="blue" selected>Blue</option>. Sans cela, la première option est sélectionnée. En JavaScript, définissez select.value = 'blue'.

Comment ajouter un placeholder à un select ?

Faites de la première option une option vide et non sélectionnable : <option value="" disabled selected>Choose a country</option>. Ajoutez required au <select> pour que le formulaire ne puisse pas être envoyé tant qu'une vraie option n'est pas choisie.

Comment récupérer la valeur sélectionnée d'un select en JavaScript ?

select.value est la valeur de l'option sélectionnée. Pour son texte visible, utilisez select.selectedOptions[0].text, et écoutez l'événement change pour réagir quand le choix change. Pour un select multiple, parcourez select.selectedOptions.

Quelle est la différence entre un select et un datalist ?

Un <select> n'autorise que les options listées. Un <input> avec un <datalist> propose des options pendant que le lecteur tape mais accepte n'importe quel texte. Utilisez select quand la réponse doit être l'une des vôtres.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER