Skip to the content.

CSS Grid Cheatsheet

CSS Grid Cheatsheet

A quick-reference guide for the CSS Grid Layout, covering grid container (parent) configurations, grid item (child) placements, and common layout patterns.

Container Properties (Parent)

Initialize a grid layout context by defining display: grid or display: inline-grid.

.container {
    display: grid;                  /* Initialize a block-level grid container */
    /* display: inline-grid; */     /* Initialize an inline-level grid container */
}

1. Template Columns & Rows

Defines the structure of columns and rows with space-separated sizing lists.

.container {
    /* Define 3 columns of 100px, 2fr, and 1fr (fractional units) */
    grid-template-columns: 100px 2fr 1fr;
    
    /* Define 2 rows of 50px and auto-height */
    grid-template-rows: 50px auto;

    /* Repeat Helper: repeat(count, sizing) */
    /* grid-template-columns: repeat(3, 1fr); */ /* 3 equal-width columns */

    /* Minmax Helper: locks minimum size but expands if space allows */
    /* grid-template-columns: repeat(3, minmax(200px, 1fr)); */
}

2. Template Areas

Provides an intuitive, visual structural map of named grid cells, which child items can bind to.

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

3. Gaps (Spacing)

Specifies the explicit minimum spacing between grid lines (rows and columns).

.container {
    gap: 1.5rem;                    /* Spacing of 1.5rem between both rows and columns */
    /* row-gap: 1rem; */            /* Spacing between rows only */
    /* column-gap: 2rem; */         /* Spacing between columns only */
}

4. Items Alignment (Inside Cells)

Aligns all grid items inside their individual allocated cell boundaries.

.container {
    /* Horizontal alignment along inline axis (start, end, center, stretch) */
    justify-items: stretch;         /* Stretch items to fill full width (default) */
    
    /* Vertical alignment along block axis (start, end, center, stretch) */
    align-items: stretch;           /* Stretch items to fill full height (default) */
    
    /* Shorthand: place-items: [align-items] [justify-items] */
    place-items: center center;     /* Perfect alignment in the center of cells */
}

5. Content Alignment (Entire Grid)

Aligns the entire grid system itself inside the container (only has an effect if the container is larger than the total grid size).

.container {
    /* Horizontal alignment (start, end, center, stretch, space-between, space-around, space-evenly) */
    justify-content: center;
    
    /* Vertical alignment (start, end, center, stretch, space-between, space-around, space-evenly) */
    align-content: center;
    
    /* Shorthand: place-content: [align-content] [justify-content] */
    place-content: space-between center;
}

6. Implicit Grid (Auto sizing)

Controls sizes for rows and columns that are generated implicitly (when there are more items than explicit cells declared).

.container {
    grid-auto-rows: 150px;          /* Any implicitly created rows will have a height of 150px */
    grid-auto-flow: row;            /* Flow direction (row, column, or dense auto-fill) */
}

Item Properties (Children)

Direct child elements can be positioned precisely across grid lines (which start indexing at 1) or mapped directly to named areas.

/*
Line Index Visual Mapping (for a 3-column grid):
Line 1           Line 2           Line 3           Line 4
  |    Column 1    |    Column 2    |    Column 3    |
*/

1. Line-Based Placements (Columns)

Specifies starting and ending lines for an item’s horizontal stretch.

.item-col {
    grid-column-start: 1;           /* Start at line 1 */
    grid-column-end: 3;             /* End at line 3 (spans column 1 and 2) */

    /* Shorthand: grid-column: [start] / [end] */
    /* grid-column: 1 / 3; */
    
    /* Span Shorthand: [start] / span [count] */
    /* grid-column: 2 / span 2; */  /* Start at line 2 and span 2 columns */
}

2. Line-Based Placements (Rows)

Specifies starting and ending lines for an item’s vertical stretch.

.item-row {
    grid-row-start: 1;
    grid-row-end: 4;

    /* Shorthand: grid-row: [start] / [end] */
    /* grid-row: 1 / 4; */
    /* grid-row: 1 / span 3; */
}

3. Named Area Mapping

Binds a child item directly to a named structural region defined on the parent container.

.header {
    grid-area: header;              /* Occupies all cells labeled "header" in template-areas */
}
.sidebar {
    grid-area: sidebar;             /* Occupies all cells labeled "sidebar" */
}
.main-body {
    grid-area: main;                /* Occupies all cells labeled "main" */
}

4. Individual Cell Alignment

Overrides the container’s justify-items and align-items for a single grid item.

.item-special {
    justify-self: center;           /* Horizontal alignment (start, end, center, stretch) */
    align-self: end;                /* Vertical alignment (start, end, center, stretch) */
    
    /* Shorthand: place-self: [align-self] [justify-self] */
    place-self: end center;
}

Common Layout Patterns

1. Auto-Fit Responsive Grid (The Media-Query-Free Grid)

The ultimate responsive grid pattern. It automatically wraps and shrinks columns based on viewport size, completely eliminating the need for media queries!

.responsive-grid {
    display: grid;
    /* Create as many columns as fit (auto-fit), with a minimum size of 250px and a max of 1fr */
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 1.5rem;
}

Note: auto-fit stretches columns to fill empty space. auto-fill preserves empty columns without stretching.

A clean, grid-area-based layout template mapping out a standard dashboard or blog structure.

<div class="app-layout">
  <header class="header">Header</header>
  <aside class="sidebar">Sidebar</aside>
  <main class="main-body">Main Content</main>
  <footer class="footer">Footer</footer>
</div>
.app-layout {
    display: grid;
    grid-template-columns: 240px 1fr;
    grid-template-rows: 60px 1fr 50px;
    grid-template-areas:
        "header  header"
        "sidebar main"
        "footer  footer";
    min-height: 100vh;
}

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

3. Dynamic Sidebar Layout (Minmax Sidebar)

A sidebar layout where the sidebar never goes below 200px but shrinks slightly if needed, while the main content takes up all remaining fractional space.

.dashboard {
    display: grid;
    grid-template-columns: minmax(200px, 300px) 1fr;
    gap: 1rem;
}