TaskBuild a fully-labeled signup form. <label for='u'>Username</label> + <input id='u' name='username'>, <label for='e'>Email</label> + <input id='e' type='email' name='email'>, <label for='p'>Password</label> + <input id='p' type='password' name='password'>.
<label>: the accessibility glue
75 XP7 min
Theory
Two valid patterns
Explicit (preferred):
<label for="email">Email</label> <input id="email" type="email" name="email" />
The for attribute matches the input's id. Clicking the label focuses the input. Screen readers announce "Email" when the input gets focus.
Implicit (label wraps input):
<label> Email <input type="email" name="email" /> </label>
Same accessibility behavior. No for/id pair needed. Use when you don't need to style the label and input separately.
Why labels matter (beyond looking nice)
- Click target expansion. The label is now part of the click area β a 20% larger tap target. Mobile users especially appreciate this.
- Screen reader announcement. Without a label, VoiceOver reads "edit text" β useless. With a label, "Email, edit text" β clear.
- Voice control. Mac/iOS Voice Control says "Click Email" β only works with a label.
What's NOT a label
<p>Email:</p>next to an input β visual only, not accessible.placeholder="Email"β disappears when typing, screen readers don't always announce it. NEVER use placeholder as the only label.aria-label="Email"β works for accessibility but loses click-to-focus and the visual label.
Use <label> for >95% of inputs. Reserve aria-label for icon-only buttons where a visible label would be redundant.
π
Sign up to start coding
Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β card required, cancel anytime.
Sign up β free trial βFirst 10 lessons in each track are free. No card needed for those.