Flexbox is a 1-dimensional layout system ideal for aligning items along a row or column, distributing free space, and handling dynamic content sizes.
CSS Flexbox
1) Flex Container & Axes
.container {
display: flex; /* becomes a flex container */
flex-direction: row; /* main axis = horizontal */
gap: 10px; /* space between items */
}
1
2
3
Main axis: left → right (row). Cross axis: top ↕ bottom.
2) Direction, Wrap & Gap
.row { flex-direction: row; }
.column { flex-direction: column; }
.wrap { flex-wrap: wrap; }
.nowrap { flex-wrap: nowrap; }
.with-gap { gap: 12px; }
column
A
B
C
wrap + gap
Tag 1
Tag 2
Tag 3
Tag 4
Tag 5
Tag 6
Tag 7
Tag 8
Tag 9
Tag 10
Tag 11
Tag 12
3) Alignment: justify-content & align-items
.centered{
display: flex;
justify-content: center; /* main axis */
align-items: center; /* cross axis */
}
start/start
2
3
center/center
2
3
space-between
2
3
align-content controls multi-row alignment when wrapping.
4) Sizing: flex-grow, flex-shrink, flex-basis
.item-1 { flex: 1 1 120px; } /* grow 1, shrink 1, base 120px */
.item-2 { flex: 2 1 120px; } /* twice the free space of item-1 */
.item-3 { flex: 0 0 120px; } /* fixed width */
flex:1 1 120px
flex:2 1 120px
flex:0 0 120px
5) Per-Item Alignment with align-self
.i1 { align-self: flex-start; }
.i2 { align-self: center; }
.i3 { align-self: flex-end; }
start
center
end
6) Reordering with order
.a { order: 3; }
.b { order: 1; }
.c { order: 2; }
B (1)
C (2)
A (3)
Use order cautiously for accessibility: DOM order still matters for screen readers & keyboard tabbing.
7) Common Layout Patterns
a) App/Website Nav Bar
.nav{
display: flex;
align-items: center;
justify-content: space-between;
}
b) Responsive Card Grid (wrap + basis)
.cards { display: flex; flex-wrap: wrap; gap: 12px; }
.card { flex: 1 1 220px; }
HTML
Learn the structure of the web.
CSS
Style and layout techniques.
JavaScript
Add interactivity and logic.
Bootstrap
Build responsive UIs quickly.
c) Sidebar + Main Content
.layout{ display: flex; gap: 12px; }
.layout .side{ flex: 0 0 200px; }
.layout .main{ flex: 1 1 auto; }
d) Equal Height Columns
.cols{ display: flex; gap: 12px; }
.cols > div{ flex: 1; }
Column 1
Auto equal height
Auto equal height
Column 2
with more content
to demonstrate
with more content
to demonstrate
Column 3
8) Debug Helpers
/* temporary borders/backgrounds help visualize alignment */
.debug { outline: 1px dashed #ccc; }
Quick Notes:
- Use
gapfor spacing—no extra margins needed. flexshorthand =grow shrink basis(e.g.,1 1 200px).align-itemsfor single line;align-contentfor multi-line wrap.- Prefer DOM order for accessibility; avoid heavy reliance on
order. - Flexbox is 1-D. For complex two-dimensional grids, use CSS Grid.