CPCODELAB
CSS

CSS Grid: Two-Dimensional Layout

13 min read

Introducing CSS Grid

CSS Grid is a two-dimensional layout system — it handles both rows and columns simultaneously. It is the best tool for page-level layout and complex component arrangements.

css
.grid-container {
  display: grid;

  /* Define columns: three equal-width columns */
  grid-template-columns: 1fr 1fr 1fr;

  /* repeat() shorthand */
  grid-template-columns: repeat(3, 1fr);

  /* Mixed sizes */
  grid-template-columns: 250px 1fr;

  /* Define rows */
  grid-template-rows: auto 1fr auto;

  /* Gap between cells */
  gap: 1.5rem;
  column-gap: 2rem;
  row-gap: 1rem;
}

Placing Items on the Grid

css
.header {
  /* Span all 3 columns */
  grid-column: 1 / -1;
}

.sidebar {
  grid-column: 1 / 2;
  grid-row: 2 / 4;
}

.main {
  grid-column: 2 / -1;
  grid-row: 2;
}

/* Named template areas */
.layout {
  display: grid;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
  grid-template-columns: 240px 1fr;
  grid-template-rows: auto 1fr auto;
}

.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main    { grid-area: main; }
.footer  { grid-area: footer; }

auto-fill and auto-fit

css
/* Responsive grid: as many 200px columns as fit, with no media queries */
.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 1rem;
}

Use Grid for two-dimensional layouts (rows and columns) and Flexbox for one-dimensional ones (a row or a column). They work perfectly together — Grid for the page shell, Flexbox for components inside cells.

Ready to test yourself?
Practice CSS— quiz & coding exercises