iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0
Modern Web

Modern Web:從基礎、框架到前端學習系列 第 3

Day 3:CSS3 現代排版:Flexbox 基礎

  • 分享至 

  • xImage
  •  

昨天我們學了 HTML5 的語意化標籤,今天要進入前端排版的重頭戲 —— Flexbox
Flexbox (Flexible Box Layout) 是現代 CSS 最常用的排版方式之一,它讓「水平與垂直置中、彈性寬度、等分佈列」變得非常直觀。


為什麼需要 Flexbox?

在 Flexbox 出現之前,排版通常要靠:

  • float 浮動 + clear
  • inline-block + 負邊距
  • table 樣式的 hack

但這些方式往往又麻煩又不直覺。
Flexbox 解決了這些問題,讓容器內的元素可以自動調整排列方式,不需要再寫一堆奇怪的 CSS。


Flexbox 基本概念

要使用 Flexbox,首先要在父元素設定:

.container {
  display: flex;
}

這樣.container裡面的子元素就會成為 flex items,可以依照各種屬性來排版。


常見屬性整理

父容器 (Container) 屬性

  • display: flex; → 啟用 flexbox
  • flex-direction → 主軸方向
    • row(預設,橫向排列)
    • column(縱向排列)
  • justify-content → 主軸對齊方式
    • flex-start(靠左 / 靠上)
    • flex-end(靠右 / 靠下)
    • center(置中)
    • space-between(均分,中間留白)
    • space-around(平均留白,邊界也有空間)
  • align-items → 交叉軸對齊方式
    • flex-startflex-endcenterstretch

子項目 (Item) 屬性

  • flex-grow → 放大比例
  • flex-shrink → 縮小比例
  • flex-basis → 初始大小
  • align-self → 單一項目的對齊方式

範例:水平置中 + 垂直置中

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
  <meta charset="UTF-8">
  <title>Flexbox 範例</title>
  <style>
    .container {
      display: flex;                /* 啟用 Flexbox */
      justify-content: center;      /* 水平置中 */
      align-items: center;          /* 垂直置中 */
      height: 100vh;                /* 全螢幕高度 */
      background: #f0f0f0;
    }
    .box {
      width: 150px;
      height: 150px;
      background: #4CAF50;
      color: white;
      font-size: 20px;
      display: flex;                /* 內部再用一次 flex */
      justify-content: center;
      align-items: center;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="box">置中</div>
  </div>
</body>
</html>

這段程式碼就能讓.box完美地在畫面中央!


範例:三欄等分排版

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
  <meta charset="UTF-8">
  <title>三欄排版</title>
  <style>
    .container {
      display: flex;
      justify-content: space-between; /* 等間距 */
      padding: 20px;
      background: #eee;
    }
    .card {
      flex: 1;                       /* 等分寬度 */
      margin: 0 10px;                /* 卡片間距 */
      background: #2196F3;
      color: white;
      padding: 20px;
      border-radius: 8px;
      text-align: center;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="card">卡片 1</div>
    <div class="card">卡片 2</div>
    <div class="card">卡片 3</div>
  </div>
</body>
</html>

透過flex: 1,三個卡片會自動等分剩餘空間,這就是 Flexbox 的強大之處。


最佳實踐 (Best Practices)

✅ 優先用 Flexbox 做「一維排版」(橫向或縱向)。
✅ 多維度排版(像是網格)建議用 CSS Grid。
flex: 1 可以快速讓元素平分空間。
✅ 善用 justify-contentalign-items,大多數對齊需求都能解決。


今日心得

今天實作下來,我覺得 Flexbox 真的是 CSS 的「救星」。
不管是 置中對齊、等分排版,還是 彈性縮放,都能輕鬆解決,完全不需要再用floatposition來苦苦調整。

明天 Day 4,我們會進入 CSS Grid:二維排版,讓網頁結構更完整!


上一篇
Day 2:HTML5 語意化標籤與最佳實踐
下一篇
Day 4:CSS Grid:二維排版
系列文
Modern Web:從基礎、框架到前端學習5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言