Explore behaviors before defining the interface.
Quick guide for designers
Always consider the context of the application, even when the guidance follows a standard pattern. Interaction design documents intent. Behavior must be verified in the implementation.
When to use
Use to enter an email address. Format validation does not prove the address exists.
What to draw
Show a persistent label, format hint, focus, and filled and error states.
How it behaves
The person edits and pastes text normally. On error, preserve the value and explain the correction.
What to document in Figma
Record required status, messages, and Enter behavior. If multiple addresses are accepted, explain how to separate them.
How to review
Check whether the purpose and states are clear on small and large screens and with zoom. Verify documented behavior in the implementation, including keyboard and screen reader use where applicable.
Full guidance
Interaction Design
Questions to ask when designing Input "email" components.
Assess each guideline according to the component's context of use.
Designing for "no interaction"
- Does the label remain visible and explain the field's purpose?
- Are instructions, required status, and limits available before entry?
- Are empty, filled, invalid, disabled, and read-only states distinguishable without relying solely on color?
Designing for mouse use
- Does clicking the field or its associated label focus it for typing?
- Do focus and associated controls provide perceptible visual feedback?
Designing for gesture use
- Does the touch area allow selecting the field and its controls without accidental activation?
- Do the virtual keyboard and zoom allow the field to remain visible and editable?
Designing for keyboard use
TabandShift + Tabmove through controls in interface order?- Can you edit and select text using native commands without trapping focus?
Designing for screen reader use
- Are name, type, required status, instructions, and errors presented understandably?
- Is the label associated with the field and still available after filling it in?
Interaction methods
The field uses type="email" and, on compatible devices, offers an appropriate email keyboard.
Mouse interaction
- Clicking the field or its associated label puts focus in the field.
- Selecting, editing, copying, and pasting follow the field's native behavior.
Keyboard interaction
Tabmoves focus to the field;Shift + Tabreturns to the previous control.- Typing inserts text;
arrow keys,Home,Endand selection and editing commands follow the platform. Enterfollows the form's defined submission action; the field does not create a new line.
Gesture interaction
- Tapping the field or label allows editing with the virtual keyboard.
- Text selection and editing follow the platform's available gestures.
Keyboard (or gesture) interaction + screen reader
- When navigating to the field, the reader presents its label and type, along with associated states and instructions.
- Errors are associated with the field and explain how to correct the information; the entered value is preserved.
Gherkin
BDD (Behavior-Driven Development) methodology focusing on three pillars: User Stories, Acceptance Criteria, and Gherkin Syntax (Given, When, Then).
Scenario: Given that I am on a page containing Input "email"
Keyboard navigation
- WHEN I use the
Tabkey to move focus to the field - The focus I SEE is strongly indicated visually
- THEN, when I type, select, or edit content using native commands
- I SEE the field value updated
- AND, when I use
TaborShift + Tab, I SEE focus follow page order without getting trapped in the field
Desktop screen reader
-
WHEN I use a screen reader on a computer (NVDA, JAWS, VoiceOver) and use the
Tabkey to move focus to the field, the following happens:- I HEAR the field's label and purpose.
- I HEAR that the component is an email field.
- I HEAR the required status, instructions, and associated errors, when present.
- THEN, when I type or edit content using native commands
- I HEAR or perceive that I can edit the field and that its value was updated.
Mobile screen reader
-
WHEN I use a screen reader on a phone (TalkBack, VoiceOver) and swipe to focus the field, the following happens:
- I HEAR the field's label and purpose.
- I HEAR that the component is an email field.
- I HEAR the required status, instructions, and associated errors, when present.
- THEN, when I double-tap or use the appropriate gesture to activate the field and edit its content
- I HEAR or perceive that I can edit the field and that its value was updated.
Input validation
- WHEN an entry is rejected by a stated validation rule
- I SEE a message associated with the field explaining how to correct the information
- AND, when I navigate to the field with a screen reader, I HEAR the error indication and associated guidance
- THEN, when I edit again, I SEE the value preserved for correction
Email format
- WHEN I submit a value with an invalid email format
- I SEE or HEAR guidance on correcting the format
- Format validation does not prove the address exists
Considerations
- Use a persistent label associated with the input. A placeholder is a supplementary hint and does not replace the label.
- Associate instructions and errors with the field, for example using aria-describedby, and set aria-invalid when there is an error.
- Indicate required status and use required when needed. Do not communicate errors solely through color.
- Keep focus visible and ensure adequate contrast and interaction area.
- Format validation does not prove the address exists. Accept a single address by default; use multiple only if the context requires several addresses and explain how to separate them.
References
Field documentation
Design System
- GOV.UK — Email addresses open_in_new (external link, opens in a new tab) — Email-specific pattern, with type="email", autocomplete, and error messages.
- GOV.UK — Text input open_in_new (external link, opens in a new tab) — Base component used by the email pattern.
- Bootstrap — Form controls open_in_new (external link, opens in a new tab) — Example of a type="email" field.
- Carbon — Text input open_in_new (external link, opens in a new tab) — General text field guidance, complementary to the email type.