設計系統(Design System)核心架構與實作方法報告
摘要
本報告探討設計系統的核心架構與實作方法,涵蓋設計令牌(Design Tokens)、元件庫(Component Library)、以及文件撰寫(Documentation)三大面向。
一、設計系統概述
什麼是設計系統?
設計系統是一套共享的語言、原則和工具,用於指導產品設計與開發。它包含:
- 設計令牌:定義視覺樣式的基礎變數
- 元件庫:可重複使用的 UI 組件
- 指南與文件:說明如何使用這些元素的規範
核心價值
- 一致性:確保產品在不同平台和團隊間保持統一
- 效率:減少重複設計與開發工作
- 可擴展性:支援大規模產品的持續迭代
- 協作:促進設計師與開發者的溝通
二、設計令牌(Design Tokens)
定義
設計令牌是視覺設計屬性的命名儲存,例如顏色、排版、間距、陰影等。它們是設計系統的「原子」。
核心類型
| 類型 | 說明 | 範例 |
|---|---|---|
| 基礎令牌 | 原始值,不依賴其他令牌 | #FF0000 |
| 語意令牌 | 基於基礎令牌,具有業務含義 | color-error |
| 實例令牌 | 特定情境下的令牌 | button-primary-bg |
常見類別
-
顏色(Colors)
- 主色、輔助色、狀態色(成功、警告、錯誤)
- 明度等級(light/dark mode)
-
排版(Typography)
- 字體族(font-family)
- 字級(font-size)
- 行高(line-height)
- 字重(font-weight)
-
間距(Spacing)
- 使用統一的間距比例(如 4px 或 8px 基準)
-
圓角(Border Radius)
- 小、中、大、全圓角
-
陰影(Shadows)
- 不同層級的陰影效果
-
斷點(Breakpoints)
- 響應式設計的螢幕寬度閾值
實作方法
1. 令牌格式
- JSON:最常見的序列化格式
- CSS Custom Properties:直接在 CSS 中使用
- Tokens Studio / Style Dictionary:專業工具
2. 工具推薦
- Style Dictionary(AWS):將令牌轉換為多平台格式
- Tokens Studio:Figma 插件,支援令牌同步
- Theming Engine:React/Vue 的樣式管理庫
3. 範例(JSON)
{
"color": {
"primary": {
"base": { "value": "#1A73E8" },
"light": { "value": "#E8F0FE" },
"dark": { "value": "#0D47A1" }
},
"text": {
"primary": { "value": "#202124" },
"secondary": { "value": "#5F6368" }
}
},
"spacing": {
"xs": { "value": "4px" },
"sm": { "value": "8px" },
"md": { "value": "16px" },
"lg": { "value": "24px" },
"xl": { "value": "32px" }
}
}
4. 最佳實踐
- 使用語意名稱而非描述性名稱(用 color-text-primary 而非 color-blue-500)
- 建立令牌階層:基礎 -> 語意 -> 實例
- 支援主題切換(明/暗模式)
- 自動化令牌從設計工具到程式碼的轉換
三、元件庫(Component Library)
定義
元件庫是可重複使用的 UI 組件集合,每個元件封裝了結構、樣式和行為。
核心原則
- 單一職責:每個元件專注於一個功能
- 組合性:元件可以嵌套和組合
- 可自訂:提供 props/config 來調整外觀與行為
- 無障礙:符合 WCAG 標準
- 響應式:適應不同螢幕尺寸
元件分類
1. 基礎元件(Atoms)
- Button(按鈕)
- Input(輸入框)
- Icon(圖示)
- Badge(標籤)
- Avatar(頭像)
2. 組合元件(Molecules)
- Search Bar(搜尋列 = Input + Icon + Button)
- Form Field(表單欄位 = Label + Input + Error Message)
- Card Header(卡片標頭 = Title + Actions)
3. 複雜元件(Organisms)
- Navigation Bar(導航列)
- Data Table(資料表格)
- Modal(對話框)
- Sidebar(側邊欄)
4. 頁面模板(Templates)
- Dashboard Layout
- Form Page
- List Page
實作方法
1. 技術選型
- React:Storybook + styled-components / Tailwind CSS
- Vue:Storybook + VueUse / UnoCSS
- Angular:Angular CDK + NgRx
- 跨框架:Lit Web Components
2. 元件結構範例(React)
// Button.jsx
import React from 'react';
import { token } from '@design-system/tokens';
const Button = ({
variant = 'primary',
size = 'medium',
disabled = false,
children,
onClick
}) => {
const styles = {
primary: { backgroundColor: token.color.primary.base },
secondary: { backgroundColor: token.color.secondary.base },
outline: { border: `1px solid ${token.color.primary.base}` }
};
return (
<button
className={`btn btn--${variant} btn--${size}`}
style={{ ...styles[variant] }}
disabled={disabled}
onClick={onClick}
>
{children}
</button>
);
};
export default Button;
3. 測試策略
- 單元測試:測試元件邏輯與 props
- 視覺測試:使用 Chromatic / BackstopJS 檢測視覺回歸
- 無障礙測試:使用 axe-core 檢查無障礙合規性
- 互動測試:使用 Cypress / Playwright 測試使用者流程
4. 文件化(Storybook)
// Button.stories.jsx
import Button from './Button';
export default {
title: 'Components/Button',
component: Button,
argTypes: {
variant: { control: 'select', options: ['primary', 'secondary', 'outline'] },
size: { control: 'select', options: ['small', 'medium', 'large'] },
disabled: { control: 'boolean' }
}
};
const Template = (args) => <Button {...args} />;
export const Primary = Template.bind({});
Primary.args = { variant: 'primary', children: 'Primary Button' };
最佳實踐
- 使用 Atomic Design 方法論組織元件
- 元件應與框架解耦(考慮 Web Components)
- 提供 API 參考文件(props、events、slots)
- 維護 變更日誌(Changelog)
- 定期進行 元件審視,移除過時的元件
四、文件撰寫(Documentation)
重要性
好的文件是使用設計系統的關鍵。它確保團隊正確、一致地使用元件。
文件內容
1. 設計原則
- 設計哲學與目標
- 視覺風格指南
- 品牌調性說明
2. 使用指南
- 何時使用:元件的適用場景
- 何時不使用:避免濫用的情況
- 最佳實踐:常見的使用模式
- 反模式:需要避免的做法
3. API 參考
- Props / Attributes 說明
- Events / Callbacks
- Slots / Content projection
- 預設值與必填項
4. 程式碼範例
- 基本用法
- 進階用法
- 常見場景的完整範例
5. 無障礙指南
- ARIA 屬性說明
- 鍵盤導航支援
- 螢幕閱讀器相容性
文件工具
| 工具 | 特點 |
|---|---|
| Storybook | 元件視覺化文件,互動式展示 |
| GitBook | 結構化文檔平台 |
| Docusaurus | React 驅動的文件網站 |
| Frontify | 品牌與設計指南平台 |
| Zeroheight | 專為設計系統打造的文檔工具 |
| Supernova | 設計到程式碼的轉換平台 |
文件最佳實踐
- 保持更新:每次元件變更都要同步更新文件
- 搜尋友好:確保文件易於搜尋與瀏覽
- 互動式範例:提供可編輯的程式碼範例
- 版本控制:記錄不同版本的 API 變更
- 多語言支援:服務國際團隊
- 貢獻指南:說明如何參與文件改進
五、整體架構
設計系統架構概覽:
層級由高到低:
[文件與指南層]
- 設計原則
- 使用指南
- API 參考
[元件庫層]
- 基礎元件 (Atoms)
- 組合元件 (Molecules)
- 複雜元件/模板 (Organisms/Templates)
[設計令牌層]
- 顏色
- 排版
- 間距
- 陰影
- 斷點
[工具與流程層]
- Figma -> Style Dictionary -> 程式碼生成
六、實作步驟建議
階段 1:基礎建設
- 定義設計令牌(顏色、排版、間距)
- 建立基礎元件(Button、Input、Icon)
- 搭建文件站(Storybook)
階段 2:擴展元件
- 開發組合元件(Form Field、Card)
- 開發複雜元件(Modal、DataTable)
- 補充使用指南與範例
階段 3:成熟與治理
- 建立貢獻指南
- 實施版本控制與變更日誌
- 定期元件審視與清理
- 收集使用者回饋並持續改進
七、知名設計系統案例
| 設計系統 | 公司 | 特點 |
|---|---|---|
| Material Design | 完整的設計語言與元件 | |
| Carbon | IBM | 開放源碼,多框架支援 |
| Fluent UI | Microsoft | 深度整合 Windows/macOS |
| Polaris | Shopify | 電商專屬設計系統 |
| Atlassian Design | Atlassian | 企業級 SaaS 設計系統 |
| Ant Design | 螞蟻集團 | 中文生態系最廣泛採用 |
八、結論
設計系統的成功取決於三個核心要素的平衡:
- 設計令牌提供一致的視覺基礎
- 元件庫提供可重複使用的實作
- 文件撰寫確保知識傳承與正確使用
實作時應遵循「由簡入繁」的原則,從基礎令牌和核心元件開始,逐步擴展。同時,建立明確的治理機制與貢獻流程,才能讓設計系統持續發揮價值。
報告日期:2026-06-24
Top comments (0)