Select
Кастомизация стандартного Sel
Last updated
Кастомизация стандартного Sel
Last updated
Нативный select нет возможности полностью стилизовать, поэтому приходится создавать "кастомизированный". Но, для мобильных версий необходимо отображать стандартную версию, так как в болбольшенствебильных устройств нативный select хорошо реализован в браузере.
При создании кастомного select в качестве примера был взят Open UI select.
select: оригинальный select, из которого будут копироваться все данные в кастомный
menu: кастомный select, корневая нода
button: нода, которая содержит информацию о выбранном пункте, так же является кнопкой вызова окна со списком доступных значений
popup: список доступных значений
option: значение (элемент списка)
Параметры необходимо установить на нативный select (даже если он их не поддерживает)
autofocus
- реализовать нет возможности, так как необходимо отслеживать все аналогичные параметры на странице (нативно делает браузер)
disabled
- определяет доступность select
form
- cвязывает список с формой, не переходит на кастомный select
multiple - позволяет одновременно выбирать сразу несколько элементов списка
name - имя элемента для отправки на сервер или обращения через скрипты, не переходит на кастомный select
open - определяет открыт ли select при загрузке
required - список обязателен для выбора перед отправкой формы, не переходит на кастомный select
selected - определяет выбранный пeyrn меню по умолчанию
size - количество отображаемых строк списка.
Управление с клавиатуры в точности должны повторять аналогичные действия нативного select, а именно:
Находясь на button СТРЕЛКИ меняют значения, что сразу отражается на самой button
Находясь на button ENTER открывает popup
Находясь на любом элементе menu ESC или TAB закрывает popup, а фокус возвращается на button
При открытии popup фокус попадает на выбранный option, а СТРЕЛКИ меняют значения, что сразу отражается на button
Находясь на option ENTER закрывает popup, а фокус возвращается на button
В данном примере кастомный select будет формировать через js, основой которому будет служить нативный вариант:
После применения JS:
Описание создание кастомного select описываться не будет, но следует отметить, что необходимо прописать связь между значениями кастомного и нативного select
Так как role = select, то используется следующее:
Сообщает вспомогательным технологиям, что это меню, содержащее элементы меню.
Сообщает вспомогательным технологиям, что это элементы меню.
Сообщает вспомогательным технологиям, какие элементы меню выбраны.
aria-haspopup
Сообщает вспомогательным, что button имеет popup, который будет показан (вызван) при нажатии
aria-expanded
Сообщает вспомогательным технологиям состояние popup (открыт\закрыт)