Label
Renders an accessible label associated with form controls
Import
import { Label } from '@heroui/react';Usage
"use client";
import {Input, Label} from "@heroui/react";
export function Basic() {
return (
<div className="flex flex-col gap-1">
<Label htmlFor="name">Name</Label>
<Input className="w-64" id="name" placeholder="Enter your name" type="text" />
</div>
);
}API
Label Props
| Prop | Type | Default | Description |
|---|---|---|---|
htmlFor | string | - | The id of the element the label is associated with |
isRequired | boolean | false | Whether to display a required indicator |
isDisabled | boolean | false | Whether the label is in a disabled state |
isInvalid | boolean | false | Whether the label is in an invalid state |
className | string | - | Additional CSS classes |
children | ReactNode | - | The content of the label |
Accessibility
The Label component is built on the native HTML <label> element (MDN Reference) and follows WAI-ARIA best practices:
- Associates with form controls using the
htmlForattribute - Provides semantic HTML
<label>element - Supports keyboard navigation when associated with form controls
- Communicates required and invalid states to screen readers
- Clicking the label focuses/activates the associated form control
Styling
CSS Classes
The Label component uses these CSS classes (View source styles):
Base Classes
.label- Base label styles with text styling
State Modifier Classes
.label--requiredor[data-required="true"] > .label- Shows required asterisk indicator.label--disabledor[data-disabled="true"] .label- Disabled state styling.label--invalidor[data-invalid="true"] .labelor[aria-invalid="true"] .label- Invalid state styling (danger/red text color)
Note: The required asterisk is smartly applied using role and data-slot detection. It excludes:
- Elements with
role="group",role="radiogroup", orrole="checkboxgroup" - Elements with
data-slot="radio"ordata-slot="checkbox"
This prevents duplicate asterisks when using group components with required fields.
Examples
With Required Indicator
<Label htmlFor="email" isRequired>
Email Address
</Label>
<Input id="email" type="email" />With Disabled State
<Label htmlFor="username" isDisabled>
Username
</Label>
<Input id="username" isDisabled />With Invalid State
<Label htmlFor="password" isInvalid>
Password
</Label>
<Input id="password" isInvalid />