H1.15.1programmatic label-control associationdesignresearch

Every input needs a programmatic association with its visible label

Aliases: label for · aria-labelledby · accessible name

What it is

Seeing the word “Email” next to a box is not the same as assistive technology knowing the box is called Email. Programmatic association means the visible label and the control are one group in the accessibility tree: label for, a wrapping label, or aria-labelledby pointing at that visible text, so the control’s accessible name is that text. Using a placeholder as the name, how errors attach, and how required state is both seen and heard are the next three steps. Whether the label sits on the left or above is placement. It does not replace this binding.

Why it happens

Assistive technology reads the accessible name, not pixel proximity. Proximity only makes “this is its label” for people who can see. Without a binding, the name becomes “edit box” or is claimed by a nearby button or legend. A second layer: the visible text must be the source of the name. An invisible aria-label="email" while the screen says “Work email” means reader users and sighted users do not share a word; checking and alignment fail. Clicking the label should focus the control—that is the behavioral consequence of the binding, and how people with reduced motor ability enlarge the hit target. Custom controls have no native label hook and must expose a name explicitly, with the name node stable in the tree, not a line painted only in CSS.

Studying it

Use the accessibility tree or name computation to check that each input’s accessible name equals the visible label. Tab with a reader and listen to names. Include mobile pages where only the label is easy to tap and the box is small.

Independent variables: binding method (for / wrap / aria-labelledby / proximity only / invisible aria-label only), whether visible copy matches the invisible name. Dependent variables: whether name equals the visible label, whether clicking the label focuses, whether the reader says “edit box,” times invisible name and visible copy disagree.

Automation can catch “has a name,” not “the name is that visible sentence.” Compare a screenshot with the tree. Do not pass a placeholder as the name.

Where it stops holding

A search box that is visually only an icon can take its visible name from a “Search” button, still programmatically tied to the input. Captchas and canvas signatures have no ordinary label; they need visible explaining text and aria-labelledby pointing at it. A hidden but focusable honeypot should not be treated as a real field that needs binding. When label copy changes dynamically, the bound node must change too, or the name stays on the old word.

Applying it

  • Tie every visible input to the on-screen label sentence with label for or aria-labelledby. Do not rely on sitting nearby.
  • Take the accessible name from the visible text; do not write a second invisible English string.
  • A click on the label must focus the matching control; custom controls must tie to a name node the same way.
  • Verify in the accessibility tree that each Name equals the on-screen label. Click the label; focus enters the input. With styles off, the HTML relationship remains. Listen to names only with a reader and confirm there is no nameless “edit box.”

Related

  • Within the group: H1.15.2 A placeholder used as a label loses the field’s meaning once filled · H1.15.3 Error messages must be tied to the field through accessibility properties · H1.15.4 Required state needs a cue both visual and non-visual
  • Adjacent: J5.10 Name, role, and state · E2.03 Label placement · H1.03 Required and optional markers
  • Search terms: accessible name · label for · aria-labelledby

Cards in the same group

Quick Actions

Share

Share this page

ios_share

https://hci.top/en/handbook/H1.15.1