一、Flexbox 是什麼?從容器開始設定

Flexbox 的完整名稱是 Flexible Box Layout,主要用途是在一個容器中排列多個子元素。過去要將元素並排或垂直置中,經常需要使用浮動、定位或複雜的間距計算;使用 Flexbox 後,只要幾行 CSS 就能完成。

首先,在父層元素設定 display: flex:

<div class="container">  <div class="item">項目一</div>  <div class="item">項目二</div>  <div class="item">項目三</div> </div>.container {  display: flex; }

設定後,容器內的項目預設會由左至右水平排列。需要注意的是,display: flex 應該設定在父層,而不是每一個子元素上。

 

二、使用 Flexbox 快速完成水平與垂直置中

元素置中是 Flexbox 最常見的用途。justify-content 負責主軸方向的排列,align-items 則負責交錯軸方向的排列。

若要讓內容在容器內水平、垂直都置中,可以這樣寫:

.container {  display: flex;  justify-content: center;  align-items: center;  min-height: 300px; }

當 flex-direction 維持預設的 row 時,主軸是水平方向,因此 justify-content: center 會控制水平置中,而 align-items: center 會控制垂直置中。

如果垂直置中沒有明顯效果,通常是因為父層沒有高度。此時可以設定 height、min-height,或讓容器繼承外層的高度。

 

三、控制項目的排列方向與間距

Flexbox 不只能讓元素並排,也能控制排列方向和項目之間的空間。使用 flex-direction 可以決定項目要橫向還是直向排列:

.container {  display: flex;  flex-direction: column; }

常用的排列方向包括:

row:由左至右水平排列

row-reverse:由右至左水平排列

column:由上至下垂直排列

column-reverse:由下至上垂直排列

如果要調整項目之間的距離,建議使用 gap:

.container {  display: flex;  gap: 24px; }

若要平均分配容器中的剩餘空間,也能使用 justify-content:

.container {  display: flex;  justify-content: space-between; }

space-between 會讓第一個與最後一個項目靠近容器兩端;space-around 會在每個項目左右保留空間;space-evenly 則會讓所有間距保持一致。

 

四、使用 flex-wrap 處理響應式換行

Flexbox 預設會嘗試把所有項目放在同一行。如果項目太多,內容可能被壓縮。這時可以加入 flex-wrap: wrap,讓放不下的項目自動換到下一行。

.container {  display: flex;  flex-wrap: wrap;  gap: 20px; } .item {  flex: 1 1 240px; }

flex: 1 1 240px 可以拆解為三個設定:

第一個 1 代表項目可以放大

第二個 1 代表項目可以縮小

240px 代表項目的基準寬度

當容器空間足夠時,項目會並排並平均填滿空間;空間不足時,項目便會自動換行。這種寫法很適合用來製作商品卡片、文章列表或服務項目。

 

五、Flexbox 常見問題與實用技巧

如果只有某一個子元素需要不同的對齊方式,可以對該元素使用 align-self:

.item-special {  align-self: flex-end; }

製作導覽列時,也可以利用 margin-left: auto,把特定項目推到最右側:

.login-button {  margin-left: auto; }

另外,align-content 和 align-items 很容易混淆。align-items 控制每一行內的項目對齊;align-content 則控制多行內容在容器中的分布,而且只有在項目已經換行、容器又有額外高度時才會產生效果。

掌握 Flexbox 的關鍵,是先判斷目前的主軸方向,再選擇對應的對齊屬性。只要熟悉 display、justify-content、align-items、gap 和 flex-wrap,便能完成大部分常見的網頁排版。