Phase 3Layout

#11 CSS Grid

grid-template, areas, fr, auto-fit

What is CSS Grid?

CSS Grid is a two-dimensional layout system. Unlike Flexbox (one axis), Grid lets you control both rows and columns simultaneously.

Grid container

Basic grid
.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);  /* 3 equal columns */
  grid-template-rows: auto;
  gap: 20px;                              /* Row and column gap */
}

The fr unit and sizing

Column sizing
/* Fixed + flexible */
grid-template-columns: 250px 1fr;          /* Sidebar + main */

/* Min/max */
grid-template-columns: minmax(200px, 1fr) 2fr;

/* Responsive auto-fit */
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
/* ↑ Creates as many columns as fit, minimum 280px each */

Grid areas

Named grid areas
.layout {
  display: grid;
  grid-template-areas:
    "header  header  header"
    "sidebar main   main"
    "footer  footer  footer";
  grid-template-columns: 250px 1fr 1fr;
  grid-template-rows: auto 1fr auto;
  min-height: 100vh;
}

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

Placing items

Item placement
.item {
  grid-column: 1 / 3;    /* Span columns 1 to 3 */
  grid-row: 2 / 4;       /* Span rows 2 to 4 */
}

/* Shorthand */
.full-width {
  grid-column: 1 / -1;   /* Span all columns */
}

.span-2 {
  grid-column: span 2;   /* Span 2 columns from current position */
}

Alignment

Grid alignment
.grid {
  justify-items: center;    /* Horizontal alignment of items */
  align-items: center;      /* Vertical alignment of items */
  place-items: center;      /* Both at once */
}

.item {
  justify-self: end;        /* Override for one item */
  align-self: start;
}

Your turn

Try the CSS Grid commands below:

terminal — browser
user@stemlegacy:~$