Skip to main content

Command Palette

Search for a command to run...

🎨 Hsl 色彩格式說明

Published
4 min read

📌 什麼是 HSL?

HSL 是 Hue(色相)、Saturation(飽和度)、Lightness(亮度)的縮寫,是一種直觀的色彩表示方式。

HSL 格式結構

HSL(H, S%, L%)
  • H (Hue / 色相):0-360° 的色輪角度

    • 0° = 紅色

    • 120° = 綠色

    • 240° = 藍色

    • 360° = 回到紅色

  • S (Saturation / 飽和度):0-100%

    • 0% = 無色彩(灰色)

    • 100% = 最鮮豔

  • L (Lightness / 亮度):0-100%

    • 0% = 黑色

    • 50% = 純色

    • 100% = 白色

範例

/* 藍色 */
hsl(210, 100%, 50%)  /* 鮮豔的藍色 */
hsl(210, 50%, 50%)   /* 較淡的藍色 */
hsl(210, 100%, 90%)  /* 很亮的藍色 */
hsl(210, 100%, 10%)  /* 很暗的藍色 */

✨ HSL 的優勢

1️⃣ 直觀易懂

HSL 的優勢:

  • ✅ 符合人類對色彩的認知方式

  • ✅ 三個參數分別對應「什麼顏色」、「多鮮豔」、「多亮」

  • ✅ 不需要記憶十六進位碼

HEX 的問題:

  • #3b82f6 無法直接看出是什麼顏色

  • ❌ 調整亮度需要計算 RGB 值

  • ❌ 不直觀,難以手動調整

對比範例:

HSL: hsl(210, 100%, 50%)  ← 一看就知道是「鮮豔的中等亮度藍色」
HEX: #3b82f6             ← 看不出顏色特性

2️⃣ 易於調整亮度

HSL 的優勢:

  • ✅ 只需調整 L(亮度)值即可變亮或變暗

  • ✅ 保持色相和飽和度不變

  • ✅ 適合建立色彩階層(如按鈕的 hover 效果)

實際應用:

/* 主色按鈕 */
--primary: hsl(210, 100%, 50%);   /* 標準色 */

/* 變暗 10% → hover 效果 */
--primary-hover: hsl(210, 100%, 40%);  /* 只需改 L: 50% → 40% */

/* 變亮 10% → 淺色變體 */
--primary-light: hsl(210, 100%, 60%);  /* 只需改 L: 50% → 60% */

如果用 HEX:

/* 主色 */
--primary: #3b82f6;

/* 要變暗?需要轉換 RGB → 計算 → 再轉回 HEX */
--primary-hover: #2563eb;  /* 怎麼算出來的?不直觀 */

3️⃣ 易於統一色相

HSL 的優勢:

  • ✅ 保持 H(色相)相同,就能確保所有顏色屬於同一色系

  • ✅ 調整 S(飽和度)和 L(亮度)即可創造和諧配色

  • ✅ 適合建立一致的設計系統

實際應用:

/* 統一色相(H = 210°),只調整亮度和飽和度 */
--background: hsl(210, 40%, 98%);   /* 淺色背景 */
--border: hsl(210, 35%, 88%);       /* 稍暗的邊框 */
--primary: hsl(210, 100%, 50%);    /* 鮮豔的主色 */
--text: hsl(210, 20%, 15%);         /* 深色文字 */

/* 所有顏色都是藍色系(H = 210°),視覺和諧 */

如果用 HEX:

/* 這些顏色看起來和諧嗎?看不出來 */
--background: #f7fafc;
--border: #e2e8f0;
--primary: #3b82f6;
--text: #0f172a;

/* 要確保色相統一?需要轉換每個 HEX → HSL → 檢查 H 值 */

4️⃣ 易於建立色彩變體

HSL 的優勢:

  • ✅ 系統化地產生同一色系的不同變體

  • ✅ 適合建立設計系統的色彩階層

  • ✅ 易於維護和擴展

實際應用:

/* 基礎色 */
--blue-base: hsl(210, 100%, 50%);

/* 建立階層(只調整亮度) */
--blue-50: hsl(210, 100%, 95%);   /* 最淺 */
--blue-100: hsl(210, 100%, 90%);
--blue-200: hsl(210, 100%, 80%);
--blue-300: hsl(210, 100%, 70%);
--blue-400: hsl(210, 100%, 60%);
--blue-500: hsl(210, 100%, 50%);  /* 標準 */
--blue-600: hsl(210, 100%, 40%);
--blue-700: hsl(210, 100%, 30%);
--blue-800: hsl(210, 100%, 20%);
--blue-900: hsl(210, 100%, 10%);  /* 最深 */

如果用 HEX:

/* 每個值都需要單獨計算和轉換 */
--blue-50: #eff6ff;
--blue-100: #dbeafe;
--blue-200: #bfdbfe;
/* ... 看不出規律,難以維護 */

5️⃣ 易於實現明暗主題

HSL 的優勢:

  • ✅ 只需調整 L(亮度)值即可切換明暗

  • ✅ 保持色相和飽和度,確保品牌色彩一致

  • ✅ 適合動態主題切換

實際應用:

