跳到主要內容
前端開發

Flexbox 對齊與彈性尺寸筆記

記錄 Flexbox 的主軸與交錯軸對齊、flex-direction、flex-wrap,以及 flex-grow、flex-shrink、flex-basis 等常用屬性。

W

這篇是當時練習 Flexbox 時整理的屬性與對齊方式筆記。

align-items

align-items 用來設定 Flex Item 在**交錯軸(Cross Axis)**上的對齊方式。

flex-start

.container {
  display: flex;
  align-items: flex-start;
}

align-items flex-start

center

.container {
  display: flex;
  align-items: center;
}

align-items center

stretch

.container {
  display: flex;
  align-items: stretch;
}

align-items stretch

flex-end

.container {
  display: flex;
  align-items: flex-end;
}

align-items flex-end

baseline

.container {
  display: flex;
  align-items: baseline;
}

align-items baseline

align-self

align-self 可以單獨設定某一個 Flex Item 在交錯軸上的對齊方式,覆蓋父層的 align-items。

.item {
  align-self: center;
}

align-self

Flexbox 的主軸與交錯軸

啟用 Flexbox:

.container {
  display: flex;
}

幾個常用屬性:

  • flex-direction:決定主軸的方向
  • flex-wrap:決定項目是否換行
  • justify-content:設定主軸上的對齊方式
  • align-items:設定交錯軸上的對齊方式
  • align-self:設定單一項目的交錯軸對齊

flex-flow

flex-flow 是 flex-direction 與 flex-wrap 的縮寫。

例如:

.container {
  flex-flow: row wrap;
}

等同:

.container {
  flex-direction: row;
  flex-wrap: wrap;
}

flex-direction

flex-direction: row | row-reverse | column | column-reverse;

row

預設值。

一般由左到右排列:

1 → 2 → 3

row-reverse

與 row 相反:

3 ← 2 ← 1

column

將主軸改成垂直方向,由上往下排列。

1
↓
2
↓
3

column-reverse

與 column 相反,由下往上排列。

flex-wrap

控制 Flex Item 是否換行。

flex-wrap: nowrap | wrap | wrap-reverse;

nowrap

預設值,不換行。

.container {
  flex-wrap: nowrap;
}

wrap

空間不足時換到下一行。

.container {
  flex-wrap: wrap;
}

wrap-reverse

同樣會換行,但是交錯軸的排列方向相反。

.container {
  flex-wrap: wrap-reverse;
}

flex-grow

flex-grow 設定當容器還有剩餘空間時,各個 Flex Item 可以分配多少比例。

.item {
  flex-grow: 1;
}

例如三個 Item 都設定:

.item {
  flex-grow: 1;
}

剩餘空間就會依相同比例分配。

flex-shrink

flex-shrink 設定容器空間不足時,Flex Item 的收縮比例。

.item {
  flex-shrink: 1;
}

預設值是 1。

flex-basis

flex-basis 設定 Flex Item 在主軸上的初始尺寸。

.item {
  flex-basis: 200px;
}

也可以使用:

.item {
  flex-basis: auto;
}

預設值是 auto。

flex 縮寫

flex 可以一次設定:

flex-grow
flex-shrink
flex-basis

格式:

.item {
  flex: flex-grow flex-shrink flex-basis;
}

例如:

.item {
  flex: 1 1 auto;
}

三個屬性的初始值分別是:

flex-grow: 0
flex-shrink: 1
flex-basis: auto

因此 flex 的初始值相當於:

.item {
  flex: 0 1 auto;
}

order

order 可以改變 Flex Item 的顯示順序。

.item {
  order: 1;
}

數字越小會排得越前面,也可以使用負數:

.item {
  order: -1;
}

Flexbox order

垂直置中範例

當時留下來的一個 Loading 區塊範例:

.loading-box {
  position: relative;
  width: 100%;
  display: flex;
  flex-direction: column;
  min-height: 100%;

  .loading-area {
    position: relative;
    display: flex;
    align-items: center;
    flex-grow: 1;
  }
}

父層使用:

flex-direction: column;

讓內容垂直排列。

.loading-area 再透過:

display: flex;
align-items: center;
flex-grow: 1;

讓區塊填滿剩餘空間,並將內容在交錯軸上置中。

2026 年後記

這篇是 2020 年學習 Flexbox 時留下來的筆記。

Flexbox 到現在仍然是 CSS 版面配置非常常用的方式,這篇記錄的 flex-direction、flex-wrap、justify-content、align-items、flex-grow、flex-shrink 與 flex-basis 等屬性也仍然適用。

整理舊文時修正了幾個當時筆記中的錯誤,例如 flex-grow 的名稱、flex 的初始值,以及 row 的排列方向,其他內容則保留作為當時的 Flexbox 學習紀錄。

分享這篇