<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