Click any property to expand the explanation, visual diagram, and examples.
Flexbox
π Flex Container Properties
display: flex container
.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
.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
.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
.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
.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
.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
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
.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
.item { flex-shrink: 1; } /* default: can shrink */
.item { flex-shrink: 0; } /* don't shrink */
flex-basis item
.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
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
.item-1 { order: 3; }
.item-2 { order: 1; }
.item-3 { order: 2; }
/* Renders: [2] [3] [1] */
CSS Grid
π² Grid Container Properties
display: grid container
.container {
display: grid;
display: inline-grid;
}
grid-template-columns / rows container
.container {
grid-template-columns: 200px 1fr 1fr;
grid-template-rows: 100px auto;
}
/* 200px 1fr 1fr ββββββββ¬βββββββ¬βββββββ β β β β 100px ββββββββΌβββββββΌβββββββ€ β β β β auto ββββββββ΄βββββββ΄βββββββ */
fr units container
grid-template-columns: 1fr 2fr 1fr; /* Total = 4fr. Columns get 25%, 50%, 25% */
/* 1fr 2fr 1fr ββββββββ¬βββββββββββββ¬βββββββ β 25% β 50% β 25% β ββββββββ΄βββββββββββββ΄βββββββ */
repeat() container
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
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
/* 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
.container {
gap: 16px; /* row and column */
gap: 16px 24px; /* row-gap column-gap */
row-gap: 16px;
column-gap: 24px;
}
grid-template-areas container
.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
.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
.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
.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
| Property | Flexbox | Grid |
|---|---|---|
| Enable | display: flex | display: grid |
| Direction | flex-direction | grid-template-columns/rows |
| Wrap | flex-wrap | auto-fill / auto-fit |
| Main axis align | justify-content | justify-content |
| Cross axis align | align-items | align-items |
| Gap | gap | gap |
| Item sizing | flex: 1 | 1fr |
| Item placement | order | grid-column / grid-row |
| Named areas | β | grid-template-areas |
| Responsive | flex-wrap: wrap | repeat(auto-fit, minmax()) |
| Self align | align-self | justify-self / align-self |