splitforms.com
guide · html forms

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.

html
<!-- Multi-column responsive form (collapses to single column on mobile) -->
<style>
  .sf-form-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 16px;
    max-width: 720px; margin: 0 auto;
  }
  .sf-form-grid .full { grid-column: 1 / -1; }
  .sf-form-grid label { display: grid; gap: 6px; }
  .sf-form-grid input, .sf-form-grid textarea {
    padding: 10px 12px; border: 1px solid #d4d4d4; border-radius: 8px;
  }
  .sf-form-grid button {
    padding: 12px 24px; background: #1a1a1a; color: #fafaf7;
    border: 0; border-radius: 999px; cursor: pointer;
  }
</style>

<form class="sf-form-grid"
      action="https://splitforms.com/api/submit" method="POST">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />

  <label>First name<input name="first_name" required /></label>
  <label>Last name<input name="last_name" required /></label>
  <label>Email<input name="email" type="email" required /></label>
  <label>Phone<input name="phone" type="tel" /></label>

  <label class="full">Subject<input name="subject" required /></label>
  <label class="full">Message<textarea name="message" rows="5" required></textarea></label>

  <button type="submit" class="full">Send</button>
</form>

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

Step 01

Default to single column

Vertical stack, gap of 16-20px between fields. Easiest to scan and most accessible.

Step 02

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.

Step 03

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.

Step 04

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

HTML forms

HTML Form Design — Modern Patterns for 2026

HTML forms

HTML Form — How to Build and Submit Forms in HTML

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 →