<select>: Елемент вибору HTML
Елемент HTML <select>
(вибір) представляє контрольний елемент, що надає меню з варіантів вибору.
Спробуйте його в дії
Приклад вище показує типове використання <select>
. Елемент отримує атрибут id
, котрий дає змогу пов'язати його з елементом <label>
для потреб доступності, а також атрибут name
, котрий представляє ім'я відповідної порції даних при поданні форми на сервер. Кожен варіант меню описується елементом <option>
, дочірнім щодо <select>
.
Кожен елемент <option>
повинен мати атрибут value
, що містить значення, котре буде подано на сервер, якщо відповідний варіант – обраний. Якщо атрибута value
немає, то усталеним значенням є текст всередині елемента. Щоб елемент option
був обраним при першому завантаженні сторінки, слід вказати атрибут selected
елемента <option>
.
У JavaScript елемент <select>
представляється об'єктом HTMLSelectElement
, і цей об'єкт має властивість value
, яка вміщає значення вибраного <option>
.
Елемент <select>
має певні унікальні атрибути для контролю над собою, наприклад, multiple
для задання можливості (чи неможливості) вибору кількох варіантів та size
з кількістю варіантів, котру можна обрати водночас. Також він приймає більшість звичних атрибутів полів вводу, наприклад, required
, disabled
, autofocus
тощо.
Можна вкладати елементи <option>
в елементи <optgroup>
, щоб створити розмежовані групи варіантів всередині спадного списку. Також можна додавати елементи <hr>
, щоб утворювати розділювачі, що служать візуальними розривами між варіантами.
Інші приклади використання доступні за посиланням: Нативні віджети форми: Вміст спадного списку.
Атрибути
Цей елемент приймає глобальні атрибути.
autocomplete
(автозаповнення)Рядок, що дає підказку функціональності автозаповнення користувацького агента. Повний список значень та деталей про те, як використовувати автозаповнення, доступний за посиланням: HTML-атрибут автозаповнення.
autofocus
(автофокус)Цей булів атрибут дає змогу вказати, що контрольний елемент повинен отримати фокус введення, коли сторінка завантажилась. Лише один елемент форми в документі може мати атрибут
autofocus
.disabled
(вимкнений)Цей булів атрибут показує, що користувач не може взаємодіяти з контрольним елементом. Якщо цей атрибут не вказаний, то контрольний елемент успадковує це налаштування від контейнерного елемента, наприклад,
<fieldset>
; якщо немає контейнерного елемента з атрибутомdisabled
, то контрольний елемент є увімкненим.form
(форма)Елемент
<form>
, з котрим елемент<select>
пов'язаний (його форма-власник). Значення цього атрибута мусить відповідати значенню атрибутаid
елемента<form>
в тому самому документі. (Якщо цей атрибут не вказаний, то<select>
пов'язується з елементом<form>
, котрий є його предком, якщо такий предок є.)Цей атрибут дає змогу пов'язувати елементи
<select>
із формами будь-де в документі, не поміщаючи їх у відповідний<form>
. Також така поведінка змушує нехтувати батьківським елементом<form>
.multiple
(декілька)Цей булів атрибут показує, що зі списку можуть бути обрані кілька варіантів. Якщо він не вказаний, то лише один варіант може бути обраним водночас. Коли вказаний
multiple
, більшість браузерів замість однорядкового спадного списку показують віконце списку з прокруткою.name
(ім'я)Цей атрибут використовується, щоб вказати ім'я контрольного елемента.
required
(обов'язковий)Булів атрибут, що показує, що повинен бути обраний варіант із непустим значенням-рядком.
size
(розмір)Якщо контрольний елемент поданий у вигляді віконця списку з прокруткою (наприклад, коли вказано
multiple
), цей атрибут представляє кількість рядів списку, контрі повинні бути видимі водночас. Браузери не зобов'язані показувати елемент вибору як віконце списку з прокруткою. Усталене значення –0
.[!NOTE] Згідно зі специфікацією HTML, усталеним значенням
size
має бути1
; втім, на практиці виявилось, що це ламає певні вебсайти, і що жоден інший браузер так не робить, тому Mozilla вирішила продовжити повертати в Firefox0
на постійній основі.
Примітки щодо використання
Вибір декількох варіантів
На настільних комп'ютерах доступна низка способів обрати декілька варіантів у елементі <select>
з атрибутом multiple
:
Користувачі миші можуть утримувати клавішу Ctrl, Command чи Shift (залежно від того, що має зміст для вашої операційної системи), а потім клацнути декілька варіантів, щоб обрати їх або скасувати вибір.
[!WARNING] Механізм вибору декількох несуміжних елементів за допомогою клавіатури, описаний нижче, схоже, наразі працює лише в Firefox.
На macOS комбінації клавіш Ctrl + вгору та Ctrl + вниз конфліктують з усталеними комбінаціями контролю місії та вікон застосунків, тож ці усталені комбінації слід відключити, перш ніж описаний нижче механізм запрацює.
Користувачі клавіатури можуть обрати декілька суміжних елементів наступним чином:
-
Перевести фокус на елемент
<select>
(на приклад, використовуючиTab
).
-
Обрати елемент нагорі чи внизу діапазону, котрий бажають обрати, використовуючи курсорні клавіші
вгору
та
вниз
, щоб рухатись вгору та вниз по списку варіантів.
-
Утримуючи клавішу
Shift
, за допомогою курсорних клавіш
вгору
та
вниз
, аби збільшити чи зменшити діапазон обраних елементів.
Користувачі клавіатури можуть обрати декілька несуміжних елементів наступним чином:
-
Перевести фокус на елемент
<select>
(на приклад, використовуючиTab
).
-
Утримуючи клавішу
Ctrl
, за допомогою курсорних клавіш
вгору
та
вниз
, змінювати "сфокусований" варіант вибору, тобто той, котрий стане обраним, якщо так вирішить користувач. "Сфокусований" варіант вибору підсвічується пунктирним контуром, – так само як сфокусоване за допомогою клавіатури посилання.
-
Натискаючи клавішу
пробіл
, обрати чи скасувати вибір "сфокусованого" варіанту вибору.
Оформлення засобами CSS
Елемент <select>
відомий складністю ефективного оформлення засобами CSS. Можна повпливати на певні аспекти, як і в будь-якого елемента, – наприклад, оперуючи рамковою моделлю, використаним шрифтом тощо, а також можна використати властивість appearance
, щоб усунути усталений системний вигляд.
Втім, ці властивості не дають сталих результатах на всіх браузерах, тож важко робити речі штибу шикування різних типів елементів форми одне з одним в один стовпець. Внутрішня структура елемента <select>
– складна, а також важка для контролю. При потребі отримати повний контроль слід розглянути варіанти використання бібліотеки з добрими можливостями з оформленнями віджетів форми та розгортання власного спадного меню за допомогою несемантичних елементів і JavaScript, а також WAI-ARIA для надання семантики.
Більше інформації про оформлення <select>
:
- Оформлення HTML-форм
- Поглиблене оформлення HTML-форм
- Властивість
field-sizing
, яка контролює те, чи отримують елементи<select>
розмір відповідно до вміщених у них варіантів.
Доступність
Елемент <hr>
усередині <select>
слід розглядати як суто декоративний, оскільки він наразі не відображається у дереві доступності, а тому не видається допоміжним технологіям.
Приклади
Простий select
Наступний приклад створює украй просте спадне меню, другий варіант котрого є усталено обраним.
<!-- Спершу буде обрано друге значення -->
<select name="choice">
<option value="first">Перше значення</option>
<option value="second" selected>Друге значення</option>
<option value="third">Третє значення</option>
</select>
Результат
Select з групуванням варіантів
Наступний приклад створює спадне меню з групуванням за допомогою <optgroup>
і <hr>
, щоб користувачу було легше зрозуміти вміст цього спадного меню.
<label for="hr-select">Ваша улюблена їжа</label> <br />
<select name="foods" id="hr-select">
<option value="">Оберіть їжу</option>
<hr />
<optgroup label="Фрукти">
<option value="apple">Яблука</option>
<option value="banana">Банани</option>
<option value="cherry">Вишні</option>
<option value="damson">Сливи</option>
</optgroup>
<hr />
<optgroup label="Овочі">
<option value="artichoke">Артишоки</option>
<option value="broccoli">Броколі</option>
<option value="cabbage">Капуста</option>
</optgroup>
<hr />
<optgroup label="М'ясо">
<option value="beef">Яловичина</option>
<option value="chicken">Курка</option>
<option value="pork">Свинина</option>
</optgroup>
<hr />
<optgroup label="Риба">
<option value="cod">Тріска</option>
<option value="haddock">Пікша</option>
<option value="salmon">Лосось</option>
<option value="turbot">Калкан</option>
</optgroup>
</select>
Результат
Поглиблений приклад select з використанням багатьох можливостей
Наступний приклад – складніший, він показує більше можливостей, котрі можна використати з елементом <select>
:
<label
>Будь ласка, оберіть одну чи більше тваринок:
<select name="pets" multiple size="4">
<optgroup label="Чотирилапі">
<option value="dog">Пес</option>
<option value="cat">Кіт</option>
<option value="hamster" disabled>Хом'як</option>
</optgroup>
<optgroup label="Птахи">
<option value="parrot">Папуга</option>
<option value="macaw">Ара</option>
<option value="albatross">Альбатрос</option>
</optgroup>
</select>
</label>
Результат
Ви побачите, що
- Можна обрати декілька варіантів, адже додано атрибут
multiple
. - Атрибут
size
приводить до того, що водночас видно лише 4 пункти; щоб побачити усі варіанти, можна використати прокручування. - Ми додали елементи
<optgroup>
, щоб поділити варіанти на різні групи. Це суто візуальне групування, чиє відображення в цілому складається із назви групи грубим шрифтом та відступу на варіантах. - Варіант "Хом'як" має атрибут
disabled
, а тому не може бути обраний узагалі.
Технічний підсумок
Категорії вмісту | Потоковий вміст, оповідальний вміст, інтерактивний вміст, перелічений, підписний, скиданий та подавальний асоційований з формою елемент |
---|---|
Дозволений вміст |
Нуль чи більше елементів <option> ,
<optgroup> або <hr> .
|
Пропуск тега | Немає; і початковий, і кінцевий теги – обов'язкові. |
Дозволені предки | Будь-які елементи, котрі приймають оповідальний вміст. |
Неявна роль ARIA |
combobox , якщо немає атрибута multiple і немає атрибута size зі значенням, більшим за 1, інакше – listbox
|
Дозволені ролі ARIA |
menu , якщо немає атрибута multiple і немає атрибута size зі значенням, більшим за 1, інакше – всі ролі недозволені
|
Інтерфейс DOM | HTMLSelectElement |
Специфікації
Специфікація |
---|
HTML Standard (HTML) # the-select-element |
Сумісність із браузерами
desktop | mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
select
|
Chrome Full support Так | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support Так | Opera Full support Так | Safari Full support Так | WebView Android Full support Так | Chrome Android Full support Так | Firefox for Android Full support 4 | Opera Android Full support Так | Safari on iOS Full support Так | Samsung Internet Full support Так |
disabled
|
Chrome Full support Так | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support Так | Opera Full support Так | Safari Full support Так | WebView Android Full support Так | Chrome Android Full support Так | Firefox for Android Full support 4 | Opera Android Full support Так | Safari on iOS Full support Так | Samsung Internet Full support Так |
form
|
Chrome Full support Так | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support Так | Opera Full support Так | Safari Full support Так | WebView Android Full support Так | Chrome Android Full support Так | Firefox for Android Full support 4 | Opera Android Full support Так | Safari on iOS Full support Так | Samsung Internet Full support Так |
multiple
|
Chrome Full support Так | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support Так | Opera Full support Так | Safari Full support Так | WebView Android Full support Так | Chrome Android Full support Так | Firefox for Android Full support 4 | Opera Android Full support Так | Safari on iOS Full support Так | Samsung Internet Full support Так |
name
|
Chrome Full support Так | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support Так | Opera Full support Так | Safari Full support Так | WebView Android Full support Так | Chrome Android Full support Так | Firefox for Android Full support 4 | Opera Android Full support Так | Safari on iOS Full support Так | Samsung Internet Full support Так |
required
|
Chrome Full support Так | Edge Full support 12 | Firefox Full support 4 | Internet Explorer Full support 10 | Opera Full support Так | Safari Full support Так | WebView Android Full support Так | Chrome Android Full support Так | Firefox for Android Full support 4 | Opera Android Full support Так | Safari on iOS Full support Так | Samsung Internet Full support Так |
size
|
Chrome Full support Так | Edge Full support 12 | Firefox Full support 1 | Internet Explorer Full support Так | Opera Full support Так | Safari Full support Так | WebView Android Full support Так | Chrome Android Full support Так | Firefox for Android Full support 4 | Opera Android Full support Так | Safari on iOS Full support Так | Samsung Internet Full support Так |
Дивіться також
- Події, що їх викидає
<select>
:change
,input
- Елемент
<option>
- Елемент
<optgroup>