Design

CSS Variables 與 Design Tokens 實戰

2026 年 5 月 5 日約 8 分鐘閱讀作者:Hao0321 Studio

本站的視覺一致性 — 從首頁到部落格到資源頁 — 完全靠一套約 30 個 CSS variables 撐起來。沒有 Sass、沒有 Tailwind、沒有 design system 套件。這篇拆解這套 token 系統的設計邏輯。

什麼是 design tokens

Design tokens 是「視覺決定的最小單位」 — 一個顏色、一個陰影、一個圓角值。每個 token 有名字(如 --accent-blue),其他 CSS 都引用名字而不是直接寫值。

好處:改一個 token,全站視覺一致變動。

本站的 token 樹

:root {
  /* 1. 顏色 — 中性 */
  --bg: #F4F4F7;
  --bg-soft: #FBFBFD;
  --surface: #FFFFFF;
  --text: #0F0F1E;
  --text-2: #4A4A5E;
  --text-3:#6B6B80;
  --border: rgba(15,15,30,0.06);

  /* 2. 顏色 — accent */
  --accent-blue: #4A7BF5;
  --accent-violet: #8E7CF0;
  --grad-accent: linear-gradient(135deg, #4A7BF5, #8E7CF0);

  /* 3. 圓角 */
  --radius-sm: 12px;
  --radius-md: 20px;
  --radius-lg: 28px;
  --radius-pill: 9999px;

  /* 4. 陰影 */
  --shadow-sm: 0 1px 2px rgba(15,15,30,0.03), 0 4px 12px rgba(15,15,30,0.04);
  --shadow-md: 0 4px 12px rgba(15,15,30,0.05), 0 12px 32px rgba(15,15,30,0.06);

  /* 5. 字型 */
  --font-sans: 'Plus Jakarta Sans', 'Noto Sans TC', sans-serif;
  --font-mono: 'JetBrains Mono', monospace;

  /* 6. 動畫 */
  --ease: cubic-bezier(0.22, 1, 0.36, 1);
}

命名邏輯

命名規則例子
用途優先(不是顏色名)--text--dark-blue
數字後綴表階層--text-2 是次強調,--text-3 更弱
類別前綴--shadow-sm, --shadow-md 配對好搜尋
避免機器命名--blue-500 雖然有規律但無語意

為什麼三層文字色

本站用 --text(標題)、--text-2(內文)、--text-3(meta、breadcrumb)。三層的層次感讓畫面有節奏:

用 rgba() 而不是 hex

邊框與陰影刻意用 rgba(15,15,30,0.06) 這種 alpha < 1 的色值。原因:

不用 Tailwind 的理由

Tailwind 在大型團隊很好。但對個人專案:

跟設計師的協作

如果有設計師在 Figma 用同一套 token 系統,前後端一致性大增。Figma 的 Variables 功能跟 CSS variables 概念對應:

FigmaCSS
color/text/primary--text
color/accent/blue--accent-blue
radius/medium--radius-md

暗黑模式的 token 切換

本站目前是 light only,但可以擴充:

:root { --bg: #F4F4F7; --text: #0F0F1E; }
[data-theme="dark"] { --bg: #0A0A14; --text: #E8E8F0; }

所有用 var(--bg) 的地方自動切換。1 個 attribute 切換整站。

結語

CSS variables 是被低估的瀏覽器原生工具。30 個 token 配上一些命名紀律,足以撐起一個有個性的工作室網站。重點不是工具多進階,是 token 系統的克制與一致

本站完整 CSS 約 200 行,token 區塊只佔 30 行,但這 30 行決定了整站的視覺感。