/* 亮色主題 */
:root {
  --background: hsl(210, 40%, 98%);  /* 很亮 */
  --text: hsl(210, 20%, 15%);        /* 很暗 */
  --primary: hsl(210, 100%, 50%);    /* 標準 */
}

/* 暗色主題 - 只需反轉亮度 */
.dark {
  --background: hsl(210, 40%, 5%);   /* 很暗(98% → 5%)*/
  --text: hsl(210, 20%, 95%);        /* 很亮(15% → 95%)*/
  --primary: hsl(210, 100%, 60%);    /* 稍亮(50% → 60%)*/
}

/* 色相(H)和飽和度(S)保持不變,確保品牌一致性 */

如果用 HEX:

/* 亮色主題 */
:root {
  --background: #f7fafc;
  --text: #0f172a;
  --primary: #3b82f6;
}

/* 暗色主題 - 需要重新設計所有顏色 */
.dark {
  --background: #020617;  /* 怎麼算出來的? */
  --text: #f7fafc;        /* 為什麼選這個? */
  --primary: #60a5fa;     /* 和亮色主題有關聯嗎? */
}

/* 無法直觀看出明暗主題之間的關係 */

📊 HSL vs HEX vs RGB 對比

特性HSLHEXRGB
直觀性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
調整亮度⭐⭐⭐⭐⭐⭐⭐
統一色相⭐⭐⭐⭐⭐⭐⭐
建立變體⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
程式化處理⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
瀏覽器支援⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

💡 使用建議

何時使用 HSL?

適合使用 HSL:

  • 需要建立色彩系統或設計系統

  • 需要動態調整亮度(如 hover 效果)

  • 需要實現明暗主題切換

  • 需要統一色相建立和諧配色

  • 需要程式化生成色彩變體

何時使用 HEX?

適合使用 HEX:

  • 只需要固定顏色值

  • 需要與設計工具(如 Figma)保持一致

  • 不需要動態調整

  • 團隊習慣使用 HEX


HSL 的核心優勢:

  1. 直觀易懂 - 符合人類對色彩的認知

  2. 易於調整 - 只需修改單一參數即可改變亮度或飽和度

  3. 統一色相 - 容易建立和諧的配色系統

  4. 建立變體 - 系統化產生色彩階層

  5. 主題切換 - 適合實現明暗主題

  6. 程式化處理 - 易於建立工具和函數

建議:

  • 在建立設計系統時優先使用 HSL

  • 需要動態調整顏色時使用 HSL

  • 固定顏色值可以使用 HEX(與設計工具保持一致)


最後更新: 2025-11-07

More from this blog

🎨Figma MCP 雙向編輯 [ TalkToFigma ]

用自然語言描述,AI 立即在 Figma 中創建設計 - 突破只讀限制的革命性工具 📋 目錄 這個工具能做什麼? 核心價值與效益 快速開始 完整安裝指南 實際應用範例 故障排除 重要提醒 延伸資源 這個工具能做什麼? 🎯 一句話總結 讓 Cursor AI 不只能讀取 Figma 設計,更能直接修改、創建和批量操作 Figma 元件。 ✨ 核心突破 Cursor 官方的 Figma MCP(Model Context Protocol)整合只提供單向讀取,這個開源工...

Nov 7, 20259 min read

🚀 Cursor 設置 RunPod MCP - 完整指南

透過 Model Context Protocol (MCP),讓 Cursor AI 直接管理你的 RunPod GPU 資源! 📋 目錄 什麼是 RunPod MCP? 安裝步驟 配置說明 功能清單 / 實際範例 / 使用技巧 ⚠️ 注意事項 / 🔧 故障排除 📚 延伸資源 什麼是 RunPod MCP? RunPod MCP 是一個讓 Cursor AI 能直接與 RunPod 平台互動的工具。透過它,你可以在 Cursor 聊天室中: 🖥️ 創建和管理 G...

Nov 7, 202510 min read

Whisper 語音轉文字-多方案對比結果

前言 本文檔對比三種使用 Whisper 進行語音轉文字的方式,包含速度、成本與實際使用建議。測試音訊為 56 分 27 秒(約 52 MB)的訪談錄音。 【 總結 】 追求速度與性價比平衡:RunPod RTX 4090 速度最快(75 秒) 成本合理($0.023/次) 無文件限制 適合:中高頻使用(>50 次/天) 零部署需求:Fireworks V3 Turbo API 呼叫即可使用 成本中等($0.051/次) 速度中等(100 秒) 適合:低頻使用(<50 次/...

Nov 7, 20254 min read

🔍 01_SEO 是甚麼,與 Google Ads 差異對比

💡 SEO 一句話解釋 SEO = 讓陌生人在 Google 搜尋關鍵字時,能找到你的網站,而且排在前面。 📱 實際案例:弱電通的例子 搜尋「弱電通」會出現什麼? ┌────────────────────────────────────────┐ │ 🔍 Google 搜尋:「弱電通」 │ ├────────────────────────────────────────┤ │ ...

Nov 7, 20254 min read

比利先生

12 posts

在此分享個人實際在開發中遇到的採坑事件,每件事情都是個人撞牆後耗費大量精力,才發現問題其實簡單;我把問題與結論彙總成對應的筆記提供大家參考。