12-column grid

12분할 그리드

Divide the width into 12 equal columns; every element declares how many columns it spans. The web's default grid system.

Also known as: 12-col gridBootstrap grid
···
html
<div class="stage">
  <div class="cols show" id="cols"></div>
  <div class="content" id="content"></div>
</div>
css
.stage{position:relative;width:min(92%,560px);height:min(90%,240px)}
.cols{position:absolute;inset:0;z-index:2;display:grid;grid-template-columns:repeat(12,1fr);gap:2%;opacity:.3;
  transition:opacity .4s;pointer-events:none}
.cols.show{opacity:1}
.cols i{background:color-mix(in oklab,var(--accent) 20%,transparent);border-left:1px dashed color-mix(in oklab,var(--accent) 55%,transparent);
  border-right:1px dashed color-mix(in oklab,var(--accent) 55%,transparent)}
.content{position:absolute;inset:0;z-index:1;display:grid;grid-template-columns:repeat(12,1fr);gap:2%}
.content b{border-radius:8px;background:var(--surface);border:1px solid var(--line);display:grid;place-items:center;
  color:var(--muted);font-size:clamp(9px,1.6vmin,12px);transition:background .3s,color .3s}
.content b.active{background:var(--accent-2);color:#fff;border-color:transparent}
js
const cols = document.getElementById('cols');
for (let i = 0; i < 12; i++) cols.appendChild(document.createElement('i'));
const content = document.getElementById('content');
const spans = [
  [12],
  [6, 6],
  [4, 4, 4],
  [3, 3, 3, 3],
];
function render(spanSet, activeIdx) {
  content.innerHTML = '';
  spanSet.forEach((s, idx) => {
    const b = document.createElement('b');
    b.style.gridColumn = 'span ' + s;
    b.textContent = 'span ' + s;
    if (idx === activeIdx) b.classList.add('active');
    content.appendChild(b);
  });
}
let si = 0;
render(spans[0], 0);
setInterval(() => {
  cols.classList.toggle('show');
  si = (si + 1) % spans.length;
  render(spans[si], Math.floor(Math.random() * spans[si].length));
}, 1500);

12 is popular because it has so many divisors (1, 2, 3, 4, 6, 12) — splitting the width in half, thirds or quarters always lands on whole columns. It carries over from print grid systems, and frameworks like Bootstrap made it the web's default.

With CSS Grid you set grid-template-columns: repeat(12, 1fr) and then just declare how many columns each element spans — grid-column: span 4 — with no manual column-number bookkeeping like old float-based grids needed.

Columns and gutters (the gaps between columns) are separate concepts — see the gutter entry. Responsively, the usual move is to keep 12 columns fixed and change each element's span per breakpoint: span 12 on mobile, span 4 on desktop.

When to use

A solid default for marketing sites, blogs and dashboards that need consistent content widths across many pages.