πŸ“‹ Cheat Sheets

CSS Flexbox & Grid Cheat Sheet β€” Visual Guide


Click any property to expand the explanation, visual diagram, and examples.

Flexbox

πŸ“ Flex Container Properties

display: flex container
Enables flexbox on a container. Children become flex items.
.container {
  display: flex;        /* block-level flex container */
  display: inline-flex; /* inline-level flex container */
}
/* Before flex:        After flex:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚    β”‚ β”Œβ”€β”€β”β”Œβ”€β”€β”β”Œβ”€β”€β”β”‚
β”‚ β”‚  Item 1  β”‚ β”‚    β”‚ β”‚ 1β”‚β”‚ 2β”‚β”‚ 3β”‚β”‚
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β†’  β”‚ β””β”€β”€β”˜β””β”€β”€β”˜β””β”€β”€β”˜β”‚
β”‚ β”‚  Item 2  β”‚ β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚ β”‚  Item 3  β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ */
flex-direction container
Sets the main axis direction.
.container {
  flex-direction: row;            /* default: left β†’ right */
  flex-direction: row-reverse;    /* right β†’ left */
  flex-direction: column;         /* top β†’ bottom */
  flex-direction: column-reverse; /* bottom β†’ top */
}
/* row:              row-reverse:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [1] [2] [3]  β”‚   β”‚  [3] [2] [1] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

column: column-reverse: β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”‚ [1] β”‚ β”‚ [3] β”‚ β”‚ [2] β”‚ β”‚ [2] β”‚ β”‚ [3] β”‚ β”‚ [1] β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜ */

justify-content container
Aligns items along the main axis.
.container {
  justify-content: flex-start;    /* default */
  justify-content: flex-end;
  justify-content: center;
  justify-content: space-between;
  justify-content: space-around;
  justify-content: space-evenly;
}
/* flex-start:       flex-end:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚[1][2][3]     β”‚   β”‚     [1][2][3]β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

center: space-between: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ [1][2][3] β”‚ β”‚[1] [2] [3]β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

space-around: space-evenly: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ [1] [2] [3] β”‚ β”‚ [1] [2] [3] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ */

align-items container
Aligns items along the cross axis.
.container {
  align-items: stretch;     /* default: fill container height */
  align-items: flex-start;  /* top */
  align-items: flex-end;    /* bottom */
  align-items: center;      /* middle */
  align-items: baseline;    /* text baseline */
}
/* stretch:          center:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚[111][222][333]β”‚   β”‚              β”‚
β”‚[111][222][333]β”‚   β”‚ [1]  [2] [3]β”‚
β”‚[111][222][333]β”‚   β”‚              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

flex-start: flex-end: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ [1] [2] [3] β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ [1] [2] [3] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ */

flex-wrap container
Controls whether items wrap to new lines.
.container {
  flex-wrap: nowrap;       /* default: single line */
  flex-wrap: wrap;         /* wrap to new lines */
  flex-wrap: wrap-reverse; /* wrap upward */
}
/* nowrap:                wrap:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚[1][2][3][4][5][6]  β”‚   β”‚ [1] [2] [3]  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ [4] [5] [6]  β”‚
                         β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ */
gap container
Sets spacing between flex items (no outer margins needed).
.container {
  gap: 16px;              /* row and column gap */
  gap: 16px 24px;         /* row-gap column-gap */
  row-gap: 16px;
  column-gap: 24px;
}
/* gap: 16px;
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [1]  16px  [2]   β”‚
β”‚                  β”‚
β”‚ 16px             β”‚
β”‚                  β”‚
β”‚ [3]  16px  [4]   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ */
align-content container
Aligns wrapped lines along the cross axis. Only works with flex-wrap: wrap.
.container {
  flex-wrap: wrap;
  align-content: flex-start;
  align-content: flex-end;
  align-content: center;
  align-content: space-between;
  align-content: space-around;
  align-content: stretch;       /* default */
}

πŸ“ Flex Item Properties

flex-grow item
How much an item should grow relative to siblings.
.item { flex-grow: 0; }  /* default: don't grow */
.item { flex-grow: 1; }  /* take equal share of space */
.item-2 { flex-grow: 2; } /* take 2x share */
/* All flex-grow: 1:       Item 2 flex-grow: 2:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [  1  ][  2  ][3]β”‚     β”‚ [ 1 ][   2   ][3]β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ */
flex-shrink item
How much an item should shrink when space is tight.
.item { flex-shrink: 1; }  /* default: can shrink */
.item { flex-shrink: 0; }  /* don't shrink */
flex-basis item
The initial size of an item before growing/shrinking.
.item { flex-basis: auto; }   /* default: use width/height */
.item { flex-basis: 200px; }
.item { flex-basis: 30%; }

