The structure that turns individual inputs into a task a user can complete: grouped fields, clear labels, useful helper text, recoverable validation, and actions that match the user's progress.
When to use it
Form layout starts once individual controls need to work together as one task. Use it to make field order, grouping, validation, and actions predictable.
Use form layout when
The user is providing structured informationThe task asks for fields, choices, confirmations, or preferences that must be submitted together.
Fields have a meaningful orderEarlier answers set context for later answers, or the workflow has a natural top-to-bottom sequence.
Validation and recovery matterThe system must tell the user what is missing, what is invalid, and how to continue without guessing.
Use something else when
The task is a single decisionUse a dialog, inline control, or action button when the user only needs to confirm or choose one thing.
The user is scanning dataUse a data table or list pattern when the main job is finding, comparing, sorting, or filtering records.
The workflow spans multiple distinct stagesUse a wizard or page template when each stage needs its own review, save point, or route.
Anatomy
A form layout owns the composition around field primitives: order, grouping, validation recovery, and action placement.
Form title
Required
A heading that names the task, not the database object. Use "New vendor request," not "Vendor form."
Use a real heading and keep it aligned with the route or panel title.
Section heading
Conditional
Use sections when a form has multiple groups of fields. The section heading names the decision the group supports.
Do not add section wrappers around short forms that already scan cleanly.
Field label
Required
Every input has a visible, persistent label. Placeholder text is not a label.
Connect label and control with the component API or native htmlFor/id wiring.
Helper and error text
Conditional
Helper text explains why or how to answer before submission. Error text explains what to fix after validation.
Use aria-describedby for helper and error text, and aria-invalid when a field is invalid.
Actions
Required
Primary and secondary actions sit after the fields. The primary action names the outcome: "Save vendor," "Submit request," "Send invite."
Do not silently disable the primary action; explain missing requirements inline.
Variants
Pick the layout by task complexity. A short settings form, a grouped request, and a final review state need different structure.
Single-section form
One short task where every field belongs to the same idea.
Trigger: A settings edit, profile update, or small create flow with roughly three to seven fields.
Job: Keep the form compact, ordered, and easy to complete without extra section framing.
Grouped sections
A longer form split into sections that match the user's mental model.
Trigger: A create or edit flow where fields naturally cluster by business details, contact details, permissions, or settings.
Job: Make a longer form scannable without hiding fields behind unnecessary steps.
Review and submit
A form state that helps users check important entries before final submission.
Trigger: A consequential request, compliance workflow, or irreversible submission.
Job: Show the most important entered values, surface unresolved validation, and keep the final action explicit.
Examples
The rendered examples use existing form primitives. The pattern is the arrangement around them, not a new component.
Vendor details
Vendor details
Use one section when all fields answer the same question.
Use the name shown on tax documents.
Choose the closest category.
We use this for compliance reminders.
New vendor request
New vendor request
Group fields by the decision they support.
Business details
Primary contact
Vendor review
Review vendor request
Show the entries that matter before the final submit action.
Legal business name
Acme Services LLC
Service category
Facilities
Insurance certificate
Missing
Add this before submitting.
Primary action on an incomplete form
Wrong
Submit
The button is disabled until every required field is complete.
Right
Submit request
If required fields are missing, keep the user in the form and show exactly what needs attention.
Submit request
A disabled button hides the path forward. A clear submit action plus field-level recovery tells the user what happened and what to fix.
Long vendor request form
Wrong
Vendor information
All fields are stacked in one uninterrupted list.
Right
New vendor request
Fields are grouped into Business details and Primary contact so the user can scan the task in chunks.
Submit request
Grouping by decision makes a longer form easier to scan without turning it into an unnecessary wizard.
Voice and content
Labels, helper text, errors, and action labels carry the user through the form.
Use noun-first field labels
Labels should name the information requested: "Primary contact email," not "Enter email."
Reserve helper text for decisions
Helper text earns its space when it reduces uncertainty. Do not repeat the label or state the obvious.
Write errors as recovery instructions
Tell the user what to fix and where. "Enter a valid email address" beats "Invalid input."
Name the submit outcome
"Submit request" or "Save vendor" beats "Submit." The action label should match what happens next.
Accessibility
Form accessibility depends on wiring the group, label, description, error, and focus behavior together.
Every control has a visible label
Labels remain visible when a field has a value. Placeholder-only forms fail this rule.
Group related controls semantically
Use fieldset and legend for radio or checkbox groups when the group label is needed to understand the options.
Wire descriptions and errors
Helper text and error text must be connected with aria-describedby. Invalid fields set aria-invalid.
Move focus predictably after failed submit
If the user submits with errors, move focus to an error summary or the first invalid field and preserve entered values.
Implementation notes
Field primitives own control behavior. The pattern owns composition and review quality.
Compose from field primitives
Use Text Input, Select, Checkbox, Radio, Toggle, and Button before building custom form controls.