A placeholder used as a label loses the field’s meaning once filled
Aliases: placeholder vanishes · fake label · floating label empty
What it is
A placeholder is the faint hint shown while an input is empty, meant as a format example. Using it as a label means there is no always-visible “Email” or “Phone,” only that faint sentence in the box. Meaning is visible at the start. Once typing or autofill starts, the faint text goes, the box holds only a value, and meaning is gone. A floating label that lifts the placeholder into a label on focus counts as a persistent label; if the label is absent once filled, meaning is still lost. Programmatic binding, error association, and dual-channel required state are the other three steps.
Why it happens
A label’s job is to answer “what is this” through the whole fill. A placeholder’s job is to show “what it looks like” while empty. Stuffing the former into the latter is barely usable when empty and fails when not. Autofill, paste, and restore from draft skip the empty state; people face a row of unlabeled values and can only guess from content whether this is email or username. A second layer is contrast and memory. Placeholder contrast is usually below body text; low-vision users cannot read it even when empty. Those who can, once they start typing, must hold “what am I filling” and the value being built in working memory together. Side-by-side fields (number, expiry, CVV) become identical once filled; wrong-column answers happen on that beat. Reader support for placeholders is unstable: some read them as the name, some ignore them, some read once only while empty.
Studying it
Build “placeholder only,” “persistent label plus placeholder as example,” and “floating label still there when filled.” Tasks include autofill and being interrupted then returning.
Independent variables: whether the label remains visible when non-empty, placeholder contrast, whether several placeholder-only boxes sit side by side. Dependent variables: rate of still naming the field after fill, wrong-column answers in a row of boxes, whether the placeholder is readable empty under low contrast, whether a reader still announces the name when non-empty.
Do not inspect empty-state screenshots—the loss happens when non-empty. An autofill condition is required.
Where it stops holding
A one-field search with placeholder “Search” and a visible “Search” on the button still has meaning from the button when non-empty; harm is smaller. A password box that shows dots, with no label, also loses “this is the password.” A format example in the placeholder (name@example.com) is legitimate if a persistent label sits beside it. Dropping labels on mobile to save vertical space loses interruption recovery, not first-screen beauty.
Applying it
- Keep a visible label on every field at all times. Put format examples in the placeholder, not the field name.
- A floating label must remain visible after a value, after fill, and after blur. It must not return to “value only.”
- Short side-by-side fields each have a label; do not distinguish them only by three different placeholders while empty.
- Verify: after autofill of a whole address, cover memory and ask what each box is; no answer is failure. In a low-contrast mode, check whether the empty placeholder is readable—and even if it is, it still cannot be the label. Tab into a field that already has a value with a reader and confirm the field name is heard, not only the value.
Related
- Within the group: H1.15.1 Every input needs a programmatic association with its visible label · 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: E2.04 Placeholders · E2.05 Floating labels · H1.13 Smart prefill and autofill
- Search terms:
placeholder·floating label·persistent label