/* Shorthand: flex: grow shrink basis / .item { flex: 1; } / flex: 1 1 0% / .item { flex: 0 0 200px; } / fixed 200px, no grow/shrink */

align-self item
Override align-items for a single item.
.item { align-self: auto; }       /* default: inherit */
.item { align-self: flex-start; }
.item { align-self: flex-end; }
.item { align-self: center; }
.item { align-self: stretch; }
/* align-items: flex-start, item-2 align-self: flex-end
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [1]  [2]     [3] β”‚
β”‚       ↓          β”‚
β”‚      [2]         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ */
order item
Change visual order without changing HTML.
.item-1 { order: 3; }
.item-2 { order: 1; }
.item-3 { order: 2; }
/* Renders: [2] [3] [1] */

CSS Grid

πŸ”² Grid Container Properties

display: grid container
Enables CSS Grid on a container.
.container {
  display: grid;
  display: inline-grid;
}
grid-template-columns / rows container
Define column and row sizes.
.container {
  grid-template-columns: 200px 1fr 1fr;
  grid-template-rows: 100px auto;
}
/* 200px  1fr   1fr
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
β”‚      β”‚      β”‚      β”‚ 100px
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
β”‚      β”‚      β”‚      β”‚ auto
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜ */
fr units container
Fractional units distribute remaining space.
grid-template-columns: 1fr 2fr 1fr;
/* Total = 4fr. Columns get 25%, 50%, 25% */
/*  1fr    2fr     1fr
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
β”‚ 25%  β”‚    50%     β”‚ 25%  β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜ */
repeat() container
Shorthand for repeating track sizes.
grid-template-columns: repeat(3, 1fr);
/* Same as: 1fr 1fr 1fr */

grid-template-columns: repeat(3, 100px 50px); /* Same as: 100px 50px 100px 50px 100px 50px */

minmax() container
Set minimum and maximum track sizes.
grid-template-columns: minmax(200px, 1fr) 2fr;
/* First column: at least 200px, at most 1fr */

grid-template-columns: repeat(3, minmax(150px, 1fr));

auto-fill / auto-fit container
Create responsive grids without media queries.
/* auto-fill: creates as many tracks as fit, even if empty */
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));

/* auto-fit: same but collapses empty tracks */ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));

/* auto-fill (wide screen):
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
β”‚ item β”‚ item β”‚      β”‚      β”‚  ← empty tracks kept
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜

auto-fit (wide screen):
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   item    β”‚   item    β”‚  ← items stretch
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ */
grid-gap / gap container
Spacing between grid cells.
.container {
  gap: 16px;            /* row and column */
  gap: 16px 24px;       /* row-gap column-gap */
  row-gap: 16px;
  column-gap: 24px;
}
grid-template-areas container
Name grid areas for intuitive layouts.
.container {
  grid-template-areas:
    "header header header"
    "sidebar main main"
    "footer footer footer";
  grid-template-columns: 200px 1fr 1fr;
  grid-template-rows: 60px 1fr 40px;
}
.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main    { grid-area: main; }
.footer  { grid-area: footer; }
/* β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚        header           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚sidebar β”‚     main       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚        footer           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ */

πŸ“ Grid Item Placement

grid-column / grid-row item
Place items by line numbers.
.item {
  grid-column: 1 / 3;    /* span columns 1-2 */
  grid-row: 1 / 2;       /* row 1 only */
}

/* Shorthand with span / .item { grid-column: span 2; / span 2 columns / grid-row: 1 / span 3; / start at row 1, span 3 */ }

/* grid-column: 1 / 3
  col1   col2   col3
β”Œβ”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”
β”‚  item item  β”‚      β”‚ ← spans 2 columns
β”œβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€
β”‚      β”‚      β”‚      β”‚
β””β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”˜ */
grid-area item
Shorthand for row-start / column-start / row-end / column-end.
.item {
  grid-area: 1 / 1 / 3 / 3;
  /* row-start / col-start / row-end / col-end */
}

/* Or use named areas */ .item { grid-area: header; }

justify-items / align-items (Grid) container
Align all items within their grid cells.
.container {
  justify-items: start | end | center | stretch;  /* horizontal */
  align-items: start | end | center | stretch;    /* vertical */
  place-items: center center;  /* shorthand: align justify */
}

Quick Reference Table

PropertyFlexboxGrid
Enabledisplay: flexdisplay: grid
Directionflex-directiongrid-template-columns/rows
Wrapflex-wrapauto-fill / auto-fit
Main axis alignjustify-contentjustify-content
Cross axis alignalign-itemsalign-items
Gapgapgap
Item sizingflex: 11fr
Item placementordergrid-column / grid-row
Named areasβ€”grid-template-areas
Responsiveflex-wrap: wraprepeat(auto-fit, minmax())
Self alignalign-selfjustify-self / align-self