Design System 分層架構:Style × Color × Industry 的組合爆炸

🌏 Read this article in English


9 個 Preset 的疲勞戰

PM 把 Figma 檔丟給你。

「這個要快。」

打開一看。brand-system-v9-final-final-2.fig

9 個 Preset。Finance, Healthcare, E-commerce…

每個都長得差不多。

但這次客戶要的是「金融業的嚴肅」加上「科技業的輕快」。

沒有這個選項。

要麼改 Finance 範本(影響所有其他銀行客戶)。 要麼手動複製一份,改名為 Finance-Tech-Style,然後逐個元件調整顏色。

手動複製。

然後在另一個案子裡,客戶要「醫療業的大字體」,但用「電商的高對比色」。

又是手動複製。

翻了一下時間紀錄(這是團隊內部的估算,不是公開研究數據)。

過去半年,光是客製化 Preset 就吃掉 40 小時——複製檔案、改 token、QA 對齊,大概各佔三分之一。

40 小時。

換來 3 個 Figma 檔,差別只在 Primary Color。

這很正常。

可優化的地方是:

我們一直在用「加法」解決「乘法型成本」的挑戰。


扁平 Preset 的邊界

大多數 Design System 的起步,都是扁平的。

Preset 1: Finance Preset 2: Healthcare … Preset N: Startup

每個 Preset 都是一個封閉的盒子。

盒子裡混了:

  • 視覺風格(Typography, Spacing, Border Radius)
  • 品牌色彩(Primary, Secondary, Semantic)
  • 產業模式(Hero 區塊類型、術語、合規需求)

這很正常。

當你的客戶只有 5 個,且需求不重疊時,這是最快的方式。

但隨著客戶超過 10 個,且需求開始交叉,扁平 Preset 的可預測性會下降

組合爆炸。

Definition:這裡說的「Preset artifact」指一個完整的 Figma 檔(或一份綁定的 token 套組),包含風格、色彩、產業模式三件事綁在一起。

如果你有 6 種視覺風格,10 種產業模式。 扁平架構下,你需要 6 × 10 = 60 個 Preset artifact。

如果再加 10 種品牌色? 60 × 10 = 600 個 Preset artifact。

600 個 Figma 檔案。

維護成本是天文數字。

而且,這還只是「理論值」。

實際情況更糟:

因為顏色和風格是綁定的,你無法單獨替換。

你想把「醫療業的區塊」套上「科技業的配色」?

不行。因為「醫療業 Preset」裡的區塊已經寫死了顏色變數。

你必須手動解耦。

手動。

Key Insight:扁平架構的維護成本是 Style × Color × Industry(乘法)。當任一維度增加,工作量都是按倍數放大,不是按加法。

這就是為什麼 Design System 越做越大,卻越來越難用。


分層:Style × Color × Industry

先拆骨架。

Layer 1: Style (骨架)

Junior 第一次聽到分層,通常會問:「Style 不就是長相嗎?」

不是。Style 是骨架,不是長相。

骨架不含色彩。

它定義:

  • Typography(字體、字重、行高)
  • Spacing(間距比例、留白策略)
  • Border Radius(0px 銳利 vs 24px 圓潤)
  • Shadows(無 / 輕 / 重)
  • Motion(無動畫 / 微妙 / 活潑)

範例:

  • Minimal:Inter, 無邊框, 無陰影, 大留白
  • Bold:Roboto Slab, 粗字重, 銳利邊框, 強陰影
  • Playful:Nunito, 大圓角, 輕微彈性動畫

Style 不是長相,是比例與節奏。

它只負責「形狀」和「節奏」,不負責填色。

Layer 2: Color Scheme (皮膚)

Color 是皮膚。

PM 常問:「客戶有自己的品牌色怎麼辦?」

直接餵進去就好,不用重做骨架。

它定義:

  • Primary / Secondary / Accent
  • Semantic(Success / Warning / Error)
  • Neutrals(Background / Text / Border)

這裡的關鍵是:

Color 可以預設,也可以生成。

如果客戶有品牌指南,輸入 HEX 值,生成初版色盤。 需要再驗證 WCAG 對比、深淺色模式與 semantic 狀態。 如果沒有,從 Style 預設的 10 種基礎色盤中挑選。

Color 不影響結構。它只影響「填色」。

Figma Variables 負責儲存與套用 token,色盤生成與 WCAG 驗證需由 plugin、腳本或 theme builder 完成。

