Radio
Элемент управления для хранения данных формы с одним выбором.
Last updated
Элемент управления для хранения данных формы с одним выбором.
Last updated
Основной ресурс откуда взята информация - https://ebay.gitbook.io/mindpatterns/input/radio
Позволяет выбрать один элемент в группе параметров. Если требуется множественный выбор, используйте вместо этого флажки или список. HTML дает нам встроенные переключатели, которые полностью доступны по умолчанию. К сожалению, внешний вид этих элементов управления часто расходится с дизайном веб-сайта или рекомендациями по брендингу. Эта проблема усугубляется тем фактом, что стиль стандартных переключателей очень сложно изменить. Этот шаблон показывает, как используя современные CSS и SVG можно создать "фасад" над встроенными переключателями, при сохранении требований доступности.
Радиокнопки должны быть сгруппированы вместе, и группа должна содержать не менее двух радиокнопок.
Каждая группа переключателей должна быть помечена. Обычно достигается с помощью тега.
Каждая отдельная радиокнопка должна быть помечена. Другие типы интерактивного элемента управления (например, текстовое поле или флажок) не должны вкладываться между переключателями.
Радиокнопки должны находиться в элементе формы, и этот элемент формы должен иметь кнопку отправки.
Переключение переключателя не должно вызывать перезагрузку страницы, всплывающее окно или любое изменение контекста до тех пор, пока соответствующая форма не будет явно отправлена пользователем.
При переходе в группу фокус будет установлен на выбранный в данный момент переключатель.
Если ни одна кнопка в данный момент не отмечена, фокус переместится к первой или последней кнопке в зависимости от того, использовались ли TAB
или SHIFT + TAB
для входа в группу. TAB
и SHIFT + TAB
покинут группу радиокнопок.
СТРЕЛКА ВНИЗ
будет фокусироваться и выбрать следующую кнопку в группе.
СТРЕЛКА ВВЕРХ
будет фокусироваться и выбрать предыдущую кнопку в группе.
ENTER
отправляет форму, к которой принадлежит радиогруппа.
Радио должно быть доступно с помощью программы чтения с экрана (даже если она отключена).
Радио должно быть объявлено как «Радио».
Лейбл радио должен быть объявлен.
Название радиогруппы должно быть объявлено.
Состояние радио должно быть объявлено (т.е. отмечено или не отмечено флажком).
Нативные переключатели на 100% доступны по умолчанию и поддерживают такие функции, как данные формы, сброс формы и завершение формы.
Нативные переключатели HTML всегда должны быть вашей базовой отправной точкой.
Fieldset создает семантику группировки. Legend создает метку группы. Каждая пара ввода и метки дополнительно группируется внутри контейнера span. Этот контейнер span можно заменить на div для вертикального размещения переключателей.
Что будем делать:
Скрываем нативную радиокнпоку;
Добавляем иконку взамен стандартной радиокнопки
Назначить контур фокуса пользовательскому значку
Скрываем таким образом, чтобы мы могли продолжать нажимать на него. Несмотря на то, что он невидим, это все же собственный ввод, который получает события щелчка и фокусировки. Это важно, чтобы базовый ввод поддерживал всю встроенную обработку событий и состояние. Помните, что нажатие метки переключателя также переключает отмеченное состояние.
Нам понадобится два значка: отмеченный и снятый.
Иконки в качестве background:
Иконки в качестве элемента:
Эта разметка предполагает, что на странице существуют определения символов для # icon-radio-unchecked и # icon-radio-checked. Атрибут hidden гарантирует, что значок SVG не будет виден, если страница находится в состоянии, отличном от CSS; это также помогает предотвратить появление нестилизованного содержимого (FOUC). Как видите, фоновая разметка SVG более лаконична, однако у нее есть две основные проблемы, о которых следует помнить: цвет значка не может быть изменен с помощью CSS; для режима высокой контрастности Windows необходимы альтернативные варианты. С другой стороны, SVG переднего плана не имеет ни одной из этих проблем, и поэтому это наш предпочтительный подход.
Помните, что клавиатура всегда будет фокусироваться на реальном, собственном вводе. Однако мы не можем увидеть настоящий индикатор фокуса, потому что у элемента 0 непрозрачность. Чтобы обойти это, мы можем создать настраиваемый контур фокуса вокруг элемента SVG:
Пунктирная граница - хороший выбор, имитирующий границы различных браузеров (например, Firefox).
Мой вариант разметки html:
И scss
Обратите внимание, что необходимо описать все "состояния" кнопки - focus, checked и disabled.
Удаляет презентационный элемент SVG из дерева доступности.