<center><img src="https://blog.nashtechglobal.com/wp-content/uploads/2025/08/O-que-e-Tailwind-CSS-e-por-que-ele-virou-tendencia-no-front-end_-Programadores-Depre-Programacao-e-Tecnologia.jpeg" /></center>
前言
---
我們在寫網頁切版的時候,最常接觸到的就是 CSS。 一般來講,我們可能會這樣寫:
* 先在 HTML 中寫一個結構:
```html=
<div class="user-profile-card">
<img src="..." alt="..." class="profile-avatar">
<h3 class="user-name">Gemini</h3>
<p class="user-bio">一個由 Google 打造的 AI 助手...</p>
<button class="follow-button">Follow</button>
</div>
```
* 跳到 <code>.css</code> 檔案,開始定義每個 class:
```CSS
.user-profile-card {
background-color: white;
border-radius: 8px;
padding: 16px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.profile-avatar {
width: 50px;
height: 50px;
border-radius: 9999px; /* 圓形 */
}
.user-name {
font-size: 1.25rem;
font-weight: 600; /* 粗體 */
}
.follow-button {
background-color: #3b82f6; /* 藍色 */
color: white;
padding: 8px 16px;
}
.follow-button:hover {
background-color: #2563eb; /* 深一點的藍色 */
}
```
**這樣子寫的話會遇到幾個 「痛點」:**
* **命名地獄:** 你要花很多時間去想 class 名字 (`.user-profile-card`, `.follow-button-primary`...)。當專案變大,命名衝突和管理就變成一場惡夢。
* **檔案切換:** 你必須不斷在 HTML 和 CSS 兩個檔案之間來回切換,打斷心流。
* **CSS 檔案膨脹:** 你寫了很多 CSS,但時間一久,你根本不敢刪掉舊的 class,因為你不確定刪掉它會不會弄壞網站的其他地方。
* **一致性問題:** A 頁面的按鈕 `padding` 是 `8px`,B 頁面可能是 `10px`。A 頁面的卡片陰影是 `0.1`,B 頁面是 `0.15`。設計風格很難統一。
**Tailwind CSS 就是為了解決這些問題而生的。**
它不是要你 _取代_ CSS,而是提供一種 _不同_ 的方式來 _使用_ CSS。
它提供給你一大堆「**工具**」,讓你直接在 HTML 裡「**組合**」出你想要的樣子。
核心概念 (一) - Utility-First (工具優先)
---
* 這是 Tailwind 最核心的概念。它不提供像是 BootStrap(UI 庫) 預先做好的元件(像 `Card` 或 `Button`)。
* 相反地,它提供的是「**單一用途的工具 class**」。
* 例如:
* `p-4` 代表 `padding: 16px;` (1rem)
* `bg-white` 代表 `background-color: white;`
* `rounded-lg` 代表 `border-radius: 8px;`
* `shadow-md` 代表 `box-shadow: (某個中等陰影值);`
* `text-xl` 代表 `font-size: 1.25rem;`
* `font-bold` 代表 `font-weight: 700;`
* 所以,前面那個卡片用 Tailwind 寫,會變成這樣:
```html=
<div class="bg-white rounded-lg p-4 shadow-md">
<img src="..." alt="..." class="w-12 h-12 rounded-full">
<h3 class="text-xl font-bold">Gemini</h3>
<p class="text-gray-600">一個由 Google 打造的 AI 助手...</p>
<button class="bg-blue-500 text-white py-2 px-4 rounded">Follow</button>
</div>
```
* **優點:** 你不用再想 class 名字,也不用切換檔案。所有的樣式都在 HTML 裡,一目了然。
核心概念 (二) - Mobile-First (行動優先的響應式設計)
---
我們會去用不同的裝置去瀏覽網頁,常見的像是用手機、平板與電腦。而因為這三種裝置的螢幕大小不同,我們需要網頁有 **RWD (響應式設計的功能)**,而實現這個功能,如果使用傳統的 CSS 去實現的話,會使檔案變得非常巨大。
* Tailwind 預設的樣式是給手機看的。如果你想在「平板」或「電腦」上改變樣式,你只要加上「前綴」 (Prefix)。
* 例如:`sm:` (小螢幕), `md:` (中螢幕), `lg:` (大螢幕), `xl:` (超大螢幕)。
* **範例:** 一個區塊,在手機上是「寬度 100%」,但在中等螢幕(md)以上,變成「寬度 50%」。
```html=
<!-- 在手機上是寬度 100%,螢幕尺寸超過 md (中等螢幕) 以上,變成寬度 50% -->
<div class="w-full md:w-1/2">
...
</div>
```
**範例:** 手機上文字置中,電腦上文字靠左。
```html=
<div class="text-center lg:text-left">
...
</div>
```
核心概念 (三) - State Variants (狀態變化)
---
* 像是 `hover` (滑鼠懸停)、`focus` (選取)、`disabled` (禁用) 等狀態,也可以用「前綴」輕易做到。
* **範例:** 一個按鈕,平常是藍色,滑鼠移上去 (hover) 變成深藍色。
```html=
<button class="bg-blue-500 hover:bg-blue-700 text-white ...">
Click me
</button>
```
核心概念 (四) - JIT (Just-In-Time) Engine
---
看到這邊有人可能會問:「哇,那這樣 Tailwind CSS 提供幾千個 class,我的 CSS 檔案會不會大到爆啊?」
其實並不會。
JIT 引擎會去掃描我們所有的 HTML 與 JS 檔案,然後找出我們「真正有用到」的 class。
像是我如果只用到 <code>p-4</code>,那它就只會把這個 class 生成到最終的 CSS 檔案中,所以其實最後的 CSS 檔案通常都蠻小的。
核心概念 (五) - Design System (可客製化的設計系統)
---
* Tailwind 已經幫你定義好一套「設計系統」。
* 例如 `p-1` (4px), `p-2` (8px), `p-3` (12px), `p-4` (16px)... 它的間距是有規律的。
* 它的顏色 `blue-100` (最淺), `blue-500` (中等), `blue-900` (最深) 也是配好的。
* 這強迫團隊在開發時使用「**一致**」的間距和顏色,讓網站風格更統一。
* (進階) 如果你需要客製化(例如公司的主色是 `#FF6600`),你都可以在 `tailwind.config.js` 檔案中輕鬆設定。
---
參考文件:https://tailwindcss.com/docs/installation/using-vite