Кратко
Скопированоaria — это ARIA-атрибут, который указывает, что элемент интерфейса в данный момент недоступен для взаимодействия. Он позволяет разработчикам явно указать, что элемент неактивен, без изменения его DOM-структуры или удаления привязанных событий.
Так же работает HTML-атрибут disabled.
Пример
СкопированоПример с кнопкой, которую хотим временно сделать неактивной, не удаляя при этом обработчики событий:
<button aria-disabled="true">Отправить</button>
<button aria-disabled="true">Отправить</button>
Кнопка будет отображаться, но пользователь не сможет по ней кликнуть или сфокусироваться.
Как пишется
СкопированоДобавьте к тегу атрибут aria с одним из значений:
true— элемент неактивен;false(по умолчанию) — элемент активен, с ним можно взаимодействовать.
aria можно задавать только некоторым тегам и ролям:
<button>,<summary>,<input>с типамиbutton,image,reset,submitили для ролиbutton;<a>илиlink;<details>,<fieldset>,<optgroup>илиgroup;<hr>илиseparator;<div>,<span>илиgeneric;tab;scrollbar;application;gridcell;menuitem.
Для HTML-тегов лучше использовать атрибут disabled вместо aria там, где он поддерживается.
Подводные камни и особенности
Скопировано- неактивные родительские элементы: если родительский элемент получает
aria, его дочерние элементы также считаются неактивными;- disabled = "true" - CSS и JavaScript: чтобы полностью реализовать поведение неактивности, нужно использовать CSS для стилизации и JavaScript для управления состоянием, так как
ariaсам по себе не останавливает взаимодействие с элементом.- disabled
Особенности для ссылок
СкопированоДля элементов <a>, которые не содержат атрибут href, aria может быть использован для указания, что ссылка в текущем состоянии нефункциональна. Такой трюк используют для хлебных крошек. Так пользователи клавиатуры знают, где находятся сейчас, при этом не могут перейти по ссылке на текущую страницу. Например:
<a href="#dogs">Товары для собак</a><a role="link" aria-disabled="true" aria-current="page"> Товары для котов</a>
<a href="#dogs">Товары для собак</a>
<a
role="link"
aria-disabled="true"
aria-current="page"
>
Товары для котов
</a>
В случае неактивной ссылки лучше не использовать href, и чтобы ссылка не потеряла свою роль, явно её задать с помощью атрибута role.
Демонстрация работы
СкопированоВ этом примере кнопка становится неактивной при нажатии, меняя свой визуальный стиль и убирая возможность взаимодействия. Это может быть полезно в формах, когда действительно важно не дать пользователю сразу кликнуть по кнопке отправки формы, если не все поля заполнены.
Задействуем CSS и JavaScript
СкопированоИспользование aria отличается от атрибута disabled. ARIA-атрибут не останавливает все виды пользовательского взаимодействия с элементом на уровне браузера. Поэтому важно использовать CSS и JavaScript для управления состояниями элементов. Вот простой пример, как можно стилизовать и управлять элементом с aria:
[aria-disabled="true"] { opacity: 0.7; cursor: not-allowed;}[aria-disabled="true"]:focus { outline: none;}
[aria-disabled="true"] {
opacity: 0.7;
cursor: not-allowed;
}
[aria-disabled="true"]:focus {
outline: none;
}
document.querySelectorAll('[aria-disabled="true"]').forEach((element) => { element.addEventListener('click', (e) => { // Предотвращаем клики e.preventDefault() })})
document.querySelectorAll('[aria-disabled="true"]').forEach((element) => {
element.addEventListener('click', (e) => {
// Предотвращаем клики
e.preventDefault()
})
})
Интеграция с фреймворками
СкопированоВ фреймворках, таких как React или Angular, вы можете интегрировать aria напрямую в ваш компонентный подход. Например, в React компоненте это может выглядеть так:
function SaveButton({ isSaving }) { return ( <button aria-disabled={isSaving ? 'true' : 'false'}> {isSaving ? 'Saving...' : 'Save Changes'} </button> )}
function SaveButton({ isSaving }) {
return (
<button aria-disabled={isSaving ? 'true' : 'false'}>
{isSaving ? 'Saving...' : 'Save Changes'}
</button>
)
}
Как понять
СкопированоНа элементе с aria пользователи не могут сделать фокус, узнать о его роли и состоянии, а также скопировать из него данные. Такое поведение может быть у временно неактивных элементов. К примеру, когда в форме заполнены не все поля или какое-то действие в процессе выполнения.
С помощью aria можете создать гибкие и доступные интерфейсы. Помните, что для полной функциональности нужны CSS и JavaScript. Это не только делает сайт более доступным, но и улучшает пользовательский опыт в целом. Не забудьте также протестировать сайт со скринридерами. ARIA-разметка должна облегчать взаимодействие с интерфейсом всех пользователей, а не усложнять.
На практике
Скопированосоветует
Скопировано🛠 На моей практике был случай с разработкой интерактивной карты мероприятия, где необходимо было временно отключать кнопки управления до загрузки всех данных. Для этого мы использовали aria в сочетании с визуальными изменениями и блокировкой событий через JavaScript. Это не только улучшило доступность, но и предотвратило возможные ошибки пользователей при раннем взаимодействии с картой.