使用 shadcn/ui 前該補的 TailwindCSS 基礎知識(三) - TailwindCSS v4 基礎語法速查
· 閱讀時間約 16 分鐘

本文是「使用 shadcn/ui 前該補的 TailwindCSS 基礎知識」系列文章的第三篇
系列文章:
- 從 MUI 到 TailwindCSS 設計哲學的轉變
- 理解 TailwindCSS 的運作原理
- TailwindCSS v4 基礎語法速查(本篇)
- 深入 TailwindCSS v4 的進階配置
- shadcn/ui 生態系工具鏈
顏色系統
TailwindCSS 的顏色系統非常直覺,格式為:{屬性}-{顏色}-{深淺度}
基礎顏色語法
語法規則說明:
- 屬性: 要套用顏色的 CSS 屬性,例如:
bg-= background-color (背景色)text-= color (文字顏色)border-= border-color (邊框顏色)
- 顏色: TailwindCSS 預設提供的顏色名稱,包含:
- 灰階:
slate,gray,zinc,neutral,stone - 色彩:
red,orange,amber,yellow, ...
- 灰階:
- 深淺度: 從
50(最淺) 到950(最深),詳見下方說明
完整屬性、顏色參考: TailwindCSS Colors 官方文件
// 背景色
<div className="bg-blue-500">藍色背景</div>
<div className="bg-red-600">紅色背景(較深)</div>
<div className="bg-green-400">綠色背景(較淺)</div>
// 文字顏色
<p className="text-gray-700">深灰色文字</p>
<p className="text-blue-500">藍色文字</p>
// 邊框顏色
<div className="border border-red-500">紅色邊框</div>
顏色深淺度規則:
50 - 最淺(幾乎是白色)
100 - 很淺
200 - 淺
300 - 稍淺
400 - 中淺
500 - 標準(預設)
600 - 中深
700 - 深
800 - 很深
900 - 最深(幾乎是黑色)
950 - 極深(v3.2+ 新增)
語意化顏色(Shadcn/ui 使用的方式)
在 shadcn/ui 官方範例專案的 index.css 或 globals.css 中,你會看到像這樣的定義:
@theme inline {
--color-primary: var(--primary);
--color-primary-foreground: var(--primary-foreground);
--color-secondary: var(--secondary);
--color-secondary-foreground: var(--secondary-foreground);
--color-destructive: var(--destructive);
--color-destructive-foreground: var(--destructive-foreground);
--color-muted: var(--muted);
--color-muted-foreground: var(--muted-foreground);
}
:root {
--primary: oklch(0.6171 0.1375 39.0427);
--primary-foreground: oklch(1 0 0);
--secondary: oklch(0.9245 0.0138 92.9892);
--secondary-foreground: oklch(0.2 0 0);
/* ... */
}
CSS 變數如何變成 utility classes?
TailwindCSS v4 的 @theme inline 會自動將 CSS 變數轉換為 utility classes,規則如下:
- CSS 變數格式:
--color-{顏色名稱} - 生成的 utility:
{屬性}-{顏色名稱}
範例對應:
--color-primary→bg-primary,text-primary,border-primary--color-primary-foreground→bg-primary-foreground,text-primary-foreground--color-destructive→bg-destructive,text-destructive
然後在元件中使用:
// primary 是藍色背景,primary-foreground 是白色文字
<button className="bg-primary text-primary-foreground">
主要按鈕
</button>
// destructive 是紅色背景,destructive-foreground 是白色文字
<button className="bg-destructive text-destructive-foreground">
刪除按鈕
</button>
補充:什麼是 foreground?
foreground 是「前景色」,通常指該背景色上的文字顏色。shadcn/ui 會為每個語意化顏色提供一對顏色:主色(如 primary)作為背景色,前景色(如 primary-foreground)作為該背景上的文字顏色,確保有足夠的對比度。
為什麼要用語意化顏色?
// ❌ 使用固定顏色:如果要改主題色,要改很多地方
<button className="bg-blue-500 text-white">按鈕</button>
<div className="border-blue-500">邊框</div>
<p className="text-blue-600">文字</p>
// ✅ 使用語意化顏色:只需要改 CSS 變數,所有地方自動更新
<button className="bg-primary text-primary-foreground">按鈕</button>
<div className="border-primary">邊框</div>
<p className="text-primary">文字</p>
透明度控制
TailwindCSS 支援兩種透明度語法:
// 方法 1:使用 / 語法(推薦)
<div className="bg-blue-500/50">50% 透明度的藍色</div>
<div className="bg-red-500/75">75% 透明度的紅色</div>
<div className="text-gray-900/80">80% 透明度的文字</div>
// 方法 2:使用 opacity 屬性(影響整個元素)
<div className="bg-blue-500 opacity-50">整個元素 50% 透明</div>