HTML Form Layout — Single Column, Multi-Column, and Multi-Step
Three form layout patterns covering 95% of cases — single-column (the default), responsive multi-column via CSS Grid auto-fit, and multi-step wizards. Working code for each, with notes on when to use which.
Single-column is the default. Every field on its own row, labels above, vertical scroll. Easiest to scan, easiest on mobile, easiest to make accessible. Use this until you have a specific reason not to.
Multi-column is for forms with many short related fields — first/last name, city/state/zip, credit card month/year. CSS Grid with `grid-template-columns: repeat(auto-fit, minmax(220px, 1fr))` gives you responsive multi-column for free: fields reflow to one column on narrow viewports without media queries. Full-width fields (subject, message) span both columns with `grid-column: 1 / -1`.
Multi-step wizards are for long forms where completion rate matters more than visual density. Split fields across 2-4 steps with a progress indicator. Show 5-7 fields per step max. Save partial data so users can return — splitforms supports partial submissions on every plan (the dashboard shows them separately from completed ones).
The trap to avoid: applying a multi-column layout when single-column would work fine. Multi-column adds visual complexity, breaks the natural reading order, and confuses mobile reflow. Use it when you have a specific reason (visual density, screen real estate, related fields). Default to single-column otherwise.
How to set this up
Default to single column
Vertical stack, gap of 16-20px between fields. Easiest to scan and most accessible.
Use multi-column for related short fields
CSS Grid with auto-fit + minmax — responsive without media queries. Apply grid-column: 1/-1 to full-width fields.
Split into steps for long forms
Multi-step wizard when you have 8+ fields. Show progress, save partial state, max 5-7 fields per step.
Test on mobile
Every layout should collapse to single-column on narrow viewports. Use a real mobile device, not just DevTools resize.
Single column default, multi-column via CSS Grid auto-fit, multi-step for 8+ fields.
Frequently asked questions
When should I use a multi-column form layout?
When you have multiple short related fields that benefit from being side-by-side (first/last name, city/state/zip). Default to single-column otherwise — multi-column adds visual complexity and slows scanning for unrelated fields.
How do I make a responsive multi-column form without media queries?
CSS Grid: `grid-template-columns: repeat(auto-fit, minmax(220px, 1fr))`. Fields auto-flow to multiple columns when there's room; collapse to single column on narrow viewports. No @media required.
How do I make one field span both columns in a multi-column form?
Add `grid-column: 1 / -1` to the field's wrapper. That spans the field from the first track to the last regardless of how many tracks the grid currently has.
When is a multi-step form worth it?
When you have 8+ fields and completion rate is critical (e.g., signup flows, surveys). Splits cognitive load across steps. Cost: more code (step navigation, progress indicator, partial save). Use single-page for 7 fields or fewer.
Can I mix single and multi-column in the same form?
Yes. Use grid-column: 1/-1 to make specific fields span the full row even inside a multi-column grid. Common pattern: name fields side-by-side, message field full-width.
Related guides
Ship the form, not the backend.
Free for 1,000 submissions/month. Email delivery, AI spam filtering, signed webhooks, real dashboard — all on the free plan. No credit card.
Get a free access key →