WCAG 2.0 aria-labelledby для заголовка формы и отказа от ответственности

Я не уверен, как форма помечена арией или описана арией, когда вы пытаетесь поместить заголовок и заявление об отказе, например "Все поля обязательны для заполнения, если не отмечено необязательное", отказ от ответственности в верхней части формы. Я думаю, что это то, как я думаю, что это сделано, но я новичок в доступности, поэтому любые исправления будут с благодарностью!

<form id="profile optional">
  <h1 arialabelledby="profile">Profile</h1>
  <p aria-describedby="optional">All fields are required unless marked optional</p>

  <fieldset>
    <legend id="userInfo" aria-labelledby="formA">User Info</legend>

    <div class="form-control">
      <label id="firstName" for="firstName">First Name</label>
      <input type="text" name="firstName" aria-labelledby="firstName userInfo" aria-required="true" aria-describedby="error-message"/>
      <span id="error-message" style="display:none" aria-hidden="true">Name is required</span>
    </div>

    <div class="form-control">
      <label id="lastName" for="lastName">Last Name</label>
      <input type="text" name="lastName" aria-labelledby="lastName userInfo" aria-required="true" aria-describedby="error-message"/>
      <span id="error-message" style="display:none" aria-hidden="true">Name is required</span>
    </div>

    <div class="form-control">
      <label id="nickName" for="nickName">Nick Name (optional)</label>
      <input type="text" name="nickName" aria-labelledby="nickName userInfo"/>
    </div>
  <fieldset>

  <fieldset>
  ...
  </fieldset>

  <button type="submit" aria-label="Submit Profile">Submit</button>
</form>

Изменить * код для кнопки отправки

1 ответ

Решение

Это тот случай, когда вам не нужна ARIA. Вы можете вернуться к хорошему UX, и это сделает ARIA ненужным.

В начале вашей формы вы предоставляете инструкции о том, что все поля обязательны для заполнения. Это хорошо. Затем для полей, которые являются опцией, вы включаете "(необязательно)" в <label>, Это тоже хорошо.

Вы можете остановиться там и все готово.

Тем не менее, вы добавили ARIA в форму и получили некоторые назад. Например:

<form id="profile optional">
 <h1 arialabelledby="profile">Profile</h1>
 <p aria-describedby="optional">All fields are required unless marked optional</p>

Вы говорите <h1> это помечено <form> когда это должно быть наоборот. Вы также говорите <p> что это описывается <form>что опять было бы наоборот. Просто выдерни все это.

Или возьмите этот случай:

<div class="form-control">
  <label id="lastName" for="lastName">Last Name</label>
  <input type="text" name="lastName" aria-labelledby="lastName userInfo" aria-required="true" aria-describedby="error-message"/>
  <span id="error-message" style="display:none" aria-hidden="true">Name is required</span>
</div>

<input> не требуется aria-labelledby - <label> делает это бесплатно. Дополнительно связывая это с <legend> делает его более многословным и может запутать пользователей.

Вы также должны удалить aria-required и просто используйте HTML5 логическое required, Он хорошо поддерживается и полезен для не читателей экрана.

Хотя я подозреваю, что вы будете показывать сообщение об ошибке только при наличии ошибки, вы можете полностью удалить ее и позволить браузеру ее обработать. Если вам нужно сохранить его для обратного компата, то бросьте aria-hidden так как display:none в любом случае скрывает это от программ чтения с экрана.

То же самое касается кнопки. Дамп Ария и просто сделать это <button type="submit">Submit Profile</button>, Все ваши пользователи получат пользу от более подробной кнопки.

Поскольку вы хорошо используете <legend> а также <fieldset>Вы можете оставить все эти вещи, и вы в хорошей форме.

Вы только что создали доступную, пригодную для использования форму, не содержащую ARIA. ARIA-free это хорошая вещь. ARIA - это мостовая технология, которую следует использовать только тогда, когда в обычном HTML нет необходимости.

Другие вопросы по тегам