在數位色彩中,六位數十六進位值的 RGB 互補色是逐位元反轉:紅色、綠色和藍色通道各自變成 255 減去原始值,因此紅色 (#ff0000) 會翻轉為青色 (#00ffff),白色 (#ffffff) 翻轉為黑色 (#000000),其他所有六位數十六進位色碼也都遵循相同的算術規則。正因為這個單一公式能產生確定性的答案,並可由人工或程式從同一輸入重現,所以大多數 CSS 實驗、快速反轉色盤、圖示和資料視覺化實際上都依賴它。互補色尋找器正好實作了此運算:它會將您的十六進位色碼解析為三個介於 0 到 255 之間的整數通道,對每個通道套用 255 減去原值,並在顯示兩個色塊與十進位 RGB 值的同時,一併顯示標準化的小寫十六進位結果。該工具會在頁面上明確標示其 RGB 定義,使每個結果都能重現,並且不會試圖猜測您使用不同色彩模型時所指的意思。

設計師、前端開發人員和資料視覺化作者之所以都會選擇互補色配對,理由其實相同:兩個完全不共用通道的顏色,比起色輪上的鄰近色更能彼此突顯。挑戰在於「互補」一詞依工作色彩空間的不同,至少有五種合適的定義;選錯定義會讓配對顯得混濁、印刷失準,或無法通過無障礙檢查。本文將詳細說明數位 RGB 的定義、展示套用至任何十六進位色碼的確切步驟、與其他替代方案做比較,並提供將原始互補結果轉為可用設計配對的後續小檢查。

how to find complementary colors
how to find complementary colors

互補在數位色彩中的意義

「互補」一詞出現在色彩理論、繪畫、印刷製作和螢幕設計中,每個領域用它指的運算都有些微差異。在螢幕上,在每個 CSS 色彩值所使用的 sRGB 色彩空間中,最可重現的定義是逐位元反轉:所謂互補色,就是其紅、綠、藍通道各為最大值減去原值的那個顏色。這個定義精確、可逆且易於驗證,因此成為調色實驗和快速反轉配對的預設方式。

之所以存在其他定義,是因為它們回答的是不同的問題。HSL 的互補是將色相旋轉 180 度,同時保持亮度和飽和度不變,如此可保留原始顏色的感知強度。顏料混合使用的是減法色彩理論,其中的互補是指混合後會互相抵銷的顏料。印刷使用 CMYK 的行為,其互補色是由紙張上的油墨減去來決定。CIELAB 等感知色彩空間則試圖找出視覺上的對比色,而不是算術上的反轉色,因此即使不是逐位元反轉,仍可能回傳對人眼更和諧的顏色。這些定義都沒有錯,但它們不會對每組配對都達成共識,這也是為什麼在任何互補色工作流程中,首要任務是先選定一個定義並貫徹使用。

RGB 反轉公式解析

這個公式本身只有一行:對三個通道中的每一個,新值等於 255 減去原值。由於六位數十六進位色的每個通道都以介於 0 到 255 之間的整數儲存,因此其結果也必定是有效的六位數十六進位色。不需要四捨五入、不需要裁剪,也無需處理超出色域的問題:此運算在數位色彩方塊上是一個封閉變換。

若要手動套用此公式,請將六位數十六進位值拆成三組兩位數字,將每組轉為對應的十進位數,各自從 255 減去,再把三個結果轉回兩位數十六進位。由於這個數學是對稱的,套用兩次公式就會回到原色,這讓它在淺色與深色狀態的切換,或是建立表格的隔行底色時相當實用。這個公式也會產生幾個值得一眼認出的邊界特例,因為它們在介面設計中不斷出現:

  • #000000 反轉為 #ffffff(黑色變白色,反之亦然)。
  • #ff0000 反轉為 #00ffff(純紅色變純青色)。
  • #00ff00 反轉為 #ff00ff(純綠色變純洋紅色)。
  • #0000ff 反轉為 #ffff00(純藍色變純黃色)。
  • #808080 反轉為 #7f7f7f(近灰色與近灰色互換,在中點附近產生一步的不對稱)。

中點處的不對稱,是這個公式看起來唯一違反直覺之處。因為 255 是奇數,通道範圍的正中央並沒有完美的反轉值;128 反轉後是 127 而非 128。因此 #808080 的互補色是 #7f7f7f,而不是 #808080 本身。如果您曾納悶為何仔細挑選的灰色有時會回傳略微偏差的結果,原因正是如此。

如何找出十六進位色碼的互補色

最快的套用方式,尤其是當您要測試的候選色超過兩三個時,就是讓一個小型的瀏覽器工具代為處理解析和序列化。互補色尋找器正是圍繞下列步驟打造。

  1. 在輸入欄位中輸入六位數的十六進位色,可包含或省略前導的 #。工具接受大小寫字母,並將結果統一標準化為小寫。
  2. 若您還沒有十六進位值,可使用選色器挑選顏色,然後確認文字欄位已正確填入。
  3. 選擇尋找 RGB 互補色,以 255 減去原值的方式反轉每個 8 位元通道。
  4. 讀取顯示結果:來源色塊、反轉色塊、標準化後的十六進位色碼,以及三個十進位通道值。
  5. 將十六進位或 RGB 值複製到您的樣式表、設計檔案或測試頁面中。

這個工具刻意僅接受六位數十六進位輸入,而拒絕像 #f00 這類簡寫形式,或是像「red」這類具名顏色。這些簡寫的展開方式具有歧異,而具名顏色的逐位元反轉,必須先將名稱轉譯為標準化的 sRGB 值才會正確。如果您使用的是 CSS 具名顏色,並想取得其逐位元互補色,請先在具名顏色對照表中查得規範的十六進位值,再將該十六進位值代入尋找器。MDN rgb() 參考文件W3C CSS Color 4 規範都記載了該工具所實作的相同整數通道行為。

實例演練:珊瑚橘的互補色

為了用非平凡的顏色展示公式,我們以十六進位值 #ff6b35 為例,這是行動呼籲按鈕中常見的珊瑚橘色。解析三個通道後,得到紅色 255、綠色 107、藍色 53。以 255 減去原值反轉每個通道後,得到紅色 0、綠色 148、藍色 202。再把這些十進位結果轉回兩位數十六進位,最終得到互補色 #0094ca,一種冷調的青藍色。請注意,原本的暖色與反轉後的冷色在 16 以上並無共用通道,這正是這組配對擁有強烈對比的原因。

若對 #0094ca 再執行一次相同運算,將會回到 #ff6b35,證實這個公式是對稱且無損的。這種可逆性是逐位元定義在 CSS 實驗和調色盤切換上備受青睞的實務原因之一:您可以在淺色與深色、暖色與冷色、品牌色與其互補色之間往返,而不會遺失任何資訊。

RGB 反轉不適用的情境

逐位元反轉雖然精確且可重現,但並非設計師永遠想要的結果。下表摘要列出主要的替代定義,以及每種定義比 255 減通道更合適的情境。在您準備採用某組調色盤之前,可將其作為指引。

定義 運算方式 適用情境
RGB 逐位元反轉 每個 sRGB 通道以 255 減去 CSS 實驗、快速反轉色盤、圖示配對
HSL 色相旋轉 色相平移 180°,保留亮度和飽和度 色輪配色方案、鎖定亮度的設計系統
顏料減法 顏料混合至視覺上互相抵銷 傳統繪畫、壁畫、手工混合媒材
CMYK 互補 於塗佈或非塗佈紙張上進行油墨減去 印刷製作、包裝、雜誌版面
感知對比 在 CIELAB 或類似空間中的視覺對比 高度重視無障礙的色盤、追求和諧的品牌

最常見的錯誤,是把逐位元反轉當成通用的互補方式,卻在之後才發現結果配對顯得混濁,或無法通過對比檢查。當您需要互補色與原色共享相同亮度時,HSL 色相旋轉可能是更佳選擇:深色品牌色旋轉 180° 後仍是深色,而其逐位元反轉通常會變淺。CMYK 互補需要先進行轉換至印刷色彩模型,再仔細讀取所產生的油墨百分比,因為螢幕 RGB 和印刷油墨對「互補」的定義並不相同。至於感知取向的工作,色差計算器能在您定案前,告訴您在 CIELAB 空間中兩個候選色實際相距多遠。

Quick Checks Before You Ship the Pair

A complement is just a number; a usable design pair is something else. Before you put the colors into production, run two quick checks. First, test the foreground and background values with a color contrast checker to confirm the combination clears WCAG AA for body text or AAA for small text. Byte-wise inverses tend to produce pairs with very different lightness levels, so the contrast ratio is often high, but it is not guaranteed: a desaturated mid-gray inverts to a near-gray, and the resulting pair can fail even the loosest accessibility thresholds.

Second, view the pair in its real interface context, not on a flat swatch sheet. The same colors look different on a button with a drop shadow, inside a card with a tinted background, or over a busy photograph. If the pair will be used for charts, generate a small mockup first and read the data from a typical screen size rather than designing in isolation. If the pair will be sent to a printer, run the original hex through a CMYK conversion and inspect the ink build before the file leaves your computer. None of these checks replaces a thoughtful palette, but they catch the predictable problems that byte-wise inversion tends to produce.

The Complementary Color Finder is most useful as the first step of a workflow, not the last. Treat its output as a fast, exact suggestion you can iterate on: invert the hex, check the contrast, mock the pair, and decide whether you want the strict digital complement or whether a different definition of complementary would serve the design better. With the formula spelled out on the page and the math identical to what the W3C and MDN document for the sRGB color space, every result can be reproduced by hand if you ever need to defend the choice or audit a stylesheet.

Related reading: How to Convert Hex to RGB Manually With One Shortcut.

Related reading: CSS Gradient Colors: From Stops to Production-Ready Code.