HomeChallengesRepsProblemsLeaderboardTake a challenge

A form without a mouse

Every input needs a name a screen reader can read, every error needs to reach the person who caused it, and a group of radios needs to say what it is a group of. Placeholders are not labels.

Intermediate20 min on the clock5 graded checks · 100 pointsReachable by EveryonePro
Graded by reading your code against the checklist below.

What you build

  • A real label element, bound to its input with htmlFor
  • The radio group wrapped in a fieldset with a legend
  • Errors linked to the input with aria-describedby
  • aria-invalid set when the field is in error
  • role="alert" on the error so it is announced

Done means

Completable start to finish with only a keyboard, and every field announces its own name and its own error.

How it is graded

Published in full, before you start — every point is one of these and there is nothing else.

  1. Every input is named by a real label+25Accessibility
  2. The radio group states what it is asking+20Semantic HTML
  3. The error is bound to the field it belongs to+20Accessibility
  4. The field is marked invalid, not only described+20Form validation
  5. The error is announced when it appears+15Accessibility

What it teaches

The rest of Reachable by Everyone