Skip to content

Input

<input class="input" type="email" placeholder="you@example.com" />

The class styles a native <input>, so every type keeps its own behaviour, its own mobile keyboard and its own validation.

Pair it with a field for a label and help text.

We only use it for billing receipts.

Contact an owner to change this.

The control stops taking input and dims, and the label inside the same .field dims with it — read from the control’s own state, so there is no second attribute to keep in sync.

This handle is already in use.

aria-invalid on the control recolours the border and the ring. data-invalid on the .field carries it to the label as well. Point aria-describedby at the message so it is announced with the control.

PDF or PNG, up to 10 MB.

data-orientation="horizontal" on the field puts the label beside the control.

Mark it in the markup with required so the browser and assistive tech both know. A visual marker alone is not the same thing — and an asterisk with no explanation is not a label.

A badge inside the label is a place for a short qualifier: required, beta, admin only.

Sit an input flush with controls using a button group. The input takes the free space.

https://

At least 12 characters.

Set dir="rtl" on the page or on any subtree — padding, corners and positions follow the reading direction on their own. See the button page for a live example.

Every input needs a name. A visible <label> with for is the first choice, because it is also a click target. When the design has no visible label, aria-label is the fallback — a placeholder is not a label, it disappears as soon as the user types.