CSS Flexbox

Flexbox is a 1-dimensional layout system ideal for aligning items along a row or column, distributing free space, and handling dynamic content sizes.

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; }
Main content stretches

d) Equal Height Columns


.cols{ display: flex; gap: 12px; }
.cols > div{ flex: 1; }
Column 1
Auto equal height
Column 2
with more content
to demonstrate
Column 3

8) Debug Helpers


/* temporary borders/backgrounds help visualize alignment */
.debug { outline: 1px dashed #ccc; }

Quick Notes:

  • Use gap for spacing—no extra margins needed.
  • flex shorthand = grow shrink basis (e.g., 1 1 200px).
  • align-items for single line; align-content for 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.