Кратко
СкопированоТег <option>
используется в интерактивных элементах управления для вёрстки одиночного пункта списка.
Пример
Скопировано<form> <label for="city-select">Ваш город</label> <select name="city" id="city-select"> <option value="">-- Выберите город --</option> <option value="petersburg">Санкт-Петербург</option> <option value="moscow">Москва</option> <option value="kazan">Казань</option> <option value="samara">Самара</option> <option value="perm">Пермь</option> <option value="novosibirsk">Новосибирск</option> </select></form>
<form> <label for="city-select">Ваш город</label> <select name="city" id="city-select"> <option value="">-- Выберите город --</option> <option value="petersburg">Санкт-Петербург</option> <option value="moscow">Москва</option> <option value="kazan">Казань</option> <option value="samara">Самара</option> <option value="perm">Пермь</option> <option value="novosibirsk">Новосибирск</option> </select> </form>
Подробно
СкопированоТегом <option>
размечается каждый элемент выпадающего списка <select>
, группы опций <optgroup>
или перечня <datalist>
.
Атрибуты
Скопированоdisabled
СкопированоАтрибут булевого типа. Если задан, то пункт списка нельзя выбрать. Часто браузеры выделяют такой элемент управления серым цветом, и на нём не срабатывают события клика или фокуса. Даже если атрибут не задан, элемент всё равно может быть отключён, если находится внутри тега <optgroup>
с заданным атрибутом disabled
.
<select name="city1"> <option value="">-- Выберите город --</option> <option value="petersburg">Санкт-Петербург</option> <option value="moscow">Москва</option> <option value="kazan">Казань</option> <option value="samara" disabled>Самара</option> <option value="perm">Пермь</option> <option value="novosibirsk">Новосибирск</option></select>
<select name="city1"> <option value="">-- Выберите город --</option> <option value="petersburg">Санкт-Петербург</option> <option value="moscow">Москва</option> <option value="kazan">Казань</option> <option value="samara" disabled>Самара</option> <option value="perm">Пермь</option> <option value="novosibirsk">Новосибирск</option> </select>
label
СкопированоЗначение этого атрибута задаёт текст пункта в списке. Если атрибут не задан, то в качестве значения берётся текстовое содержимое тега <option>
.
<select name="city2"> <option value="petersburg" selected label="Ленинград">Санкт-Петербург</option> <option value="samara" label="Куйбышев">Самара</option> <option value="volgograd" label="Сталинград">Волгоград</option> <option value="ekaterinburg" label="Свердловск">Екатеринбург</option></select>
<select name="city2"> <option value="petersburg" selected label="Ленинград">Санкт-Петербург</option> <option value="samara" label="Куйбышев">Самара</option> <option value="volgograd" label="Сталинград">Волгоград</option> <option value="ekaterinburg" label="Свердловск">Екатеринбург</option> </select>
Несмотря на то, что задано текстовое содержимое тега <option>
, в выпадающем списке отображаются значения из атрибутов label
:
selected
СкопированоАтрибут булевого типа. Если он задан, это означает, что пункт списка будет выбран по умолчанию. Если у выпадающего списка <select>
не задан атрибут multiple
, то атрибут selected
может быть задан только одному тегу <option>
в пределах этого списка. Если тегу <select>
задан атрибут multiple
, то атрибут selected
может быть задан любому количеству тегов <option>
в пределах списка.
<select name="city3"> <option value="">-- Выберите город --</option> <option value="petersburg">Санкт-Петербург</option> <option value="moscow">Москва</option> <option value="kazan" selected>Казань</option> <option value="samara">Самара</option> <option value="perm">Пермь</option> <option value="novosibirsk">Новосибирск</option></select>
<select name="city3"> <option value="">-- Выберите город --</option> <option value="petersburg">Санкт-Петербург</option> <option value="moscow">Москва</option> <option value="kazan" selected>Казань</option> <option value="samara">Самара</option> <option value="perm">Пермь</option> <option value="novosibirsk">Новосибирск</option> </select>
<select name="city4" multiple size="6"> <option value="petersburg">Санкт-Петербург</option> <option value="moscow" selected>Москва</option> <option value="kazan" >Казань</option> <option value="samara" selected>Самара</option> <option value="perm">Пермь</option> <option value="novosibirsk">Новосибирск</option></select>
<select name="city4" multiple size="6"> <option value="petersburg">Санкт-Петербург</option> <option value="moscow" selected>Москва</option> <option value="kazan" >Казань</option> <option value="samara" selected>Самара</option> <option value="perm">Пермь</option> <option value="novosibirsk">Новосибирск</option> </select>
value
СкопированоЕсли выбран какой-то пункт списка, то при отправке формы на сервер будет передано значение атрибута value
этого пункта. Если атрибут не задан, то при отправке будет использоваться текстовое содержимое тега <option>
.
На практике
Скопированосоветует Скопировано
🛠 Раньше браузеры не предоставляли никаких средств для нормальной стилизации элемента <option>
, и это доставляло очень много головной боли фронтенд-разработчикам :( Стиль элементов <option>
можно было поменять, только если тегу <select>
был задан атрибут multiple
. Тогда список целиком становился частью потока страницы, и мы имели возможность применять стили к его элементам. Вот как выглядело решение:
<select name="city" id="city-select" multiple> <option value="petersburg">Санкт-Петербург</option> <option value="moscow">Москва</option> <option value="kazan">Казань</option> <option value="samara">Самара</option> <option value="perm">Пермь</option> <option value="novosibirsk">Новосибирск</option></select>
<select name="city" id="city-select" multiple> <option value="petersburg">Санкт-Петербург</option> <option value="moscow">Москва</option> <option value="kazan">Казань</option> <option value="samara">Самара</option> <option value="perm">Пермь</option> <option value="novosibirsk">Новосибирск</option> </select>
select { counter-reset: cnt;}option:nth-child(2n) { background-color: #282a2e;}option { counter-increment: cnt;}option::before { content: counter(cnt) ". ";}
select { counter-reset: cnt; } option:nth-child(2n) { background-color: #282a2e; } option { counter-increment: cnt; } option::before { content: counter(cnt) ". "; }
Теперь практически все браузеры умеют стилизовать <option>
даже без атрибута multiple
.