CSS Grid
CSS Grid cheat sheet with grid-template, auto-fit, minmax, named areas, and responsive layout patterns with visual code examples.
Other CSS Sheets
Sign in to mark items as known and track your progress.
Sign inGrid Container
Create Grid Container
Transform any element into a grid layout container that creates a two-dimensional layout system
.container {
display: grid; /* or inline-grid */
}<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>Define Columns
Set the number and size of columns in your grid layout using various sizing units
.container {
grid-template-columns: 100px 200px auto;
grid-template-columns: 1fr 2fr 1fr;
grid-template-columns: repeat(3, 1fr);
grid-template-columns: minmax(100px, 1fr);
}<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
</div>Define Rows
Set the number and size of rows in your grid layout with flexible sizing options
.container {
grid-template-rows: 100px 200px auto;
grid-template-rows: repeat(3, 100px);
grid-auto-rows: minmax(100px, auto);
}<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
</div>Grid Gaps
Add consistent spacing between grid cells without using margins
.container {
gap: 10px; /* row and column gap */
column-gap: 20px; /* column gap only */
row-gap: 10px; /* row gap only */
gap: 10px 20px; /* row column */
}<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>Alignment
Justify Items (Horizontal)
Align grid items horizontally within their cells
.container {
justify-items: start; /* align to start */
justify-items: center; /* center items */
justify-items: end; /* align to end */
justify-items: stretch; /* stretch to fill */
}<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>Align Items (Vertical)
Align grid items vertically within their cells
.container {
align-items: start; /* align to top */
align-items: center; /* center vertically */
align-items: end; /* align to bottom */
align-items: stretch; /* stretch to fill */
}<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>Place Items (Both)
Shorthand to align items both horizontally and vertically in one declaration
.container {
place-items: center; /* center both */
place-items: start end; /* align / justify */
place-items: center stretch; /* center vertically, stretch horizontally */
}<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>Justify Content (Grid)
Align the entire grid within its container when the grid is smaller than the container
.container {
justify-content: start; /* align grid to start */
justify-content: center; /* center grid */
justify-content: space-between;/* space between columns */
justify-content: space-around; /* space around columns */
}<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>Grid Items
Position Columns
Control which columns a grid item spans using line numbers or named lines
.item {
grid-column: 1 / 3; /* start / end */
grid-column: span 2; /* span columns */
grid-column-start: 1;
grid-column-end: 3;
}<div class="container">
<div class="item span-2">Span 2</div>
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>Position Rows
Control which rows a grid item spans using line numbers or span keyword
.item {
grid-row: 1 / 3; /* start / end */
grid-row: span 2; /* span rows */
grid-row-start: 1;
grid-row-end: 3;
}<div class="container">
<div class="item span-rows">Span 2 Rows</div>
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>Grid Area
Place items using grid area names or shorthand for row and column positioning
.item {
grid-area: 1 / 1 / 3 / 3; /* row-start / col-start / row-end / col-end */
grid-area: header; /* named area */
}<div class="container">
<div class="header">Header</div>
<div class="sidebar">Sidebar</div>
<div class="main">Main</div>
<div class="footer">Footer</div>
</div>Advanced Grid
Auto-Fit vs Auto-Fill
Create responsive grids that automatically adjust the number of columns
.container {
/* Auto-fit - collapses empty columns */
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
/* Auto-fill - keeps empty columns */
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
}<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>Grid Auto Flow
Control how items are automatically placed in the grid
.container {
grid-auto-flow: row; /* default - fill by rows */
grid-auto-flow: column; /* fill by columns */
grid-auto-flow: dense; /* fill gaps */
grid-auto-flow: row dense; /* row with gap filling */
}<div class="container">
<div class="item">1</div>
<div class="item wide">2 (wide)</div>
<div class="item">3</div>
<div class="item tall">4 (tall)</div>
<div class="item">5</div>
</div>Subgrid
Allow nested grid items to inherit the parent grid's tracks
.child {
display: grid;
grid-template-columns: subgrid;
grid-template-rows: subgrid;
}<div class="parent">
<div class="child">
<div class="subitem">1</div>
<div class="subitem">2</div>
</div>
</div>Grid Functions
Powerful CSS functions for flexible and responsive grid sizing
.container {
grid-template-columns:
repeat(3, 1fr) /* repeat pattern */
minmax(100px, 1fr) /* min and max size */
fit-content(200px) /* fit content up to max */
clamp(100px, 50%, 300px); /* min, preferred, max */
}<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>Common Layouts
Holy Grail Layout
Classic web layout with header, footer, main content, and sidebars using grid
.container {
display: grid;
grid-template-areas:
"header header header"
"nav main aside"
"footer footer footer";
grid-template-columns: 200px 1fr 200px;
grid-template-rows: auto 1fr auto;
min-height: 100vh;
}<div class="container">
<header class="header">Header</header>
<nav class="nav">Navigation</nav>
<main class="main">Main Content</main>
<aside class="aside">Sidebar</aside>
<footer class="footer">Footer</footer>
</div>Responsive Card Grid
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;Masonry-Style Grid
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-auto-rows: 50px;
grid-auto-flow: dense;
/* Items use grid-row: span X; */