CSS Grid Quick Reference


CSS Grid is a powerful 2-dimensional layout system that allows you to create complex layouts with ease.

Container Properties

Basic Setup

.grid-container {
  display: grid;
  grid-template-columns: 200px 1fr 100px;
  grid-template-rows: auto 1fr auto;
  gap: 20px;
}

Grid Template Areas

.grid-container {
  display: grid;
  grid-template-areas:
    "header header header"
    "sidebar main aside"
    "footer footer footer";
  grid-template-columns: 200px 1fr 200px;
  grid-template-rows: auto 1fr auto;
}

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

Responsive Grids

.responsive-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  gap: 1rem;
}

Item Properties

Positioning

.grid-item {
  grid-column: 1 / 3; /* Span from column 1 to 3 */
  grid-row: 2 / span 2; /* Start at row 2, span 2 rows */
}

/* Alternative syntax */
.grid-item {
  grid-column-start: 1;
  grid-column-end: 3;
  grid-row-start: 2;
  grid-row-end: 4;
}

Alignment

.grid-item {
  justify-self: center; /* Horizontal alignment */
  align-self: center; /* Vertical alignment */
}

.grid-container {
  justify-items: stretch; /* Default horizontal alignment */
  align-items: stretch; /* Default vertical alignment */
}

Common Patterns

Holy Grail Layout

.holy-grail {
  display: grid;
  grid-template: auto 1fr auto / 200px 1fr 200px;
  min-height: 100vh;
}

.header {
  grid-column: 1 / -1;
}
.footer {
  grid-column: 1 / -1;
}

Card Grid

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: 1.5rem;
  padding: 1rem;
}

Masonry-like Layout

.masonry {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  grid-auto-rows: 10px;
}

.masonry-item {
  grid-row-end: span var(--row-span);
}

Functions & Keywords

Fractional Units

grid-template-columns: 1fr 2fr 1fr; /* 1:2:1 ratio */

Repeat Function

grid-template-columns: repeat(3, 1fr);
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-template-columns: repeat(auto-fill, 100px);

MinMax Function

grid-template-columns: minmax(200px, 1fr) 300px;

Fit-Content Function

grid-template-columns: fit-content(200px) 1fr;

Browser Support Tips

  • Use @supports for feature detection
  • Provide fallbacks with flexbox or floats
  • Consider using CSS Grid for modern browsers only

Debugging

/* Visualize grid lines */
.grid-container {
  background-image: linear-gradient(rgba(255, 0, 0, 0.3) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255, 0, 0, 0.3) 1px, transparent 1px);
  background-size: 20px 20px;
}

Use Firefox Developer Tools for the best grid debugging experience!