色相、飽和度和明度使用 0-360 色輪上的一個角度,以及兩個從最強的標準化 RGB 通道中取出的百分比來描述顏色,這就是為什麼網頁設計師在需要調整色票的某一個面向、而不必重新計算另外兩個時,會把 RGB 轉換成 HSV。RGB 是為硬體打造的一種加法混色模型:眼睛會把三個光線強度混合成一種顏色,但這三個數字並無法清楚地把「這是什麼顏色」與「它的強度有多強」分開。HSV 將同一組三元組重新整理,讓色相承載顏色的本質、飽和度承載與灰色的距離,而明度則承載最強通道的亮度。對於直接以 HSV 形式呈現的 CSS 自訂屬性、設計標記 (design token) 和設計工具選色器來說,這種重新組織在設計師每次建立色階 (tint scale)、撰寫懸停狀態、或將品牌顏色與第三方元件同步時,都能省下不少心力。這種轉換也是一組固定的數學對應:任何 8 位元的 RGB 三元組都會對應到唯一一組 HSV 三元組,因此這個結果在瀏覽器、設計工具和程式碼函式庫之間都是可重現的。

為什麼網頁設計師會先選擇 HSV 而非 RGB
RGB 是任何螢幕最自然的單位,但並不方便編輯。當你把一個色票往較深的色調移動時,你必須以不同的量來降低紅、綠、藍三個值,才能維持色相的穩定;當你把顏色調得偏向灰色時,則必須把每個通道都拉向一個共同的值。HSV 把這三件工作區分開來,這與設計師在設計審查和 CSS 變數中實際討論色彩的方式高度吻合。
在一般的網頁專案中,HSV 在四種反覆出現的情境中很有用:
- 從單一品牌顏色建立色階或陰影階梯 (shade ramp),其中色相保持固定,而飽和度或明度以等量步進變動。
- 在 CSS 中撰寫懸停、聚焦和啟動狀態,其底層色相保持不變,只有強度或灰度產生變化。
- 產生驅動佈景主題的 CSS 自訂屬性,其中一個色相變數可透過飽和度與明度的變化,產生數個相關的色階。
- 與原生提供 HSV 選色器的設計工具溝通,包括 Photoshop、Figma、Sketch 以及許多圖示函式庫。
HSV 也能與 CSS 濾鏡效果(例如 hue-rotate 和 saturate)良好搭配,因為這些效果運作的軸向與 HSV 模型相同。以 HSV 思考的設計師能預測這些濾鏡會如何移動色票;只以 RGB 思考的設計師則必須用肉眼逐一測試每個互動結果。這也是為什麼分別儲存色相、飽和度與明度的設計標記,能讓佈景主題切換和無障礙調整更容易理解,因為每個變數都只負責一件事。
如何在網頁設計工作流程中將 RGB 轉換為 HSV
從 8 位元 RGB 三元組到 HSV 座標的最快路徑,是使用一個專門的轉換工具來處理運算、驗證輸入,並以網頁工具實際預期的刻度顯示結果。RGB 轉 HSV 轉換器接受三個整數通道,並在單一步驟中回傳以度數表示的色相,以及以百分比表示的飽和度與明度。
- 開啟轉換器,將紅、綠、藍通道以 0 到 255 的整數輸入。小數輸入、空欄位、負數以及超過 255 的數值都會被拒絕,這能避免單一筆誤輸入在設計系統中產生看似合理但實際錯誤的顏色。
- 選擇「轉換為 HSV」。該工具會將每個通道除以 255,找出最大值、最小值以及它們的差值,然後使用與 Android Color 參考文件及 R 的 grDevices rgb2hsv 慣例所記載的相同最大通道分段公式來計算明度、飽和度與色相。
- 讀取結果:色相以 0-360 圓周上的度數顯示,而飽和度與明度則以百分比顯示。介面也會同時顯示標準化的 HSV 表示法、來源 HEX 色碼,以及一個視覺色票,方便你對照輸入來確認結果。
- 在複製之前先確認目標環境。CSS、設計工具選色器、JavaScript 函式庫以及影像處理程式碼並非全都以同一種刻度來儲存 HSV。一個顯示為 80.90% 的飽和度,在零到一的 API 中約等於 0.809,而不是整數 80,除非該程式明確使用百分比。
- 如果你想看三個 HSV 分量對變動的反應,可以變更其中一個通道後再次轉換。輸入欄位會保持顯示,因此在設計調色盤或規劃懸停狀態時,這是快速比較不同變體的便利方式。
舉一個實際的例子,取橙色色票 rgb(255, 165, 0)。每個通道除以 255 得到 R' = 1.000、G' = 0.6471、B' = 0.000。最大值為 1.000、最小值為 0.000,因此明度等於 100%,飽和度等於 1.000 除以 1.000,同樣是 100%。因為紅色是最強的通道,色相等於 60 × ((G' − B') / delta) = 60 × 0.6471 ≈ 38.82 度。完整的結果為 hsv(38.82°, 100%, 100%),在色輪上位於紅色附近,呈現為鮮明的橙色。
將 HSV 值套用至 CSS 與設計標記
CSS 在目前廣泛支援的語法中並沒有原生的 hsv() 函式,但 HSV 座標仍然能驅動實際的 CSS 工作。它們可以餵入 HSL 或 HWB 宣告、hue-rotate 與 saturate 濾鏡效果,以及任何用於驅動佈景主題切換或顏色動畫的 JavaScript。了解以度數表示的色相,對於色階與陰階也同樣有用:在色輪上旋轉可保持色彩家族一致,而飽和度與明度的滑動則會使顏色變得更淺、更深或更柔和。
一個典型的工作流程看起來像這樣。設計師收到一個品牌色 rgb(26, 86, 219),並希望製作一個感覺上暗大約百分之十的懸停狀態。讀取 HSV 結果後,可以得到要降低的色相、飽和度與明度。接著,懸停規則會使用由相同色相產生、但明度較低的相關 HSL 或 HEX 值。如果目標是 CSS 濾鏡,那麼明度或飽和度百分比就可以直接對應到 saturate() 與 brightness() 函式,不需要再繞回 RGB 一次。如果想更深入了解 CSS 語法,RGB 轉 HSV 在 CSS 程式碼中的對應值 轉換指南詳細說明了對應的宣告,包括如何將同一組座標餵入 HWB 與 color-mix() 函式。
常見網頁設計顏色的色相角度對照
HSV 色相刻度以設計工具使用的色輪為基準,因此設計師可以透過度數來辨識一個色相,並預測它旁邊會是什麼顏色。下表列出轉換器黃金案例 (golden case) 中所使用的六個主要與次要色輪位置,以及產生各個位置的通道組合。
| 色相 (度數) | 顏色名稱 | 近似 RGB | 網頁設計用途 |
|---|---|---|---|
| 0 | 紅色 | rgb(255, 0, 0) | 錯誤訊息、破壞性操作、促銷標籤 |
| 60 | 黃色 | rgb(255, 255, 0) | 警告、強調、引起注意的標記 |
| 120 | 綠色 | rgb(0, 255, 0) | 成功狀態、確認訊息、正向指標 |
| 180 | 青色 | rgb(0, 255, 255) | 資訊標籤、某些調色盤中的連結狀態 |
| 240 | 藍色 | rgb(0, 0, 255) | 主要操作、連結、品牌顏色 |
| 300 | 洋紅 | rgb(255, 0, 255) | 強調色、次要亮點 |
相同的色輪位置也出現在上方橙色的實際範例中。38.82 度的色相落在紅色與黃色之間,這正是設計師預期鮮明橙色應該出現的位置。需要快速視覺參考的設計師,可以搭配使用 RGB 轉 HSV 轉換器與調色盤工具,或透過在色輪錨點之間插值來描繪中間色相。
網頁設計工具之間的 HSV 刻度差異
轉換器輸出的 HSV 數值遵循 Android Color 參考文件所記載的範圍:色相至少為 0 且小於 360,而飽和度與明度在以百分比顯示之前,位於零到一的範圍。並非每個工具都使用這些完全相同的範圍,這是在不同系統之間共用顏色時,最常造成微小但明顯差異的原因。
| 目標環境 | 色相刻度 | 飽和度刻度 | 明度刻度 | 備註 |
|---|---|---|---|---|
| 網頁 (本轉換器) | 0-360 度 | 0-100% | 0-100% | 顯示至小數兩位;底層計算為完整精度 |
| Photoshop、Figma、Sketch 選色器 | 0-360 度 | 0-100% (整數) | 0-100% (整數) | 貼到滑桿控制項時請四捨五入為整數 |
| JavaScript 與 CSS 顏色函式庫 | 0-360 度 | 0-1 分數 | 0-1 分數 | 傳入 API 前請將顯示的百分比除以 100 |
| OpenCV 與部分影像處理程式碼 | 0-179 整數 | 0-255 整數 | 0-255 整數 | 精簡儲存;重新使用前需要進行刻度轉換 |
轉換器上小數兩位的顯示僅是為了方便閱讀。內部結果仍然是未經四捨五入的數值,因此將百分比四捨五入為 80 或 81 只是顯示上的選擇,並不會改變顏色在一般解析度螢幕上的呈現。在將結果轉移到另一個系統時,較安全的做法是在目標端才進行四捨五入,而不是重新輸入一個中途的值。
將 HSV 轉移至網頁專案時常見的陷阱
HSV 的定義很精確,但周圍的生態系統並非如此。每當色彩從一個工具跨越到另一個工具時,總會出現一些反覆發生的錯誤,而每個錯誤都需要事後花時間診斷。
- 將 HSV 的明度重新標記為 HSL 的亮度。 HSV 明度追蹤的是最強的標準化通道,而 HSL 亮度是最強與最弱通道的平均值。需要 HSL 的網頁專案必須經過獨立的轉換,而不是把 HSV 三元組直接重新命名。
- 將顯示的百分比視為整數。在 0 到 1 的 API 中,80.90% 的飽和度是 0.8090。去掉小數點會變成 80,這在以分數儲存飽和度的程式碼中會對應到不同的顏色。
- 忘記無彩色並沒有真正的色相。當紅、綠、藍相等時,轉換器會回報一個 0 度的佔位色相,飽和度為零。任何在中性色塊上旋轉色相的 CSS 規則,在程式碼上看起來正確,但視覺上仍會產生相同的顏色。
- 假設 HSV 能解決無障礙問題。HSV 座標描述的是一個顏色,而非它與另一個顏色的對比。使用 HSV 來挑選色調的設計,在實際發布前仍需要進行對比檢查,因為在 HSV 中看起來相關的兩個顏色,並排放置時可能無法通過 WCAG 的可讀性門檻。
- 將 HSV 與廣色域來源混合使用。此轉換器運作於與輸入三元組相同的 sRGB 風格色彩空間。它不會讀取嵌入的影像描述檔、不會在廣色域色彩空間之間轉換,也不會模擬色彩在校色螢幕上的呈現方式。
對於這些因素影響重大的品牌關鍵工作,HSV 結果只是起點,而非最終答案。HSV 座標能告訴設計師色塊在色輪上的位置,以及它距離灰色的程度,但實際的顏色呈現仍取決於螢幕、gamma 曲線,以及頁面上的對比搭檔。
如果您正在權衡各種方案,CMYK 轉 RGB 用於印刷:印刷端預覽工作流程對此有詳細介紹。
如果您正在權衡各種方案,在 Mac 上將十六進位轉為 RGB:在瀏覽器中解析任何 CSS 十六進位色碼對此有詳細介紹。