Кратко
СкопированоРоль виджета из WAI-ARIA. Указывает на то, что элемент что-то переключает. Например, тему, оповещения или другие настройки на сайте.
На switch
похожи <input>
с типом checkbox
и другая ARIA-роль checkbox
, но они не заменяют роль переключателя. Команда Safari предложила решить проблему нативного переключателя с помощью HTML-атрибута switch
— <input type
. Атрибут поддерживает только Safari, начиная с версии 17.4. Пока, без стабильной поддержки другими браузерами и вспомогательными технологиями, лучше не использовать этот атрибут.
Пример
Скопировано<span class="label" id="label"> Оповещения:</span><button class="button" role="switch" aria-checked="false" aria-labelledby="label"> <span class="button__off" aria-hidden="true"> Выключены </span> <span class="button__on" aria-hidden="true"> Включены </span></button>
<span class="label" id="label"> Оповещения: </span> <button class="button" role="switch" aria-checked="false" aria-labelledby="label" > <span class="button__off" aria-hidden="true"> Выключены </span> <span class="button__on" aria-hidden="true"> Включены </span> </button>
Скринридер прочитает код примерно так: «Переключатель с ролью switch, не выбран, оповещения».
Если не уверены, что браузер и скринридер хорошо поддерживают switch
, используйте <input type
. В этом случае не нужно использовать aria
. Достаточно добавить HTML-атрибут checked
.
Как пишется
СкопированоДобавьте к нужному элементу role
. Роль можно задавать для всех тегов, с которыми можно взаимодействовать. Например, <button>
, <div>
или <span>
с tabindex
.
У элемента с ролью switch
обязательно должен быть атрибут aria
со значением true
или false
. Менять значения атрибута нужно с помощью JavaScript.
У aria
есть ещё значение mixed
, но его лучше не использовать в случае элемента с ролью switch
. Браузеры не всегда обрабатывают значение mixed
как false
, хотя об этом написано в спецификации ARIA.
Если добавите внутрь контейнера с ролью switch
семантический тег, в дерево доступности попадёт текст из него, а роль сбросится.
Так видите код вы:
<div role="switch" tabindex="0" aria-checked="false"> <h2>Оповещения включены</h2></div>
<div role="switch" tabindex="0" aria-checked="false"> <h2>Оповещения включены</h2> </div>
А так видит код скринридер:
<div role="switch" tabindex="0" aria-checked="false"> Оповещения включены</div>
<div role="switch" tabindex="0" aria-checked="false"> Оповещения включены </div>
Как понять
СкопированоУ обычного чекбокса есть состояния «Выбран» и «Не выбран». Элемент с ролью switch
бывает в состоянии «Включён» и «Выключен», в отличие от простого чекбокса.