Кратко
СкопированоРоль виджета из WAI-ARIA. Указывает на то, что элемент что-то переключает. Например, тему, оповещения или какие-то другие настройки на сайте.
К этой роли близок <input> с типом checkbox, а в ARIA на неё похожа роль checkox. Однако они не эквиваленты switch.
Пример
Скопировано
<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 бывает в состояниях «Включён» и «Выключен», в отличие от простого чекбокса.