HTML <select> Тег
HTML-тег <select> создаёт выпадающий список <option>. Атрибуты, метки, multiple, size, required и заглушки.
HTML-тег <select> создаёт выпадающий список параметров. Пользователь нажимает на элемент управления, список раскрывается, и пользователь выбирает одно значение (или несколько — с атрибутом multiple). Это один из основных элементов форм, используемый для всего: от выбора страны до меню сортировки.
На этой странице рассматриваются синтаксис, все атрибуты, доступность (подписи), поведение multiple / size / required, паттерн отключённой-заглушки, а также различия между <select> и полем ввода с <datalist>.
Тег <option> определяет каждый пункт списка и располагается внутри <select>. По умолчанию выбран первый вариант; добавьте атрибут selected к нужному варианту, чтобы изменить предвыбранный пункт. Используйте <optgroup> для группировки связанных вариантов под полужирным нередактируемым заголовком.
Чтобы отправить выбранное значение, задайте <select> атрибут name и поместите элемент в <form> (или свяжите с формой через атрибут form). На сервер отправляется значение value выбранного варианта.
Если нужно отправить данные на сервер или прочитать список из скрипта, у <select> должен быть атрибут name, и он должен быть связан с <form>.
Всегда подписывайте <select>
Сам по себе <select> не даёт пользователю никакого текстового описания того, что он выбирает, и программы экранного доступа не объявляют ничего осмысленного. Всегда используйте его вместе с <label>: задайте id у <select> и укажите этот id в атрибуте for метки. Это также позволяет пользователю нажать на текст метки, чтобы перейти к элементу управления.
Пример <select> с подписью
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
<label for="topic">Choose a topic:</label>
<select id="topic" name="topic">
<option value="html">HTML</option>
<option value="css">CSS</option>
<option value="js">JavaScript</option>
</select>
</body>
</html>Если видимая подпись невозможна, используйте aria-label="..." на <select>, чтобы вспомогательные технологии всё равно сообщали о его назначении.
Синтаксис
Тег <select> является парным. Содержимое записывается между открывающим (<select>) и закрывающим (</select>) тегами.
Пример HTML-тега <select>:
Пример HTML-тега <select>
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
<form>
<select>
<option value="books">Books</option>
<option value="html">HTML</option>
<option value="css">CSS</option>
<option value="php">PHP</option>
<option value="js">JavaScript</option>
</select>
</form>
</body>
</html>Пример HTML-тега <select> с тегом <optgroup>:
Пример HTML-тега <select> с тегом <optgroup>
<!DOCTYPE html>
<html>
<head>
<title>Window title of the page</title>
</head>
<body>
<select aria-label="Books and Snippets">
<optgroup label="Books">
<option value="html">HTML</option>
<option value="css">CSS</option>
</optgroup>
<optgroup label="Snippets">
<option value="git">Git</option>
<option value="java">Java</option>
</optgroup>
</select>
</body>
</html>В этом примере тег <optgroup> используется для объединения вариантов в группы.
Выбор нескольких вариантов
Добавьте boolean-атрибут multiple, чтобы пользователь мог выбрать более одного варианта. Тогда элемент управления отображается в виде прокручиваемого списка, а не выпадающего меню. Используйте size, чтобы задать количество видимых строк. Чтобы выбрать несколько значений, пользователь удерживает Ctrl (Cmd на Mac) при нажатии или Shift для выбора диапазона.
Пример multiple и size
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
<label for="langs">Languages you know:</label>
<select id="langs" name="langs" multiple size="4">
<option value="html">HTML</option>
<option value="css">CSS</option>
<option value="js">JavaScript</option>
<option value="php">PHP</option>
<option value="sql">SQL</option>
</select>
</body>
</html>При отправке <select> с атрибутом multiple каждое выбранное значение передаётся под одним и тем же именем name (например, langs=html&langs=js).
Добавление заглушки
У <select> всегда есть значение, поэтому нативного placeholder не существует. Распространённый обходной путь — первый вариант, который пустой, предвыбранный, отключённый и скрытый: он показывает подсказку, не может быть выбран повторно и остаётся скрытым после открытия списка. Сочетайте его с required, чтобы форма не отправлялась без реального выбора.
Пример варианта-заглушки
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>
<form>
<label for="size">Choose a size:</label>
<select id="size" name="size" required>
<option value="" disabled selected hidden>Choose one</option>
<option value="s">Small</option>
<option value="m">Medium</option>
<option value="l">Large</option>
</select>
<button type="submit">Submit</button>
</form>
</body>
</html>Поскольку у заглушки value пустое, атрибут required воспринимает это как «ничего не выбрано»: попытка отправить форму без выбора реального варианта вызовет встроенное сообщение проверки браузера.
<select> vs. <datalist>
<select> вынуждает пользователя выбирать из фиксированного списка. Если вместо этого нужно текстовое поле, предлагающее значения, которые пользователь может принять или проигнорировать, — это задача для <datalist>, подключённого к текстовому <input> через атрибут list, а не функция <select>. Это отдельный элемент с иным поведением; используйте его, когда ввод с автодополнением подходит лучше, чем строгий выпадающий список.
Атрибуты
| Атрибут | Значение | Описание |
|---|---|---|
| autofocus | autofocus | Задаёт, что список должен получить фокус после загрузки страницы. |
| disabled | disabled | Указывает, что список отключён и пользователь не может взаимодействовать с ним. |
| form | form_id | Связывает <select> с <form> по id этой формы, так что элемент управления может располагаться вне тега <form> в разметке и при этом отправляться вместе с ней. |
| multiple | multiple | Указывает, что можно выбрать более одного варианта. Способ выбора нескольких вариантов зависит от операционной системы. В Windows нужно удерживать кнопку CTRL, на Mac — кнопку CMD. |
| name | name | Задаёт имя выпадающего меню. Может использоваться для доступа к данным формы после её отправки или для связи с элементом JavaScript. |
| required | required | Указывает, что выбор варианта является обязательным. |
| size | number | Указывает количество видимых вариантов в выпадающем списке. Если значение атрибута «size» больше 1 и меньше общего числа вариантов в списке, браузер автоматически добавит прокрутку, чтобы показать, что есть ещё варианты. |
Тег <select> поддерживает Глобальные атрибуты и Атрибуты событий.
Стилизация HTML-тега <select>
Элемент <select> частично отрисовывается операционной системой, поэтому его сложно полностью стилизовать средствами CSS, и результат различается в зависимости от браузера. Вы можете надёжно задать шрифт, цвета, отступы и блочную модель для самого элемента. Чтобы заменить нативную стрелку выпадающего списка собственной, сбросьте системное оформление с помощью appearance: none и добавьте свою стрелку (например, через background-image или обёртку с псевдоэлементом). Раскрытый список вариантов и стилизация отдельных вариантов остаются лишь частично управляемыми; для идеально точных, полностью пользовательских выпадающих списков разработчики обычно создают виджет из элементов, отличных от <select>, с использованием JavaScript.