Layer 3: Industry Patterns (血肉)

Industry 是血肉。

Industry 不是視覺風格,是內容怎麼排列。

它定義:

  • 區塊類型(Hero, Features, Pricing, Testimonials)
  • 術語/用語(金融用「申購」、醫療用「掛號」)
  • UX 慣例(金融常見數據表、醫療常用大字體)
  • 可能需要檢查的合規面向(例如 HIPAA, PCI-DSS——實際適用取決於業務範圍與地域)

Industry 不決定長相。

它決定「內容如何排列」和「如何表達」。


組合爆炸:從 600 個檔案到 28 個模組

現在,我們把三層分開。

層級 變化選項 數量
Style 6 種 (Minimal, Bold, Playful, Corporate, Tech, Elegant) 6
Color 10 種基礎色盤 + ∞ 自訂色 10+
Industry 12 種模式 (Finance, Healthcare, E-commerce, SaaS, Education, Media, Non-profit, Government, Startup, Fintech, Edtech, Healthtech) 12

理論組合,6 種風格 × 10 種色盤 × 12 種產業,大約 720 種。

聽起來比 600 多?

是的。但比較口徑不一樣。

扁平的 600 是 600 個要人維護的 artifact。 分層的 720 是 720 個可以即時組裝的結果——背後只有 6 + 10 + 12 = 28 個模組。

關鍵不在組合數量,而在維護成本的計算公式:

  • 扁平架構:成本 = S × C × I(乘法,任一維度 +1 都按倍數爆)
  • 分層架構:成本 = S + C + I(加法,任一維度 +1 都只多一個檔案)

扁平架構下,新增一個產業模式,你要複製 6 個 Style,每個 Style 再複製 10 種 Color。 6 × 10 = 60 個檔案。

分層架構下,再加第 11 種產業?Style 和 Color 完全不用動。新增一個 JSON 就好。

因為它們是獨立的。


具體映射:Industry 到底影響什麼?

很多團隊會混淆「Industry」和「Style」。

他們以為「醫療業」就是「用綠色、大字體、圓角」。

這是常見的混淆。

Industry 影響的是內容與 UX 模式,不是視覺骨架。

下面三組是常見的預設組合(不是規定)——Industry 本身只負責中間那塊「Patterns」,Style 和 Color 是另外搭配上去的:

Finance(金融)— 常見組合

  • 常搭 Style:Corporate(嚴謹、對齊、無動畫)
  • 常搭 Color:Deep Blue(信任、重穩)
  • Industry Patterns(Industry 真正定義的部分):
    • Hero 區塊:強調「資產規模」與「合規牌照」
    • Features:數據表格、利率計算機
    • 術語:「申購」、「贖回」、「年化報酬率」
    • 合規面向:可能需要檢查 PCI-DSS 標章、隱私政策連結(視業務範圍)

Healthcare(醫療)— 常見組合

  • 常搭 Style:Minimal(清晰、無幹擾、大字體)
  • 常搭 Color:Teal/Green(健康、平靜)
  • Industry Patterns:
    • Hero 區塊:強調「預約按鈕」與「醫師介紹」
    • Features:症狀查詢、科室分類
    • 術語:「掛號」、「就診」、「病歷」
    • 合規面向:可能需要 HIPAA 聲明、醫療器材認證標章(視地域與業務範圍)

E-commerce(電商)— 常見組合

  • 常搭 Style:Playful(高對比、強陰影、微動畫)
  • 常搭 Color:Orange/Red(急迫感、行動呼叫)
  • Industry Patterns:
    • Hero 區塊:強調「限時優惠」與「購物車」
    • Features:商品推薦、評價星星
    • 術語:「加入購物車」、「結帳」、「折扣碼」
    • 合規面向:Cookie 同意、退貨政策(視地域)

注意:

「常見組合」不是「綁死」。客戶完全可以拿 Healthcare 的 Patterns 套上 Tech 的 Style 和品牌色。

如果你把「醫療業的大字體」寫死在 Style 層,你就失去了彈性。

因為「科技業」也可能需要大字體(例如:針對年長用戶的 App)。

Industry 應該只定義「內容結構」與「UX 慣例」。

Style 定義「比例」。

Color 定義「品牌」。


取捨:什麼情況下不適合分層?

先說清楚,扁平 Preset 在初期是對的。

它有明確的適用邊界。

