# DramaLing UI/UX 設計規範
## 設計理念
DramaLing詞彙學習系統採用**清新、直觀、專注學習**的設計理念,致力於創造無障礙且引人入勝的學習體驗。設計強調**簡潔性、一致性和互動性**,讓用戶能夠專注於學習內容本身。
---
## 1. 視覺設計系統
### 1.1 顏色系統
#### 主要顏色調色板
```css
/* 主色調 - 藍色系統 */
--primary-default: #3B82F6; /* 主要按鈕、鏈接 */
--primary-hover: #2563EB; /* 懸停狀態 */
--primary-light: #EFF6FF; /* 淺色背景 */
/* 語義顏色 */
--success: #10B981; /* 正確答案、成功狀態 */
--warning: #F59E0B; /* 警告、提示 */
--error: #EF4444; /* 錯誤、失敗狀態 */
--info: #8B5CF6; /* 資訊提示 */
/* 中性色系 */
--gray-50: #F9FAFB; /* 最淺背景 */
--gray-100: #F3F4F6; /* 卡片背景 */
--gray-200: #E5E7EB; /* 邊框、分隔線 */
--gray-300: #D1D5DB; /* 次要邊框 */
--gray-500: #6B7280; /* 次要文字 */
--gray-600: #4B5563; /* 主要文字 */
--gray-700: #374151; /* 標題文字 */
--gray-900: #111827; /* 強調文字 */
```
#### 顏色使用規範
- **主色調藍色**: 用於主要動作按鈕、導航高亮、進度指示
- **成功綠色**: 正確答案回饋、完成狀態、積極反饋
- **錯誤紅色**: 錯誤答案回饋、警告信息、負面反饋
- **警告黃色**: 提示信息、注意事項、中性反饋
- **中性灰色**: 文字內容、背景、邊框等
### 1.2 字體系統
#### 字體家族
```css
font-family: 'Inter', 'Noto Sans TC', 'system-ui', 'sans-serif';
```
#### 字體尺寸階層
```css
/* 標題層級 */
.text-3xl { font-size: 1.875rem; } /* 主頁面標題 */
.text-2xl { font-size: 1.5rem; } /* 區塊標題 */
.text-xl { font-size: 1.25rem; } /* 子標題 */
.text-lg { font-size: 1.125rem; } /* 大號正文 */
/* 正文層級 */
.text-base { font-size: 1rem; } /* 標準正文 */
.text-sm { font-size: 0.875rem; } /* 小號文字 */
.text-xs { font-size: 0.75rem; } /* 標籤、說明文字 */
```
#### 字重規範
```css
.font-bold { font-weight: 700; } /* 標題、重點強調 */
.font-semibold { font-weight: 600; } /* 副標題、按鈕文字 */
.font-medium { font-weight: 500; } /* 導航、標籤 */
.font-normal { font-weight: 400; } /* 正文內容 */
```
### 1.3 間距系統
#### 間距單位
```css
/* 基礎間距單位:4px */
.space-y-1 { margin: 4px 0; } /* 緊密間距 */
.space-y-2 { margin: 8px 0; } /* 小間距 */
.space-y-3 { margin: 12px 0; } /* 標準間距 */
.space-y-4 { margin: 16px 0; } /* 中等間距 */
.space-y-6 { margin: 24px 0; } /* 大間距 */
.space-y-8 { margin: 32px 0; } /* 區塊間距 */
/* 內邊距 */
.p-2 { padding: 8px; } /* 小內距 */
.p-3 { padding: 12px; } /* 標準內距 */
.p-4 { padding: 16px; } /* 中等內距 */
.p-6 { padding: 24px; } /* 大內距 */
.p-8 { padding: 32px; } /* 大型容器內距 */
```
### 1.4 圓角系統
```css
.rounded-md { border-radius: 6px; } /* 小元素:按鈕、輸入框 */
.rounded-lg { border-radius: 8px; } /* 標準元素:卡片、容器 */
.rounded-xl { border-radius: 12px; } /* 大元素:主要卡片 */
.rounded-full { border-radius: 50%; } /* 圓形:頭像、標籤 */
```
---
## 2. 組件設計規範
### 2.1 按鈕設計系統
#### 主要按鈕 (Primary Button)
```tsx
```
#### 次要按鈕 (Secondary Button)
```tsx
```
#### 危險按鈕 (Danger Button)
```tsx
```
#### 模式切換按鈕 (Mode Toggle)
```tsx
```
### 2.2 卡片設計系統
#### 主要內容卡片
```tsx
{/* 卡片內容 */}
```
#### 資訊展示卡片
```tsx
{/* 資訊內容 */}
```
#### 狀態回饋卡片
```tsx
{/* 成功狀態 */}
{/* 成功內容 */}
{/* 錯誤狀態 */}
{/* 錯誤內容 */}
{/* 警告狀態 */}
{/* 警告內容 */}
```
### 2.3 輸入組件設計
#### 文字輸入框
```tsx
```
#### 下拉選單
```tsx
```
#### 複選框/單選框
```tsx
```
### 2.4 標籤和徽章系統
#### 難度等級標籤
```tsx
{/* A1-A2 基礎等級 */}
CEFR A2
{/* B1-B2 中級等級 */}
CEFR B1
{/* C1-C2 高級等級 */}
CEFR C1
```
#### 詞性標籤
```tsx
noun
```
#### 同義詞標籤
```tsx
synonym
```
---
## 3. 交互設計模式
### 3.1 學習模式設計
#### 模式切換器設計原則
- **視覺清晰**: 當前選中模式使用主色調高亮
- **狀態一致**: 所有模式按鈕使用相同的設計語言
- **響應迅速**: 切換模式時即時更新UI狀態
- **分組合理**: 相關功能模式在視覺上聚集
```tsx
{/* 學習模式切換器 */}
{modes.map(mode => (
))}
```
### 3.2 進度指示設計
#### 學習進度條
```tsx
{/* 進度資訊 */}
進度
{currentIndex + 1} / {total}
{correct}
/
{total}
{total > 0 && (
({Math.round((correct / total) * 100)}%)
)}
{/* 進度條 */}
```
### 3.3 狀態回饋設計
#### 答案回饋模式
```tsx
{/* 正確回饋 */}
{/* 錯誤回饋 */}
```
#### 載入狀態設計
```tsx
{/* 按鈕載入狀態 */}
{/* 頁面載入狀態 */}
```
### 3.4 互動式元素設計
#### 點擊式詞彙分析
```tsx
{/* 高價值詞彙 - 綠色邊框 + 星星 */}
{word}
⭐
{/* 高價值片語 - 黃色邊框 + 星星 */}
{phrase}
⭐
{/* 普通詞彙 - 藍色邊框 */}
{word}
```
#### 詞彙詳情彈窗
```tsx
{/* 標題區 */}
{word}
{/* 高價值標記 */}
{isHighValue && (
)}
{/* 詞彙資訊 */}
{/* 詞性和發音 */}
{partOfSpeech}
{pronunciation}
{/* 翻譯 */}
{/* 定義 */}
{/* 保存按鈕 */}
```
### 2.2 學習卡片設計
#### 翻卡記憶卡片
```tsx
{/* 卡片容器 */}
{/* 正面 */}
{/* 標題區 */}
翻卡記憶
{difficulty}
{/* 單字展示 */}
{/* 背面 */}
{/* 定義區塊 */}
{/* 例句區塊 */}
例句
"{exampleTranslation}"
{/* 同義詞區塊 */}
同義詞
{synonyms.map((synonym, index) => (
{synonym}
))}
```
#### 3D翻卡動畫CSS
```css
.card-container {
perspective: 1000px;
transition: height 0.3s ease;
overflow: visible;
position: relative;
}
.card {
position: relative;
width: 100%;
height: 100%;
text-align: center;
transition: transform 0.6s ease;
transform-style: preserve-3d;
}
.card.flipped {
transform: rotateY(180deg);
}
.card-front, .card-back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
display: flex;
align-items: stretch;
justify-content: center;
top: 0;
left: 0;
}
.card-back {
transform: rotateY(180deg);
}
```
### 3.3 測驗模式設計
#### 選擇題設計
```tsx
{options.map((option, idx) => (
))}
```
#### 填空題設計
```tsx
{/* 句子中的填空輸入 */}
setAnswer(e.target.value)}
disabled={showResult}
className={`
inline-block px-2 py-1 text-center
bg-transparent focus:outline-none
disabled:bg-gray-100
${answer
? 'border-b-2 border-blue-500'
: 'border-b-2 border-dashed border-gray-400 focus:border-blue-400 focus:border-solid'
}
`}
style={{
width: `${Math.max(100, Math.max(targetWord.length * 12, answer.length * 12 + 20))}px`
}}
/>
```
### 3.4 例句重組設計
#### 重組區域設計
```tsx
{/* 答案區域 */}
{arrangedWords.length === 0 ? (
答案區
) : (
{arrangedWords.map((word, index) => (
removeWord(word)}
>
{word}
×
))}
)}
{/* 可用單字區域 */}
{shuffledWords.length === 0 ? (
所有單字都已使用
) : (
{shuffledWords.map((word, index) => (
))}
)}
```
---
## 4. 布局設計規範
### 4.1 頁面布局模式
#### 學習頁面布局
```tsx
{/* 導航欄 */}
{/* 主要內容區 */}
{/* 進度條 */}
{/* 模式切換器 */}
{/* 學習內容 */}
{/* 導航按鈕 */}
```
#### 內容頁面布局
```tsx
{/* 頁面標題 */}
頁面標題
{/* 內容區塊 */}
{/* 內容卡片 */}
```
### 4.2 響應式設計
#### 斷點系統
```css
/* 小屏幕 (手機) */
sm: '640px'
/* 中等屏幕 (平板) */
md: '768px'
/* 大屏幕 (桌面) */
lg: '1024px'
/* 超大屏幕 */
xl: '1280px'
```
#### 響應式組件範例
```tsx
{/* 網格布局響應式 */}
{/* 項目 */}
{/* 導航響應式 */}
{/* 桌面版導航 */}
{/* 手機版導航 */}
{/* 文字大小響應式 */}
標題
```
---
## 5. 互動設計原則
### 5.1 微互動設計
#### 懸停效果
```tsx
{/* 卡片懸停 */}
{/* 內容 */}
{/* 按鈕懸停 */}
{/* 詞彙懸停 */}
詞彙
```
#### 動畫效果
```tsx
{/* 載入動畫 */}
{/* 淡入動畫 */}
{/* 內容 */}
{/* 滑入動畫 */}
{/* 內容 */}
```
### 5.2 狀態管理原則
#### 視覺狀態指示
```tsx
{/* 禁用狀態 */}
{/* 選中狀態 */}
{/* 內容 */}
{/* 錯誤狀態 */}
{/* 錯誤內容 */}
```
### 5.3 回饋設計模式
#### 即時回饋
```tsx
{/* 成功提示 */}
✅ 操作成功
{/* 錯誤提示 */}
❌ 操作失敗
```
---
## 6. 特殊組件設計
### 6.1 模態對話框設計
#### 標準模態框
```tsx
{/* 遮罩層 */}
{/* 模態內容 */}
{/* 標題 */}
對話框標題
{/* 內容 */}
{/* 對話框內容 */}
{/* 按鈕區 */}
```
#### 圖片預覽模態框
```tsx
```
### 6.2 導航設計
#### 學習導航按鈕
```tsx
{/* 上一張按鈕 */}
{/* 下一張按鈕 */}
```
### 6.3 錯誤報告組件
```tsx
{/* 錯誤報告按鈕 */}
{/* 錯誤報告模態框 */}
回報錯誤
```
---
## 7. 設計令牌 (Design Tokens)
### 7.1 間距令牌
```css
/* 基礎間距單位:4px */
--spacing-1: 4px; /* gap-1, p-1, m-1 */
--spacing-2: 8px; /* gap-2, p-2, m-2 */
--spacing-3: 12px; /* gap-3, p-3, m-3 */
--spacing-4: 16px; /* gap-4, p-4, m-4 */
--spacing-6: 24px; /* gap-6, p-6, m-6 */
--spacing-8: 32px; /* gap-8, p-8, m-8 */
/* 布局間距 */
--layout-xs: 16px; /* 小型組件間距 */
--layout-sm: 24px; /* 中型組件間距 */
--layout-md: 32px; /* 標準組件間距 */
--layout-lg: 48px; /* 大型區塊間距 */
--layout-xl: 64px; /* 頁面區塊間距 */
```
### 7.2 陰影令牌
```css
/* 陰影系統 */
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); /* 輕微陰影 */
--shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1); /* 標準陰影 */
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1); /* 中等陰影 */
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1); /* 大陰影(卡片) */
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1); /* 超大陰影(懸停) */
```
### 7.3 過渡動畫令牌
```css
/* 過渡時間 */
--transition-fast: 150ms; /* 快速回饋 */
--transition-normal: 300ms; /* 標準過渡 */
--transition-slow: 500ms; /* 慢速動畫 */
/* 過渡函數 */
--ease-out: cubic-bezier(0, 0, 0.2, 1);
--ease-in: cubic-bezier(0.4, 0, 1, 1);
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
```
---
## 8. 組件使用指南
### 8.1 按鈕組件使用
#### 使用場景對照表
| 按鈕類型 | 使用場景 | CSS類別 |
|---------|----------|---------|
| Primary | 主要動作(保存、確認、下一步) | `bg-primary text-white hover:bg-primary-hover` |
| Secondary | 次要動作(取消、重置) | `bg-gray-200 text-gray-700 hover:bg-gray-300` |
| Danger | 危險動作(刪除、清除) | `bg-red-600 text-white hover:bg-red-700` |
| Success | 成功動作(完成、提交) | `bg-success text-white hover:bg-green-600` |
#### 按鈕尺寸規範
```tsx
{/* 大型按鈕 - 主要動作 */}
{/* 標準按鈕 - 一般動作 */}
{/* 小型按鈕 - 次要動作 */}
```
### 8.2 卡片組件使用
#### 主要內容卡片
- **用途**: 主要學習內容、重要信息展示
- **特點**: 大陰影、圓角、懸停效果
- **樣式**: `bg-white rounded-xl shadow-lg hover:shadow-xl`
#### 資訊展示卡片
- **用途**: 次要信息、詳細說明
- **特點**: 淺色背景、邊框、適中內距
- **樣式**: `bg-gray-50 rounded-lg p-4 border border-gray-200`
#### 狀態回饋卡片
- **用途**: 答案回饋、操作結果
- **特點**: 狀態色彩、邊框強調
- **樣式**: `bg-green-50 border border-green-200` (成功)
### 8.3 表單組件使用
#### 輸入框設計
```tsx
```
#### 選擇器設計
```tsx
```
---
## 9. 可訪問性設計
### 9.1 語義化HTML
```tsx
{/* 使用適當的語義標籤 */}
{/* 按鈕語義 */}
```
### 9.2 鍵盤導航
```tsx
{/* 支援鍵盤操作 */}
{
if (e.key === 'Enter') {
handleSubmit();
}
if (e.key === 'Escape') {
handleCancel();
}
}}
/>
```
### 9.3 焦點管理
```tsx
{/* 明確的焦點樣式 */}
```
---
## 10. 動畫設計規範
### 10.1 頁面過渡
```css
/* 頁面淡入 */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
/* 滑動進入 */
@keyframes slideIn {
from { transform: translateX(100%); }
to { transform: translateX(0); }
}
/* 放大進入 */
@keyframes scaleIn {
from { transform: scale(0.9); opacity: 0; }
to { transform: scale(1); opacity: 1; }
}
```
### 10.2 互動動畫
```css
/* 懸停上升效果 */
.hover-lift {
transition: transform 0.2s ease;
}
.hover-lift:hover {
transform: translateY(-2px);
}
/* 點擊回饋 */
.click-feedback {
transition: transform 0.1s ease;
}
.click-feedback:active {
transform: scale(0.98);
}
```
### 10.3 卡片翻轉動畫
```css
.card-flip-container {
perspective: 1000px;
}
.card-flip {
transition: transform 0.6s ease;
transform-style: preserve-3d;
}
.card-flip.flipped {
transform: rotateY(180deg);
}
.card-flip-front,
.card-flip-back {
backface-visibility: hidden;
position: absolute;
width: 100%;
height: 100%;
}
.card-flip-back {
transform: rotateY(180deg);
}
```
---
## 11. 設計一致性檢查清單
### 11.1 視覺一致性
- [ ] 所有按鈕使用統一的顏色和尺寸系統
- [ ] 卡片陰影和圓角保持一致
- [ ] 文字層級和間距符合設計系統
- [ ] 狀態顏色使用語義化且一致
### 11.2 交互一致性
- [ ] 相同功能的組件使用相同的交互模式
- [ ] 懸停和點擊效果在所有組件中保持一致
- [ ] 載入狀態使用統一的視覺表現
- [ ] 錯誤處理採用一致的回饋方式
### 11.3 內容一致性
- [ ] 標題層級結構合理且一致
- [ ] 說明文字使用統一的語調和格式
- [ ] 圖標使用保持一致的視覺風格
- [ ] 操作流程邏輯清晰且可預測
---
## 12. 實現指南
### 12.1 新組件開發流程
1. **設計審查**: 確認設計符合系統規範
2. **組件拆分**: 識別可重用的設計模式
3. **樣式實現**: 使用設計令牌和預定義類別
4. **互動測試**: 驗證各種狀態和過渡效果
5. **響應式測試**: 確保在不同設備上的表現
6. **可訪問性測試**: 驗證鍵盤導航和屏幕閱讀器支援
### 12.2 設計系統維護
#### 新增設計元素流程
1. **需求評估**: 確認是否需要新的設計模式
2. **一致性檢查**: 與現有系統的兼容性
3. **文檔更新**: 更新設計規範文檔
4. **團隊同步**: 與開發團隊同步新的設計規範
#### 設計令牌更新
1. **修改tailwind.config.ts**: 更新顏色、間距等令牌
2. **組件更新**: 更新受影響的組件實現
3. **測試驗證**: 確保變更不會破壞現有設計
4. **文檔同步**: 更新設計規範文檔
---
## 13. 最佳實踐
### 13.1 用戶體驗原則
#### 學習流程設計
- **循序漸進**: 從簡單到複雜的學習模式安排
- **即時回饋**: 每個操作都有明確的視覺回饋
- **進度可視**: 清晰的進度指示和成就感
- **錯誤友好**: 錯誤狀態提供建設性的指導
#### 認知負荷管理
- **視覺層次**: 使用大小、顏色、間距建立清晰的信息層次
- **內容聚焦**: 每個頁面專注於單一主要任務
- **減少選擇**: 避免過多的同時選項,使用漸進式披露
### 13.2 技術實現最佳實踐
#### CSS組織
```tsx
{/* 使用Tailwind的組合類別 */}
const buttonClass = `
px-6 py-3
bg-primary text-white
rounded-lg
hover:bg-primary-hover
transition-colors
font-medium
disabled:opacity-50
disabled:cursor-not-allowed
`;
{/* 條件式樣式 */}
const cardClass = `
border rounded-lg p-4 transition-all duration-200
${isSelected
? 'border-blue-500 bg-blue-50 shadow-sm'
: 'border-gray-200 bg-white hover:border-gray-300'
}
`;
```
#### 響應式設計模式
```tsx
{/* 移動優先的響應式設計 */}
{/* 內容 */}
{/* 條件式顯示 */}
{/* 桌面版內容 */}
{/* 手機版內容 */}
```
---
## 14. 組件庫結構
### 14.1 基礎組件
```
/components
├── ui/
│ ├── Button.tsx # 基礎按鈕組件
│ ├── Card.tsx # 基礎卡片組件
│ ├── Modal.tsx # 模態對話框
│ ├── Input.tsx # 輸入組件
│ ├── Badge.tsx # 徽章標籤
│ └── Progress.tsx # 進度條
├── layout/
│ ├── Navigation.tsx # 導航組件
│ ├── PageHeader.tsx # 頁面標題
│ └── Container.tsx # 容器組件
└── learning/
├── FlipCard.tsx # 翻卡組件
├── QuizCard.tsx # 測驗卡片
├── AudioPlayer.tsx # 音頻播放器
└── VoiceRecorder.tsx # 語音錄製
```
### 14.2 設計系統文件結構
```
/design-system
├── tokens/
│ ├── colors.ts # 顏色令牌
│ ├── spacing.ts # 間距令牌
│ ├── typography.ts # 字體令牌
│ └── shadows.ts # 陰影令牌
├── components/
│ ├── Button.stories.tsx # 按鈕故事書
│ ├── Card.stories.tsx # 卡片故事書
│ └── ...
└── guidelines/
├── accessibility.md # 可訪問性指南
├── responsive.md # 響應式設計指南
└── animation.md # 動畫設計指南
```
---
## 15. 設計演進記錄
### 15.1 當前版本特色
- **清新漸層背景**: 營造舒適的學習氛圍
- **3D翻卡效果**: 增強學習的互動體驗
- **智能狀態回饋**: 即時的學習成果反饋
- **多模式學習**: 適應不同學習偏好的設計
### 15.2 設計改進方向
- **暗色主題支援**: 提供夜間學習模式
- **個人化界面**: 根據用戶偏好調整界面
- **更豐富的動畫**: 增加學習過程的趣味性
- **無障礙優化**: 進一步提升可訪問性
---
**文件版本**: 1.0
**建立日期**: 2025-09-20
**維護者**: DramaLing 設計團隊
**適用範圍**: DramaLing 詞彙學習系統全產品線