Кратко
СкопированоARIA-роль ориентира, которая определяет область формы. Обычно формы состоят из нескольких полей и кнопки для отправки данных, которые ввёл пользователь.
Роль form есть у тега <form> по умолчанию.
Пример
Скопировано
<div role="form" aria-label="Подписка на рассылку"> <label for="email">Электронная почта</label> <input type="text" id="email" name="email" autocomplete="email" spellcheck="false" > <button>Подписаться</button></div>
<div
role="form"
aria-label="Подписка на рассылку"
>
<label for="email">Электронная почта</label>
<input
type="text"
id="email"
name="email"
autocomplete="email"
spellcheck="false"
>
<button>Подписаться</button>
</div>
Как пишется
СкопированоВ первую очередь используйте HTML-элемент <form> вместо явной роли form. У тега <form> хорошая поддержка браузерами и скринридерами. Также <form> по умолчанию поддерживает необходимые атрибуты и слушает событие on: вам не нужно писать лишний JavaScript.
<form aria-label="Подписка на рассылку"> <label for="email">Электронная почта</label> <input type="text" id="email" name="email" autocomplete="email" spellcheck="false" > <button type="submit">Подписаться</button></form>
<form aria-label="Подписка на рассылку">
<label for="email">Электронная почта</label>
<input
type="text"
id="email"
name="email"
autocomplete="email"
spellcheck="false"
>
<button type="submit">Подписаться</button>
</form>
Явная роль понадобится в редких случаях: при вёрстке сложных кастомных компонентов или для поддержки очень старыми браузерами.
Когда задаёте role явно, лучше добавлять роль к семантически нейтральным <div> и <span>. Одно из правил использования ARIA — не перезаписывать роли без необходимости.
Не забудьте по-настоящему отправить данные из формы. Роль, в отличие от HTML-элемента, не умеет слушать браузерные события. Для этого, например, можете использовать метод fetch:
const form = document.getElementById('custom-form')const input = document.getElementById('email')const button = document.getElementById('subscribe-btn')function submitForm(event) { event.preventDefault() const email = input.value.trim() if (email) { fetch('/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email }) }) }}button.addEventListener('click', submitForm)
const form = document.getElementById('custom-form')
const input = document.getElementById('email')
const button = document.getElementById('subscribe-btn')
function submitForm(event) {
event.preventDefault()
const email = input.value.trim()
if (email) {
fetch('/subscribe', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email })
})
}
}
button.addEventListener('click', submitForm)
Пользователи скринридеров смогут быстро переместиться к форме только в случае, если форма имеет доступное имя. Есть два способа задать имя форме: через атрибуты aria и aria.
Имя из aria скрыто визуально, но доступно для пользователей вспомогательных технологий и поисковых роботов.
<form aria-label="Подписка на рассылку"> <!-- Содержимое формы --></div>
<form
aria-label="Подписка на рассылку"
>
<!-- Содержимое формы -->
</div>
С помощью aria с формой связывают видимое имя, например, из заголовка.
<div role="form" aria-labelledby="subscription"> <h3 id="subscription"> Подписка на рассылку </h3> <!-- Остальное содержимое --></div>
<div
role="form"
aria-labelledby="subscription"
>
<h3 id="subscription">
Подписка на рассылку
</h3>
<!-- Остальное содержимое -->
</div>
Хотя на странице может быть несколько форм, они не обязательно должны быть ориентирами. Старайтесь называть только формы для ввода важных данных, к которым пользователям скринридеров было бы полезно и необходимо быстро перемещаться.
Для элемента с ролью form можно использовать и другие глобальные ARIA-атрибуты.
Как понять
СкопированоРоль form создаёт ориентир на странице. Это значит, что пользователи скринридеров могут быстро переместиться к этой части страницы с помощью горячих клавиш или через меню со всеми ориентирами.
Подсказки
Скопировано💡 Для области с полем для поиска по сайту используйте <search> или role.
💡 Без aria или aria форма не станет ориентиром для пользователей скринридеров.