labelAssociatedControls
Reports <label> elements without an associated control element.
✅ This rule is included in the jsxlogicalandlogicalStrictpresets.
Form labels are a critical component of web accessibility. Screen readers and other assistive technologies rely on labels to identify and describe form controls. A label must be associated with a control element to provide this context.
This rule checks that all <label> elements have an associated control, either through:
- An
htmlForprop that references the id of a control element - A control element nested within the label (input, select, textarea, meter, output, or progress)
Examples
Section titled “Examples”<JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label /><JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label>Name</JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label><JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label> <JSX.IntrinsicElements.span: DetailedHTMLProps<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>
span>Name</JSX.IntrinsicElements.span: DetailedHTMLProps<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>
span></JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label><JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label LabelHTMLAttributes<HTMLLabelElement>.htmlFor?: string | undefined
htmlFor="name">Name</JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label><JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label> Name <JSX.IntrinsicElements.input: DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>
input InputHTMLAttributes<HTMLInputElement>.type?: HTMLInputTypeAttribute | undefined
type="text" /></JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label><JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label> <JSX.IntrinsicElements.input: DetailedHTMLProps<InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>
input InputHTMLAttributes<HTMLInputElement>.type?: HTMLInputTypeAttribute | undefined
type="text" /></JSX.IntrinsicElements.label: DetailedHTMLProps<LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>
label>When Not To Use It
Section titled “When Not To Use It”If you are using a framework that handles label associations differently or automatically generates accessible labels, you can safely disable this rule.
Further Reading
Section titled “Further Reading”- WCAG 1.3.1 - Info and Relationships
- WCAG 2.4.6 - Headings and Labels
- WCAG 4.1.2 - Name, Role, Value
- MDN: The Label element
Equivalents in Other Linters
Section titled “Equivalents in Other Linters”
Made with ❤️🔥 around the world by
the Flint team and contributors.