CSS 十六進位標記法是設計師與開發者用來將紅、綠、藍及選用的 alpha 打包成一個以 # 開頭的簡潔字串的速記方式,而將其轉換為 RGB 則代表將每兩個數字位元組展開成 0 到 255 之間的整數。一個有效的 CSS 標記在井字號後必須剛好是 3、4、6 或 8 個十六進位數字;例如,#1A2B3C 展開後為紅 26、綠 43、藍 60,而 #1A2B3C7F 則附加了一個值為 127 的 alpha 位元組。三位數與四位數的簡寫形式透過複製每個半位元組來運作,因此 #F80 代表 #FF8800,#0F08 代表 #00FF0088。這條嚴格的 CSS 規則正是 HEX 轉 RGB 轉換器 所遵循的規則,也是設計系統與樣式指南中發布的調色盤代碼通常遵守的規則。一旦了解格式,十六進位調色盤就會變成一組 RGB 三元組,可以傳遞給 canvas 呼叫、設計 token 檔案、測試 fixture 或任何接受整數通道的 API。

轉換器接受的 CSS 十六進位格式
CSS Color Module Level 4 定義了四種十六進位形式,是一個針對網頁調色盤的轉換器需要辨識的格式。可接受的語法要求開頭的井字號,以及嚴格來自 0 至 9 與 A 至 F 的位數。大寫與小寫字母等價,內嵌的空白字元會被拒絕,重複的井字號也會被拒絕,因此無效的標記絕不會悄悄變成一個猜測出來的顏色。下表摘要列出這四種形式、各自展開的結果,以及 alpha 位元組的行為。
| 格式 | 範例 | 位數 | Alpha 行為 | 通道位元組 (R, G, B, A) |
|---|---|---|---|---|
| #RGB | #F80 | 3 | 隱含不透明 | 255, 136, 0, 255 |
| #RGBA | #0F08 | 4 | 明確指定 | 0, 255, 0, 136 |
| #RRGGBB | #1A2B3C | 6 | 隱含不透明 | 26, 43, 60, 255 |
| #RRGGBBAA | #1A2B3C7F | 8 | 明確指定(CSS 的 alpha 在最後) | 26, 43, 60, 127 |
#RGB 那一列顯示,三位數的輸入會透過複製每個半位元組來展開,這與 CSS 速記規則相同。三位數與六位數的輸入在預覽中被視為完全不透明,因為它們並未提供 alpha 位元組;表格中顯示的 alpha 值為 255,僅是為了讓位元組欄在各列間保持一致,並非因為輸入明確宣告了該值。四位數與八位數的輸入包含真正的 alpha 位元組,也是預覽透明度唯一直接來自來源值的列。
將十六進位調色盤轉為 RGB 通道值
下方的工作流程會接收以十六進位代碼表示的一系列調色盤靈感,並將每一個轉為可放入程式碼或設計檔案的通道位元組。一切都在瀏覽器本地執行,因此顏色絕不會離開這個頁面。
- 將一個以 # 開頭的 CSS 十六進位顏色貼到輸入欄位。井字號後使用 3、4、6 或 8 位數字,並避免內嵌空白。
- 讀取正規化後的十六進位值、CSS rgb() 或 rgba() 字串,以及預覽旁顯示的個別通道位元組。
- 對於半透明的顏色,請複製 alpha 位元組或正規化後的八位數 HEX,以避免四捨五入後的 rgba() 小數產生細微的精度飄移。
- 對調色盤中的每個顏色重複同樣步驟,並將通道值組合成目標系統所期望的格式。
短碼十六進位如何展開為位元組
短碼十六進位標記法透過讓每個半位元組代表一個完整的位元組來節省按鍵次數,但在通道值有意義之前,位元組仍然必須存在。展開規則很簡單:複製每個數字。簡寫 #F80 變成 #FF8800,因為 F 複製為 FF,8 複製為 88,0 複製為 00,得到紅 255、綠 136、藍 0。同樣的規則也適用於四位數輸入中的 alpha:#0F08 變成 #00FF0088,展開後為紅 0、綠 255、藍 0、alpha 136。
一旦值成為六位數或八位數形式,每兩個十六進位數字就是一個直接對應到 0 到 255 整數的 base-16 數字。「FF」這對數字是 15 × 16 + 15 = 255,而「00」則是 0。在這個階段不涉及除法、縮放或四捨五入。展開過程是機械式的,相同的規則也記錄在十六進位轉 RGB 通道數學解說中,提供給想親手驗算數學的設計師參考。
「FF」這對數字出現在通道範圍的兩端:00 代表沒有貢獻,FF 代表完全貢獻。這就是為什麼在處理整數的程式碼中,CSS rgb() 範圍的端點總是寫成 0 與 255,而非百分比。任何需要個別通道的調色盤產生器、設計系統或 canvas 呼叫,都可以直接依賴這個 0–255 對應關係而無須額外轉換。
Alpha 在八位數十六進位中的位置
CSS 將 alpha 放在十六進位字串的尾端,這就是為什麼標準的八位數形式寫成 #RRGGBBAA。網頁之外使用的一些慣例,特別是較舊的 Android 顏色資源,會將 alpha 放在最前面,寫成 #AARRGGBB。一個針對 CSS 的轉換器不會根據視覺外觀重新排列位元組,也不應將 #AARRGGBB 字串當作 #RRGGBBAA 來解讀,因為這兩種標記描述的是完全不同的顏色。HEX 轉 RGB 轉換器嚴格以 CSS 方式解析,這代表八位數輸入的最後一個位元組永遠是 alpha。
Alpha 本身以 0 到 255 之間的整數位元組儲存,而 CSS 以 0 到 1 的小數不透明度顯示它。轉換僅是一次除法:位元組 ÷ 255。以先前使用的值 136 為例,136 ÷ 255 = 0.53333…,轉換器在 rgba() 字串中顯示為約 0.533。原始的位元組(136)以及正規化的 HEX(#0F08,展開為 #00FF0088)仍會與四捨五入後的小數並列顯示,因此始終能精準地往返還原到來源值而不損失精度。
這就是為什麼面板即使在顯示的小數被四捨五入時,仍會保留精確的位元組:像 0.502 這樣四捨五入後的不透明度無法再乘回一個乾淨的整數位元組(128 ÷ 255 = 0.5019607…),即使四捨五入到小數三位,仍會留下一個嚴格往返無法還原的微小殘差。當下游系統以整數形式儲存顏色時,保留八位數 HEX 或 alpha 位元組才是安全的選擇。
解讀結果:正規化 HEX、位元組或 CSS 輸出
轉換器為同一個輸入提供三種輸出,選擇哪一種取決於該值將被消費的位置。正規化後的十六進位是往返還原最安全的選擇:它保留了來源值的逐位元組資訊,包括 alpha。CSS rgb() 或 rgba() 字串是樣式表與行內樣式(接受函式標記法)的正確選擇。而以整數形式呈現的個別通道位元組,則是 API 呼叫、canvas 操作、測試 fixture 或設計 token 在需要單獨設定各個元件時所需要的。
以十六進位代碼發布的調色盤靈感通常一次只需要其中一種表示法。將顏色複製到 CSS 的網頁設計師只需要 rgba() 字串。將顏色送入 canvas 呼叫的圖形程式設計師只需要四個整數。以十六進位字串儲存顏色的設計 token 檔案只需要正規化的八位數形式。將錯誤的輸出讀入錯誤的位置是細微 bug 的常見來源,特別是在涉及 alpha 的時候,因此下表摘要列出典型的使用情境,而不嘗試列舉所有可能的下游系統。
| 輸出 | 最適用於 | 保留的內容 |
|---|---|---|
| 正規化 HEX(六位或八位數) | 往返儲存、設計 token、設定檔 | 精確的位元組,包括 alpha |
| CSS rgb() 或 rgba() | 樣式表、行內樣式、CSS 變數 | 人類可讀的 CSS,小數 alpha 至三位數 |
| 個別通道位元組 | Canvas 呼叫、影像編輯器、測試 fixture、API 酬載 | 0 到 255 之間的獨立整數值 |
結果面板中顯示的百分比由 alpha 位元組衍生而來,遵循相同的位元組對小數對應關係,並顯示至小數兩位。它們適合作為快速的視覺合理性檢查,而非精確的中間值,這也是為什麼轉換器始終讓底層位元組保持可取得。
調色盤靈感的來源與要轉換的內容
以十六進位為基礎的調色盤靈感在設計社群中以已發布的色票清單形式傳遞:品牌情緒板、樣式指南、開源設計系統,或某個喜愛網站的截圖。每個調色盤通常以一組扁平的六位數代碼形式出現,例如 #111827、#374151、#9CA3AF 與 #F9FAFB。一旦取得這些代碼,轉換步驟就是機械式的:將每個代碼貼入轉換器,讀取通道位元組,再將它們送給任何需要整數或 rgba() 語法的目標。
幾個實務上的習慣能讓轉換保持乾淨。複製完整的 CSS 標記(包括井字號),因為缺少開頭字元是嚴格解析器拒絕一個本來有效數值最常見的原因。確認預期的位數符合您想要的形式,因為三位數的速記會悄悄展開成一個您可能記不住的六位數顏色。當透明度是調色盤的一部分時,請驗證來源確實使用的是 CSS 的 alpha 在最後的順序,而非某些 Android 顏色資源所使用的較舊 #AARRGGBB 慣例。如果代碼為空或無效,轉換器會清除先前的結果並顯示明確的錯誤,因此絕不會在目前輸入旁顯示一個過時的成功轉換結果。
結果旁邊渲染的預覽色塊對於檢查通道順序是一個快速的合理性檢查,但它並非色彩管理的參考依據。同一個數值化的 sRGB 值在不同的螢幕、亮度等級、環境光與寬色域描述檔上可能呈現不同的外觀,因此預覽的作用是抓出明顯的錯誤,而非驗證感知上的同一性。針對無障礙工作,針對預期背景進行獨立的對比檢查才是正確的下一步;針對印刷,製程色的估計值不應被視為受管理描述檔與打樣工作流程的替代品。