Tailwind CSS 概覽

深入理解 Utility-First 設計哲學,掌握 Tailwind CSS 的核心運作方式。

Utility-First 設計哲學——從語意化到功能化

傳統 CSS 開發流程(Semantic CSS)中,我們習慣先命名 HTML 元素(例如 .card.button-primary),再為其撰寫 CSS 規則。這種「語意化命名」雖然在小專案中直觀,但隨著專案增長,會面臨命名困難(Naming is hard)CSS 體積膨脹修改副作用三大痛點。你往往不敢刪除舊的 CSS,因為不確定是否會影響其他頁面,導致 CSS 檔案只增不減。

Tailwind CSS 採用 Utility-First(功能優先)思路——每個 class 只負責一個單一的 CSS 屬性。你不再需要為了解決「這個容器該叫什麼」而煩惱,而是直接在 HTML 標籤上組合預設的功能類別。這種方式將「關注點分離(Separation of Concerns)」從「技術層面(HTML 與 CSS 分開)」轉向了「組件層面(標記與樣式結合)」。

<!-- ❌ 傳統方式:需維護一個獨立的 .user-card CSS 規則 -->
<div class="user-card">
  <img src="..." class="avatar">
  <h2>User Name</h2>
</div>

<!-- ✅ Tailwind 方式:樣式與結構合一,無需額外 CSS 命名 -->
<div class="p-6 max-w-sm mx-auto bg-white rounded-xl shadow-lg flex items-center space-x-4 dark:bg-gray-800">
  <div class="shrink-0">
    <img class="h-12 w-12 rounded-full" src="..." alt="Avatar">
  </div>
  <div>
    <div class="text-xl font-medium text-black dark:text-white">User Name</div>
    <p class="text-slate-500 dark:text-slate-400">You have a new message!</p>
  </div>
</div>
為什麼這更有效率?
  • 停止在命名上浪費時間:不用再想 card-inner-wrapper-v2 這種無意義的名字。
  • CSS 停止增長:因為所有樣式都是複用既有的 utility,即使新增 100 個頁面,CSS bundle 大小也幾乎保持不變。
  • 修改更有自信:在 HTML 上改動樣式,絕對不會影響到其他標籤,徹底解決「改 A 壞 B」的副作用。

初次使用時可能會覺得 HTML 變醜了,但這其實是「所見即所得」的優點。一旦習慣,你會發現這比在 HTML 與 CSS 檔案間來回切換要快得多。

JIT (Just-In-Time) 引擎——無限靈活的關鍵

Tailwind CSS v3 起預設使用 JIT 編譯引擎。舊版 Tailwind 需要預先產生數萬個 class(即使你沒用到),這導致開發時 CSS 檔案異常巨大。JIT 則完全相反:

<!-- 使用任意值語法 -->
<div class="w-[32.5rem] h-[calc(100vh-80px)] bg-[#123456] opacity-[.08]">
  JIT 會即時生成對應的樣式規則
</div>

強大的變體系統(Variant Stack)

Tailwind 透過「前綴」來優雅地處理狀態。你可以將多個前綴疊加,輕鬆實作複雜的互動邏輯與深色模式:

互動狀態(Interactive States)

支援 hover:focus:active:visited: 等。例如:hover:scale-105 active:bg-blue-700

響應式斷點(Responsive Breakpoints)

基於行動優先原則。例如:w-full md:w-1/2 lg:w-1/3

深色模式(Dark Mode)

使用 dark: 前綴。例如:bg-white dark:bg-black text-slate-900 dark:text-slate-100

父元素/同級狀態(Group & Peer)

當父元素被 hover 時改變子元素樣式(group-hover:),或根據同級 input 勾選狀態改變標籤樣式(peer-checked:)。

<!-- 複合變體範例 -->
<button class="dark:md:hover:bg-fuchsia-600 ...">
  這代表:在深色模式下、且是桌面版寬度時、被 hover 的背景色
</button>

響應式設計策略

Tailwind 採用「行動優先(Mobile-First)」策略。這意味著:

預設斷點如下(皆可自訂):

sm: 640px | md: 768px | lg: 1024px | xl: 1280px | 2xl: 1536px
<!-- 手機 1 欄,平板 2 欄,桌面 3 欄 -->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
  ...
</div>

約束型設計系統(Constraint-based Design)

Tailwind 不只是工具,它是一套**經過校準的設計規範**。它限制你不能隨意設定 margin: 13pxcolor: #1a2b3c,而是引導你從一套美觀且一致的 Token 中做選擇:

為什麼約束很重要? 隨意的數值會讓介面看起來「業餘」。Tailwind 的約束確保即使是開發者,也能做出符合專業視覺標準的介面。