分層架構不是每個工作流都需要。

如果你的團隊只有兩個人,或許先保留扁平架構。

分層的複雜度,可能高於它帶來的收益。

適合分層的情況

  • 客戶多且需求交叉:例如,你有 20 個客戶,每個都要不同的品牌色,但共用相同的產業模式。
  • 團隊規模大:設計師、前端、PM 需要獨立工作。分層讓每個人只關注自己的層級。
  • 長期維護:Design System 預計使用超過 2 年。分層讓更新成本可控。

不適合分層的情況

  • 單一專案:如果你只服務一個客戶,且需求明確,扁平 Preset 更快。
  • 需求高度客製化:如果每個專案都需要 80% 的客製化,分層架構的「標準化」優勢就消失了。
  • 團隊規模小:如果只有 1-2 個設計師,分層架構的「解耦成本」可能高於「維護成本」。

判斷準則:

如果你的團隊花在「複製 Preset」和「手動調整顏色」的時間,超過「設計新區塊」的時間,分層會是一個值得考慮的方向。


如何開始:三步驟落地

不需要重寫整個 Design System。

從最小可行單位開始。

Step 1: 解耦 Style 與 Color

找出現有 Preset 中,哪些是「骨架」,哪些是「顏色」。

例如,Finance-Preset 中的 TypographySpacing 是骨架。 Primary-Color 是顏色。

將骨架提取為 Style-Corporate.json。 將顏色提取為 Color-DeepBlue.json

最小 token schema 範例:

// Style-Corporate.json (骨架,無色彩)
{
  "typography": { "fontFamily": "Inter", "scale": [12,14,16,20,24,32] },
  "spacing":    { "base": 4, "scale": [0,4,8,16,24,32,48] },
  "radius":     { "sm": 2, "md": 4, "lg": 8 }
}

// Color-DeepBlue.json (皮膚,只有顏色)
{
  "palette":  { "primary": "#0B3D91", "secondary": "#5A8DEE" },
  "semantic": { "success": "{palette.green.500}", "error": "{palette.red.500}" }
}

// Industry-Finance.json (血肉,只有內容/結構)
{
  "blocks":   ["hero.assets","features.dataTable","compliance.badges"],
  "glossary": { "subscribe": "申購", "redeem": "贖回" }
}

合併 precedence(後者覆蓋前者):

Style → Color(palette)→ 客戶 brand color → Semantic alias

也就是說:客戶輸入的 brand HEX 會覆蓋預設 palette,但 semantic token(successerror)維持別名引用——不要直接被 brand color 覆蓋,否則紅綠燈會錯亂。

Step 2: 定義 Industry Patterns

列出每個產業的「內容區塊」與「術語」。

例如,Industry-Finance.json 定義:

  • Hero 區塊結構
  • 數據表格區塊結構、欄位語意、資料呈現需求
  • 術語庫

不要在 Industry Pattern 中定義顏色。

Step 3: 建立組合器

寫一個簡單的腳本(或 Figma Plugin),將三層組合起來。

輸入:

  • Style: Minimal
  • Color: Brand-HEX-#123456
  • Industry: Healthcare

輸出:

  • 完整的 Design Token JSON
  • Figma 組件連結
  • CSS Variables(注意:Figma 本身不會直接吐 CSS Variables——需要透過 Figma plugin、Variables REST API 或 build script(如 Style Dictionary)轉換匯出)

第一版不要寫太完美。但已經夠用了。


賣 Preset 還是賣 Platform

Design System 的終極目標,不是「提供更多 Preset」。

而是「讓客戶自己組合」。

這裡的 Platform 不是行銷詞。具體指三件事:

  1. 可組合:Style / Color / Industry 三層獨立,客戶能任意挑選與替換
  2. 可驗證:輸入 brand color 後,系統自動跑 WCAG 對比、semantic token 一致性
  3. 可重生:同一份組合輸入,任何時候都能重新生成 Figma 檔與 CSS Variables——不是手動複製出來的快照

當這三件事到位後,你不再是「賣 Preset」。

你是在「賣 Platform」。

客戶可以輸入自己的品牌色。 選擇自己的產業模式。 挑選自己的視覺風格。

然後,自動生成完整的 Design System。

這才是 Design 系統的規模化。

分層不是把系統切碎,是把選擇權還回去。

你的 Design System,現在是在賣 Preset,還是賣 Platform?


Sources

Leave a Comment