12-column grid

The standard web layout skeleton: one row split into 12 equal columns, so blocks can take clean halves, thirds, quarters, or sixths.

the invisible columnsdesigner grid lines12 column layouttwelve column gridthe bootstrap gridcol-span-6 thing12-colum gridhow do I split a row into thirds cleanly

See it

Live demo coming soon

What it is

Twelve columns won because 12 divides by 2, 3, 4, and 6. One row can hold halves (6 + 6), thirds (4 + 4 + 4), quarters (3 + 3 + 3 + 3), or a lopsided 8 + 4 sidebar split, and every one of those still lands on the same vertical lines. The grid itself is three numbers: column count, gutter (the gap between columns), and margin (the space outside the outermost columns). The 960 Grid System popularised it, Bootstrap made it universal, and Figma ships it as a default layout grid.

You reach for it whenever more than a couple of sections need to agree with each other. In CSS it is one line, grid-template-columns: repeat(12, minmax(0, 1fr)) plus a gap, and children claim tracks with grid-column: span 4. The grid is a shared agreement, not decoration, so its value is proportional to how many components respect it.

Gotcha: use minmax(0, 1fr) rather than a plain 1fr track. A 1fr track refuses to shrink below its content, so one long unbroken string or a wide table blows the whole grid past the viewport. Second gotcha: 12 columns is a desktop convenience, not a law of nature. Narrow screens drop to fewer: Material Design's responsive grid uses 4 columns on phones, 8 on tablets, and 12 on desktop, and plenty of teams pick their own step such as halving to 6. Trying to keep twelve 20px columns on a phone produces nonsense.

Ask AI for it

Lay this page out on a 12-column grid. Use CSS Grid on the container: 'display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 24px;' inside a max-width wrapper of 1200px with 24px side margins. Place every section by column span ('grid-column: span 4' for a third, 'span 6' for a half, 'span 8' with a 'span 4' sidebar for an article layout) instead of fixed pixel widths. Drop to 8 columns below 1024px and 4 columns below 640px, remapping spans at each breakpoint. Add a toggleable grid overlay so the columns can be checked visually.

You might have meant

grid systemguttercolumn spanbreakpointcontainer max width wrapper

Go deeper