色彩學完整指南:對比色、互補色、色相環配色技巧
色彩學完整指南:把色相、明度、彩度拆成可操作變數,解析 HEX/RGB/HSL、色相環 6 種配色法、60-30-10 比例與 WCAG 對比比,教你做出好看又可讀的網頁配色。
作者:褚崇名(Sliven)
本頁目錄
- 先把色彩學拆成三個能動手的變數
- 色相環不是裝飾品,是配色的決策樹
- 冷暖色溫與構圖:為什麼有些顏色會「往前跳」
- 對比色與互補色:同一條光譜上的兩種力道
- 六種常見配色關係,什麼時候用哪一種
- 明度與彩度才是真正決定質感的變數
- 對比比的硬規格:WCAG 1.4.3 怎麼算、怎麼過
- 量化「看起來一樣」這件事:感知均勻色彩空間與 Delta E
- 對比比之外的無障礙地雷:1.4.1、2.3、forced colors 與色覺模擬
- 跨文化配色:當網站要賣到不只一個市場
- 60-30-10 法則與配色角色:把色彩學變成可重複的系統
- 把配色系統寫進 CSS:設計 token 架構與主題切換
- 多品牌與多產品線:色彩系統怎麼 scale
- 行動裝置與暗色模式:配色會在不同載體上變形
- 色彩學不只是好看:它可能影響操作與轉換
- 圖表與資料視覺化的色彩學是另一門功課
- Figma 的工作流程:從色票到交付
- 配色失敗的七種典型
- 系統級的維護陷阱:Token 爆炸與技術債
- 從概念到落地:一份可執行的配色工作流程
- 診斷你的現有配色:三個快速檢查表
- 把色彩學用對,配色就不必再擲筊
你是不是也曾經打開設計稿,盯著 Figma 的色票面板發呆,心裡想的只有一句話:「為什麼別人配出來的色就是高級,我配出來的卻像小學生美勞作業?」
品牌網站的配色往往有同一個現象:大家把色彩學想得太玄,反而漏掉真正能動手的變數。色彩學沒有你想的那麼神秘,它是一套有明確刻度的決策系統。這篇我不講美術史,只講你打開軟體那一刻就能用的東西:色相環到底怎麼讀、對比色跟互補色差在哪、明度彩度如何決定質感、WCAG 的對比比怎麼算才會過,外加一套可以重複套用的配色工作流程,並延伸到設計系統實作、多品牌主題管理、設計與開發交接的具體交付物。
快速總覽:配色好不好看,往往取決於明度、彩度與色相之間的關係。先決定「角色的比例」(背景、區塊、強調各佔多少),再決定色相環上的關係(互補、鄰近、三等分),並讓文字與非文字內容通過各自適用的 WCAG 對比門檻。這套順序記起來,配色就不再是擲筊。若要維護設計系統,再把角色抽成 CSS custom properties,依品牌主題覆寫色票 token,就能在不改結構的前提下切換整體視覺。
先把色彩學拆成三個能動手的變數
同一個顏色可以用 RGB、HEX、HSL 或其他色彩模型表示;各模型的座標定義不同。為了實務判斷,可以先從色相、明暗與鮮豔程度三個面向理解。這三個面向才是你真正能調的旋鈕,色票本身只是結果。多數人卡在配色裡打轉,往往因為把這三個旋鈕混在一起轉,調了半天也不知道動到的是哪一個。
- 色相(Hue):顏色的「身份」,紅、橙、黃、綠、藍、紫;在 HSL 等圓柱座標中通常以 0 到 360 度表示。無彩色的色相則沒有實質意義。這是多數人直覺會先想到的面向,也是最容易過度著墨的面向。
- 明度(Value / Lightness):顏色的亮暗程度;Value 與 Lightness 的精確定義會隨色彩模型而異。把彩色照片轉成灰階,可以協助觀察亮暗分布,但結果仍取決於灰階轉換方法。明暗差距是建立可辨識層次的重要來源。
- 彩度(Chroma)/飽和度(Saturation):兩者都描述顏色的鮮豔程度,但定義並不相同,且會隨色彩模型而異。同一個色相提高彩度或飽和度通常會更鮮明,降低則較接近中性色;視覺效果仍會受明度、背景與面積影響。
換個方式想。你看到一個配色「很亂」,常見原因是多個高彩度顏色同時搶麥克風,不一定只是色相選錯。你看到一個配色「沒層次」,則可能是明度太接近,所有區塊糊成一片。把這兩個直覺記下來,後面所有判斷都從這裡出發。
這裡還有一個實用的小招:眯眼測試。把畫面稍微眯著眼睛看或拉遠觀看,有助於先忽略細節、觀察大面積的亮暗結構。如果這時整個畫面糊成一片、找不到焦點,就回去檢查明度落差;這只是快速目視檢查,仍要搭配對比工具與實際裝置測試。
順帶把三個常被搞混的詞分清楚:在傳統混色術語中,把一個色相加白得到的叫淺色(tint),加黑得到的叫深色(shade),加灰得到的叫濁色(tone)。這些動作會改變明暗與鮮豔程度,但實際數值如何變化取決於色彩空間與混色方法,不能一概視為固定幅度的明度或飽和度調整。把它們對回明暗與鮮豔程度兩個面向,就能更清楚預測變體會把畫面往哪個方向帶。
如果你想從螢幕光(RGB)跨到印刷(CMYK),色相、明暗與鮮豔程度仍是重要的感知面向,但色域、座標與混色原理不同,那是另一篇的事。我這裡先聚焦在螢幕端的網頁配色,跨色域的細節可以另看RGB 與 CMYK 色彩模式指南。
色相環不是裝飾品,是配色的決策樹
色相環(Color Wheel)是把色相依所採用的色彩模型排列成圓;它不是可見光譜本身,因為像洋紅這類非光譜色也會出現在環上。它真正的價值,是用角度描述同一模型中的色相關係,這也是色相環對工程腦最友善的地方。
傳統顏料教學常用十二色相環:紅、黃、藍三原色,加上二次色與三次色。這是方便練習配色關係的簡化模型,不等同於螢幕使用的 RGB 加色系統,也不是唯一的色彩科學模型。
真正實用的是「在色相環上量角度」。兩個色相在環上的夾角,可用來描述鄰近、互補或三等分等關係;夾角大小本身不等於和諧或衝突,結果還會受明度、彩度、面積與情境影響。實務上,不建議把色相環背成圖,而是把它當成一把量角器,再把角度關係與其他視覺變數一起判斷。
色相環的完整操作手法(三原色怎麼推、冷暖怎麼分、實戰配色怎麼套),想看更細的解析,可參考色相環配色完全手冊,這裡把它當前提條件,往下談更關鍵的判斷。
冷暖色溫與構圖:為什麼有些顏色會「往前跳」
色相環除了角度,還可用暖色與冷色來描述相對感受。紅、橙、黃常被視為暖色,藍、部分綠紫常被視為冷色;「前進」或「後退」是會受明度、彩度、面積、背景與文化經驗影響的知覺效果,不是每個畫面都成立的光學定律。
設計上可以把暖冷差異當成建立層次的一種手段,但 CTA 是否醒目,主要仍取決於它與周圍的明度、彩度、面積與位置對比。暖色不必然比冷色搶眼,應在實際版面與目標裝置上測試。
色彩的冷暖也可能影響情緒聯想。暖色常讓人聯想到陽光、食物或溫度,冷色則常讓人聯想到水、科技或安靜,因此不同產業會採用不同傾向;但這些不是固定的產業規則,還會受文化、內容、明度與品牌既有識別影響。先提出色溫方向作為假設,再用目標受眾與實際版面驗證,會比漫無目的地試色票更有依據。
色溫還有一個實戰用法:拿來描述主視覺的「光線感」。偏暖的配色可能讓人聯想到午後陽光,偏冷的配色可能讓人聯想到清晨或陰天,但這些聯想會受內容、文化與個人經驗影響。同樣是賣咖啡,品牌可測試偏暖的米棕調或偏冷的中性灰等方向,再用目標受眾研究確認是否符合手作、製程或穩定度等定位。先回答「這個品牌想呈現什麼光線感」,可協助縮小色票範圍,剩下來的才是色相環上的細修與明度彩度微調。
對比色與互補色:同一條光譜上的兩種力道
這兩個詞在中文圈經常被混著用,但把它們分清楚,是配色判斷升級的第一步。換句話說,差別只有一句:互補色是精確的位置關係,對比色是視覺效果的描述。
互補色(Complementary colors)指的是特定色相環上「正對面」的那一對,夾角為 180 度;具體配對會隨色彩模型而變。紅對綠、藍對橙、黃對紫是傳統 RYB 色相環常見的配對,RGB 加色模型則以紅對青、綠對洋紅、藍對黃為互補。對比色(Contrasting colors)的範圍更廣,只要兩個顏色在視覺上形成明顯落差,都算在內:它可能是色相差距大(但不一定正對面),也可能是明度落差大(黑跟白),或彩度落差大(鮮紅跟灰紅)。
把這個區分記住的實際好處是:當你發現畫面「太衝」,你不會只盯著色相找問題,而會回頭檢查是不是明度或彩度也在疊加衝突。互補色配在一起之所以容易翻車,往往是因為設計者同時把兩邊的彩度都拉滿、面積又各佔一半,等於三重衝突同時爆發。
要讓互補色可用,有兩個老招很有效:一是調整面積比,讓一邊當主角、一邊當點綴(例如大面積的沉穩深藍配上少量橙色按鈕);二是降低其中一邊的彩度或調整明度,把純橙改成米橙、土橙,碰撞感通常會收斂。這兩招後面會再出現,因為它們是常用的配色調整方法。
六種常見配色關係,什麼時候用哪一種
下列六種是常見的配色關係,不是唯一分類,也不是保證和諧的公式。它們可以當成探索色相組合的起點,再依情緒、內容與實際版面調整。
| 關係 | 色相環夾角 | 視覺情緒 | 典型用途 | 主要風險 |
|---|---|---|---|---|
| 單色(Monochromatic) | 同一色相,靠明度彩度變化 | 乾淨、克制、高級 | 極簡品牌、文字優先頁 | 層次不夠時會扁平 |
| 鄰近色(Analogous) | 色相環上的相鄰區域,沒有固定角度門檻 | 和諧、溫潤、自然 | 生活風、食譜、旅遊 | 張力不足,易顯平淡 |
| 互補(Complementary) | 正對面 180 度 | 對立、能量、搶眼 | 活動、促銷、單一強調 | 面積各半會刺眼 |
| 分裂互補(Split-Complementary) | 一色 + 其互補色兩側的色相,偏移角度可調 | 有對比但不僵 | 多數商業網站的甜蜜點 | 三色要分主從 |
| 三等分(Triadic) | 彼此 120 度 | 活潑、繽紛、平衡 | 兒童、教育、娛樂 | 彩度全滿會像馬戲團 |
| 四角色/雙互補(Tetradic) | 兩對互補色;可排成矩形或正方形 | 豐富、有層次 | 內容多、分類多的大型站 | 新手最難駕馭 |
實務上,如果你做的是企業形象或內容站,可以先測試分裂互補或鄰近色;如果你做的是活動登陸頁、需要明顯的按鈕,也可以測試互補關係。這些都只是起點,不保證自動和諧,仍要檢查明度、彩度、面積與內容情境;四角色配色的變數較多,通常需要更明確的角色分工。
明度與彩度才是真正決定質感的變數
這一節是整篇文章我最希望你帶走的觀念。色相決定「這是什麼顏色」,但明度與彩度也會強烈影響質感、層次與可讀性。一個配色被說「高級」或「廉價」,差別常出在這幾個維度如何一起控制,不能用固定比例歸因。
先談明度。一個頁面要看得清楚、要有層次,靠的是明度落差。前景文字與背景的明度要拉開,主標與內文的明度要拉開,主動作按鈕與周圍的明度也要拉開。明度落差不夠,所有資訊會黏在一起,這是新手最常見的死因,也是 WCAG 對比比之所以存在的根本原因(下一節詳談)。
再談彩度。降低彩度通常會讓畫面更克制,但不等於品質一定更高;運動、娛樂或兒童產品可能反而需要較高彩度。先根據品牌語氣與資訊層級設定彩度範圍,再用色彩心理學與實際使用情境交叉檢查,比套用「低彩度就是高級」可靠。
CSS Color Module Level 4 定義了 oklch(),它比 HSL 更接近感知均勻,適合建立較一致的明度與彩度階梯。但它不是「數值與人眼完全線性」的保證,等距數值也不代表所有裝置、背景與色域下的視覺重量完全相同;產生色階後仍要檢查 gamut mapping、對比與實機顯示。
對比比的硬規格:WCAG 1.4.3 怎麼算、怎麼過
前面一直說「明度要拉開」,拉開到底要多少?目前的 W3C Recommendation 是 WCAG 2.2,現行 Recommendation 版本日期為 2024 年 12 月 12 日;其中 Success Criterion 1.4.3 Contrast Minimum 規範文字與背景的最低對比。
對比比(Contrast Ratio)的範圍是 1:1 到 21:1,寫法是「比值:1」。公式是把前景與背景的相對亮度(relative luminance)拿出來比:(L1 + 0.05) / (L2 + 0.05),L1 是較亮的那邊;其中 0.05 來自規範所引用的典型觀看耀光(Typical Viewing Flare)。你不必每次手算,瀏覽器開發者工具、Figma 外掛、線上檢測器都能直接給你比值,但你要知道那個數字是怎麼來的,才不會被工具誤導。
給你一個可以用大腦估的速算感覺:在純白底上,要過 AA 4.5:1 的一般文字,灰階要到 #767676 或更深;符合大型文字定義時,3:1 的界線約為 #949494 或更深(依 WebAIM 的對比整理)。這只適用於純白背景的灰階速查,換成其他前景或背景仍要重新計算。還有一個陷阱要特別注意:彩度高的兩個顏色,例如純紅配純藍,肉眼會覺得色相差異很強,但亮度對比比約為 2.15:1,仍不符合這些文字門檻。記住 WCAG 2.x 的這項計算依據是相對亮度,跟「看起來鮮不鮮」不是同一件事。
| 情境 | AA(基本要求) | AAA(進階) |
|---|---|---|
| 一般文字(未達大型文字定義) | ≥ 4.5:1 | ≥ 7:1 |
| 大型文字(≥ 18pt 一般字重、≥ 14pt 粗體,或 CJK 等效尺寸) | ≥ 3:1 | ≥ 4.5:1 |
| 辨識元件、狀態與圖形所必要的非文字視覺資訊 | 與相鄰顏色 ≥ 3:1 | SC 1.4.11 無另訂 AAA 門檻 |
這張表對應 WCAG 2.2 的文字與非文字對比要求。一般文字至少 4.5:1,大型文字至少 3:1,另有標誌、非必要文字等例外。UI 元件與圖形的非文字對比則要看 SC 1.4.11:只有辨識元件、狀態或理解圖形所必要的視覺資訊,才要求與相鄰顏色至少 3:1;裝飾性或非必要的邊界不一定適用。WCAG 是否構成法律或採購要求,則依司法管轄、標案與契約而定。
還有一個常被漏掉的點:對比要求不只管文字。用來辨識控制項、狀態或圖形內容的視覺資訊要與相鄰顏色達 3:1;作者自訂且用來顯示鍵盤焦點的指示器,也要在聚焦狀態下與相鄰顏色保持足夠對比。按鈕若已由文字或其他線索清楚辨識,純裝飾邊框則不一定需要單獨達到 3:1。
量化「看起來一樣」這件事:感知均勻色彩空間與 Delta E
前面提過 oklch 比 HSL 更接近感知均勻,這只是「用數字做配色」的起點。做一整套設計系統時,仍要檢查「藍色 100、200、…、900」各階的視覺距離是否符合用途。HSL 的數字與人眼感知並不一致,例如同樣 L=50% 的黃與藍,看起來亮暗可能差很多。
感知色彩空間(OKLCH/OKLab、CIELAB)與 Delta E(ΔE)可協助描述兩色差異,數字越小通常越接近。不過可辨識門檻會受 Delta E 公式、媒材、觀察環境、顏色區域與觀察者影響,不能把單一數字當成所有情境的合格線。團隊應先固定色彩空間、公式與顯示條件,再建立自己的容許範圍。
把 Delta E 用在色階時,可以先設定相鄰色階的目標距離,再依文字對比、背景用途與狀態層級調整;沒有一個數值區間適用所有公式與產品。演算法產色只是起點,最終仍要逐一驗證對比、色域與實際介面。
給你一個快速體檢:把整組色階攤開,使用同一種 ΔE 定義比較相鄰兩階。如果距離忽大忽小,先確認是否符合文字、背景或狀態層級的刻意需求;若沒有用途上的理由,再調整色階。色階不必機械式等距,但每個差異都應能由用途與測試結果說明。
對比比之外的無障礙地雷:1.4.1、2.3、forced colors 與色覺模擬
WCAG 1.4.3 的文字對比只是色彩無障礙的一部分。同一份規範還有 1.4.1 Use of Color(顏色不能是傳達訊息的唯一方式)與 2.3.1 Three Flashes 等要求,解說見 WCAG 2.2 Understanding 文件。
1.4.1 常見問題有三種。第一,表單錯誤只把輸入框邊框變紅,沒有圖示或文字說明。第二,超連結只靠色相與正文區別,且未與周圍文字達 3:1 或提供 hover/focus 等額外視覺提示。第三,圖表只用色相區分類別,沒有形狀或標籤輔助。可先把畫面轉成灰階檢查,但仍要搭配對比工具、鍵盤操作與輔助技術測試。
2.3 那條更少人留意,會踩雷的是動態設計。WCAG 2.2 SC 2.3.1 要求頁面內容不得在任何一秒內閃爍超過三次,除非閃爍低於一般閃光或紅色閃光門檻;門檻還會考量亮度或色彩變化與閃爍區域大小,不能只看頻率。人對飽和紅色閃爍更敏感,因此規範另有 紅色閃光測試。這條對首頁 hero 動畫、活動登陸頁的特效特別相關;自動輪播或視差效果只有在構成規範所定義的閃爍時才適用。
APCA(Accessible Perceptual Contrast Algorithm)是一套仍在發展的對比方法,但截至 2026 年,WCAG 3 工作草案仍未定稿、且明確表示 WCAG 3 不會取代 WCAG 2,最終採用哪一套對比演算法也還沒定案,不能說 WCAG 3 已導入 APCA,現況可對照 2026 年 3 月的 WCAG 3.0 工作草案。實務上可把 APCA 當研究或內部比較工具,但對外合規仍應依適用的 WCAG 2.2 要求。
Windows 的對比佈景主題可讓瀏覽器進入 CSS forced colors 模式,由瀏覽器把部分作者色彩替換為系統色;macOS 的「增加對比」是另一種輔助顯示設定,不能視為同一套 forced colors 機制。forced colors 下應優先保留語意化 HTML 與預設的 forced-color-adjust: auto,需要自訂時可使用 HighlightText、ButtonFace 等系統色彩;不要為了保留品牌色而全面設成 forced-color-adjust: none。做色彩系統時,應分別在目標平台的對比設定下重驗按鈕、輸入框與連結。
色覺模擬是成本較低的健檢之一。Chrome DevTools 的 Rendering 面板有「Emulate vision deficiencies」,能模擬包含 Deuteranopia、Protanopia、Tritanopia、Achromatopsia 在內的數種色覺缺陷。可定期跑模擬並截圖比對,協助找出只靠顏色傳達的訊息;但模擬不能取代與實際使用者測試。
跨文化配色:當網站要賣到不只一個市場
如果你的網站要跨出台灣、做進外語市場,配色的「語意」會跟著變動,這件事常被當成品牌問題,其實是資訊架構問題。同一個色相在不同市場指向不同情緒,硬把一套色票打天下,輕則違和、重則傳達錯誤訊息。
幾個常見但不能一概而論的例子先記下來。紅色在部分東亞情境會連結喜慶或上漲,在許多西方介面也常用於危險、停止或赤字;白色可能連結東亞部分喪葬傳統,也常出現在西式婚禮與純潔意象;綠色常被用於自然或安全,在部分伊斯蘭文化情境也有宗教意涵,在中國證券市場慣例中則常表示下跌。這些聯想會隨國家、產業與情境改變,不能只靠文化刻板印象替色,應以目標市場研究校準語意色。
金融與數據產品尤其不能用單一文化假設決定漲跌色。不同市場、交易所、資料供應商與產品慣例可能相反,應研究目標使用者並讓標籤、符號與數值共同傳達狀態。把漲跌色抽成獨立 token、與品牌色脫鉤,能降低在地化時的修改成本。
實作上可把「品牌色」與「語意色」分層管理,並按 locale 覆寫。CSS custom properties 可定義 --semantic-up 這類變數,再依語言或區域設定切換。多語系頁面若使用 hreflang,每個語言版本都要列出自己以及所有其他語言版本,互相雙向回指;缺少回傳連結時,Google 可能忽略未正確互引的標記(見 Google Search Central 的多語系網站說明)。URL 與語言對應也要保持一致,進一步可參考多語系 SEO 指南。
60-30-10 法則與配色角色:把色彩學變成可重複的系統
上面談的都是「怎麼選顏色」,但真正讓配色可重複、可交接、可 scale 的,是把顏色指派成「角色」。這是設計系統(Design System)的核心思想,也是業餘與專業配色的分水嶺。
一種入門的角色分配經驗法則是60-30-10:概念上讓主導色佔最大面積(通常是中性的背景與大面積底),次要色承接區塊與表面,強調色只用在少量重點。60%、30%、10% 不是無障礙標準或必須精算的門檻,它的用途是強迫畫面分出主從;若強調色用得太多,就可能失去「強調」的作用。
再進一步,把顏色分成四種角色,每種角色有明確職責:
- 品牌色(Brand / Primary):來自品牌識別的色彩,用在 Logo、關鍵強調、導覽列重點。數量應依品牌識別需求控制,並維持清楚的主從。
- 行動色(Action / Accent):用在 CTA 按鈕、加入購物車、立即預約等互動重點。它可以沿用品牌色,也可以獨立設定;關鍵是搭配形狀、文字與互動狀態,讓使用者知道這裡可以操作。按鈕的對比與情緒設計,可另看CTA 行動呼籲按鈕設計指南。
- 中性色(Neutral / Surface):背景、文字、邊框、分隔線的主要分擔者。色階數量應由實際用途決定,文字與背景的組合則要逐一驗證適用的對比門檻。
- 語意色(Semantic / Status):介面常以綠、紅、琥珀、藍分別表示成功、錯誤、警告與資訊,但這不是固定標準,也不能只靠色相傳達狀態。若與品牌色重疊,應用文字、圖示、位置或其他視覺線索保持語意清楚。
如果你的網站要同時容納多個產品線或子品牌,這套角色制還能往外加一層:可以先共用中性色與語意色,只覆寫品牌色與行動色;若特定品牌或市場有不同的無障礙、文化或產品需求,再覆寫相應角色。這通常比各自發展互不相容的色票容易維護。大型網站常見的「一個設計系統、多個主題」做法,本質就是把色彩當成可以繼承與覆寫的變數來管理。
把角色想清楚之後,選色的順序就會倒過來:你不是先挑「我要用什麼顏色」,而是先決定「這個畫面需要幾個角色、各佔多少比例」,再回頭用前面色相環的關係去填色。這個轉向是配色從藝術變工程的關鍵。品牌主色本身怎麼挑,是另一門學問,可以搭配品牌選色策略一起看。
把配色系統寫進 CSS:設計 token 架構與主題切換
色票選完之後,下一步是把它變成工程系統。多數專案卡在這裡,因為設計師交了一堆 HEX,開發直接寫死在每個元件,日後要改主色就得翻遍整個 repo。常用做法是先把色票抽成設計 token(Design Tokens),再用 CSS custom properties 管理,主題切換時只要覆寫 token 值,引用它的元件就會跟著變。
一個典型的色彩 token 架構長這樣:
:root {
/* 品牌色 */
--color-brand-primary: oklch(0.55 0.18 250);
--color-brand-secondary: oklch(0.65 0.15 340);
/* 行動色(可能等於品牌色,也可能獨立) */
--color-action-default: oklch(0.55 0.18 250);
--color-action-hover: oklch(0.48 0.20 250);
--color-action-active: oklch(0.42 0.22 250);
/* 中性色階(依實際用途增減) */
--color-neutral-50: oklch(0.98 0.01 250);
--color-neutral-100: oklch(0.94 0.01 250);
--color-neutral-200: oklch(0.88 0.01 250);
--color-neutral-300: oklch(0.78 0.01 250);
--color-neutral-400: oklch(0.65 0.01 250);
--color-neutral-500: oklch(0.50 0.01 250);
--color-neutral-600: oklch(0.40 0.01 250);
--color-neutral-700: oklch(0.30 0.01 250);
--color-neutral-800: oklch(0.22 0.01 250);
--color-neutral-900: oklch(0.16 0.01 250);
/* 語意色 */
--color-semantic-success: oklch(0.65 0.15 145);
--color-semantic-error: oklch(0.55 0.20 25);
--color-semantic-warning: oklch(0.70 0.18 85);
--color-semantic-info: oklch(0.60 0.18 250);
/* 文字色(由中性色階衍生,仍需依實際背景驗證) */
--color-text-primary: var(--color-neutral-900);
--color-text-secondary: var(--color-neutral-600);
--color-text-tertiary: var(--color-neutral-500);
--color-text-inverse: var(--color-neutral-50);
/* 背景色 */
--color-bg-primary: var(--color-neutral-50);
--color-bg-secondary: var(--color-neutral-100);
--color-bg-tertiary: var(--color-neutral-200);
}
/* 暗色模式覆寫 */
[data-theme="dark"] {
--color-text-primary: var(--color-neutral-100);
--color-text-secondary: var(--color-neutral-300);
--color-text-tertiary: var(--color-neutral-400);
--color-text-inverse: var(--color-neutral-900);
--color-bg-primary: var(--color-neutral-900);
--color-bg-secondary: var(--color-neutral-800);
--color-bg-tertiary: var(--color-neutral-700);
}
/* 子品牌主題覆寫 */
[data-brand="b"] {
--color-brand-primary: oklch(0.50 0.20 180);
--color-action-default: oklch(0.50 0.20 180);
}
這個架構的好處是單一來源真實:所有元件引用 token,不改 token 值就不會破壞一致性。暗色模式可用 data-theme、品牌則用獨立的 data-brand 屬性覆寫 token,兩者才能同時套用,不用改任何元件 CSS。Figma 的「Variables」功能(2023 年推出)也支援類似邏輯,你可以在設計端定義 collections 與 modes,再匯出 JSON 供 Style Dictionary 這類工具轉成 CSS。
命名規範也有兩個實戰建議。第一,用語意命名(如 color-text-primary)而非視覺命名(如 color-gray-900),這樣未來換色系統時,不必改所有變數名稱。第二,把色票(raw color)與用途(semantic token)分開,例如 --color-blue-500 是色票,--color-action-default 是用途 token,元件永遠引用用途 token,色票改名或換色時影響範圍最小。
多品牌與多產品線:色彩系統怎麼 scale
如果你的公司有多個品牌或產品線,色彩系統的維護成本會隨變體增加。常見的失敗模式是每個品牌各自發展互不相容的色票,導致共用元件的同一項修改必須重複處理。常用的 scale 策略是「核心共用、品牌覆寫」。
第一層是核心設計系統,定義所有品牌共用的結構:元件(按鈕、輸入框、卡片)、間距系統、字階、格線。色彩這裡只定義「角色」:brand-primary、action、neutral、semantic,但不給具體色值。
第二層是品牌主題層,每個品牌覆寫角色色值。品牌 A 的 brand-primary 是藍,品牌 B 是橙,但兩者都用同一個按鈕元件,只是引用的 --color-brand-primary 不同。實作上可以用 CSS modules、Sass maps 或 JavaScript 動態注入,看你的技術棧而定。
第三層是產品線變體,同一品牌下可能有 Enterprise、Pro、Free 三個版本,它們共用品牌色但中性色階可能不同(Enterprise 用更深沈的灰)。這時候可以在品牌主題下再切一層變體,繼承品牌色、覆寫中性色。
給你一個具體結構範例:
/* 核心:只定義角色,不給值 */
:root {
--color-brand-primary: /* 由品牌層覆寫 */;
--color-brand-secondary: /* 由品牌層覆寫 */;
--color-neutral-50: /* 由品牌層覆寫 */;
/* ... 其他角色 */
}
/* 品牌 A */
[data-brand="a"] {
--color-brand-primary: oklch(0.55 0.18 250);
--color-neutral-50: oklch(0.98 0.01 250);
/* ... */
}
/* 品牌 B */
[data-brand="b"] {
--color-brand-primary: oklch(0.50 0.20 30);
--color-neutral-50: oklch(0.96 0.01 30);
/* ... */
}
/* 品牌 A - Enterprise 變體 */
[data-brand="a"][data-variant="enterprise"] {
--color-neutral-50: oklch(0.94 0.01 250);
/* 更深的中性調,但品牌色不變 */
}
這個架構的成本是前期要多抽一層抽象,但長期收益極大:新增品牌只要新增一個 [data-brand="..."] 區塊,不用改任何元件;品牌色退役或合併時,影響範圍只有該品牌的 token,不會波及其他品牌。Design Tokens Community Group(W3C Community Group)正在標準化 token 格式,未來跨工具的 token 交換會更容易。
行動裝置與暗色模式:配色會在不同載體上變形
你配的色不會只出現在你的螢幕上。Statista 的長期統計顯示,全球網頁流量長期有超過半數來自行動裝置。因此配色需要在不同尺寸、亮度、面板與環境光下測試,而不能只看單一桌機螢幕。
第一,對比比不要只壓線。WCAG 的數值是合規門檻,不保證所有戶外環境、面板與字型都同樣好讀;在不破壞設計的前提下可適度高於門檻,並以實機驗證。第二,高彩度色要在目標裝置上檢查,因為不同面板的色域、亮度與色彩管理可能讓觀感改變,不能預設小螢幕一定更刺眼或固定要降一階彩度。第三,層次不能只靠色相或彩度,還要同時檢查明度、尺寸、間距與文字標示。更多版面層次的考量可以看響應式網頁設計。
暗色模式(Dark Mode)不是把顏色直接反相。純白配純黑的對比比是 21:1,但是否刺眼會受字級、字重、環境光與使用者差異影響;灰白文字可以是設計選擇,仍要符合適用門檻,不能把 #E0E0E0 當成通用標準(見 WebAIM 的對比說明)。高彩度顏色在暗底上的觀感也可能改變,因此品牌色的明度與彩度要依背景、用途與對比結果逐一調整,而不是一律降低固定階數。設計系統可用語意 token 為亮色與暗色模式提供不同值。
實作暗色模式時,純黑(#000000)在能關閉個別像素的 OLED 面板上可能較省電,但它不會因此產生所謂的「色域溢出」。純黑或近黑背景各有不同的對比與觀感,應依產品定位、內容密度與目標裝置實測,沒有一個通用的 OKLCH 明度值。
色彩學不只是好看:它可能影響操作與轉換
從轉換優化的角度來看,色彩可能影響可辨識性、操作與品牌感受,但對流量、名單或成交的實際效果不能只由配色推定,仍要用可用性研究與轉換資料驗證。這點可以另看企業形象網站的價值分析。
先看連結。一個超連結如果跟正文顏色太接近、又沒有底線,使用者可能把它當成普通文字而錯過下一步。這是可用性與轉換問題,不應進一步把分析工具中的停留或跳出率直接說成 Google 排名訊號。讓連結以清楚的顏色、底線與 focus/hover 狀態辨識,是成本很低的改善。
再看 CTA。很多業主糾結「按鈕要紅的還是綠的」,關鍵通常是它跟周圍環境的對比、文案、位置與互動狀態,而不是色相本身。把頁面截圖轉成灰階,可初步檢查主 CTA 是否仍有明顯層級;最終仍要用點擊與轉換資料驗證。
看視覺動線。部分文字密集頁面的眼動研究會觀察到類似 F 型的掃視模式,但使用者路徑會隨版型、任務、內容與裝置改變,Z 型也不是所有頁面的固定規律。高對比、位置、尺寸與留白都可能影響元素的顯著性,暖色則不必然最先被看見。把重要轉換訊息放在容易辨識的位置能改善可用性,但不能據此宣稱是 Google 排名訊號。想從轉換漏斗的角度把按鈕與表單的位置想清楚,可以接著看登陸頁轉換優化指南。
表單與狀態訊息是色彩影響操作的重要場景。輸入欄位的 focus 態如果沒有清楚的視覺回饋,使用者可能不確定目前焦點;錯誤訊息若只用紅色、又跟裝飾色混在一起,也可能不易辨識。把成功、錯誤、警告、聚焦等狀態視為獨立任務,依適用規範檢查對比,並加上圖示或文字輔助,別只靠顏色傳達。這能改善無障礙與可用性;是否提高轉換率仍應用資料驗證。
圖表與資料視覺化的色彩學是另一門功課
如果你的網站會放數據圖表(後台儀表板、銷售報表、案例分析),還要考慮資料的尺度與語意,因為圖表的顏色可能承載類別、順序或正負方向,而不只是好看。
圖表配色可先分三種任務。類別型資料(彼此沒有大小關係的分類)適合用彼此可區分的類別色盤,不能只要求彩度接近;順序型資料(有大小或時間先後)適合用明度或感知亮度單向變化的順序色盤,可以是單一色相,也可以是經過設計的多色相色盤;發散型資料(有明確中點、正負意義,例如年增率)適合讓兩側從中性中點往不同方向展開,中點可依背景與語意選擇淺色、深色或低彩度色。未經校正的彩虹色階通常不適合表示連續順序,因為其感知亮度不單調,還可能製造不存在的視覺邊界。
第二個重點是色覺差異。紅綠辨色障礙是常見類型,但比例會受族群、性別與統計口徑影響,不宜用單一數字概括所有使用者。圖表不要只用紅綠區分「好」與「壞」;可加上形狀、標籤、網底紋路或位置,並以實際模擬與使用者測試檢查。
這裡給你一個跨界的小提醒:圖表的網格線、座標軸、標籤這些輔助元素通常應降低視覺權重,讓資料點維持清楚層級;不一定只能用中性灰,但要確保文字與必要圖形達到對比要求。若網格線比資料更鮮明,就容易讓雜訊跟訊號搶麥克風。
Figma 的工作流程:從色票到交付
現代設計工具讓配色的可重複性大增,但多數團隊只用到 Figma 色票面板的皮毛。給你一份從色票到交付的實用流程,減少設計與開發之間的資訊落差。
第一步,在 Figma 建立 local styles 或 variables。別用隨意選取的色塊當色票,應該每個色票都對應一個命名:Brand Primary、Action Default、Neutral 100、Semantic Success。Figma 2023 年釋出的 Variables 功能可用 collections 與 modes 表示亮暗主題、裝置尺寸或品牌等不同情境;可用的 mode 數量會依方案而異。
第二步,把所有元件的文字、填色、邊框都改為引用 Styles 或 Variables,不要寫死 HEX。這樣做有兩個好處:未來改色票,所有引用該色票的元件會跟著變;開發要查某個顏色,在 Figma 右側面板就能看到它的名稱,不用猜對應的色值。
第三步,在 Dev Mode 的 Inspect 面板確認開發看到的是什麼。Code section 會產生對應的程式碼片段,套用到所選物件的 Variables 也會出現在片段中;Figma 可能為了符合 CSS 語法而正規化變數名稱。你要做的是設定並核對 code syntax,例如 Figma 變數叫 brand-primary,CSS 使用 --color-brand-primary,減少翻譯成本。
第四步,匯出色票表。在提供 modes 的 Figma 方案中,可於 Variables view 對單一 mode 選「Export mode」,或對 collection 選「Export modes」,匯出符合 Design Tokens Community Group 格式的 JSON;也可透過 Variables REST API 或 Plugin API 串接,操作細節見 Figma Learn 的 Modes for variables 說明。這個 JSON 可交給 Style Dictionary 等工具產出 CSS、Sass 或平台程式碼;Tokens Studio 則是另一種管理與同步 Figma 設計 token 的工作流,實際支援範圍取決於方案與設定。
第五步,在交付文件寫下「色彩約束」。除了色票表,還要告訴開發:哪些地方必須用語意色(錯誤、成功)、哪些地方可以用品牌色、哪些地方必須用中性色。這份約束比色值本身重要,因為它防止「某個工程師覺得這個按鈕用紅色比較好」的隨意覆寫。
給你一個交付檢查清單:
- 所有色票都有命名,不是「Untitled Color」
- 所有元件都引用 Styles/Variables,不寫死色值
- 亮色與暗色兩套變數集都定義完畢
- 導出的色票 JSON 與 Figma 變數名稱一致
- 交付文件說明角色用途(品牌/行動/中性/語意)
- 所有對比比都達 WCAG AA(附檢測報告或螢幕錄影)
配色失敗的七種典型
理論講再多,不如直接看「會在哪裡死」。接下來這七種是品牌網站上反覆出現的失敗模式,每一種都附上怎麼救。記住,這些是經驗累積下來的通用陷阱,不是某個具體客戶的還原。
- 全部高彩度:每個區塊都用飽和色,畫面像調色盤打翻。救法:把主導面積全部換成中性低彩度,只保留一個彩度熱點當強調。
- 灰字配灰底:設計稿上看得到,上手機可能看不清。救法:量對比比,一般文字至少 4.5:1,符合大型文字定義者至少 3:1,並留意規範例外。
- 互補色各佔一半:紅配綠、藍配橙,兩邊面積一樣大,視覺打架。救法:套用 60-30-10,讓一邊縮成點綴。
- 漸層缺乏控制:色標過多、位置不當或跨越不合適的色彩空間,都可能出現髒帶或不自然邊界。救法:依目的精簡色標,並檢查插值色彩空間、明度走向與實機顯示;沒有固定的色相數量上限。
- 強調色用太氾濫:CTA、標題、圖示、邊框全用同一個品牌色,結果沒有清楚主次。救法:把最高視覺權重保留給主要動作或少數重要資訊;強調色不必只用於可點擊元素。
- 語意只靠顏色區分:品牌色與成功色相同時,如果沒有文字、圖示或位置線索,使用者可能分不清裝飾與狀態。救法:加入非顏色線索,必要時再調整明度、彩度或色相。
- 暗色模式直接反相:直接反轉亮色模式的色值,可能破壞原有層級、語意與品牌色對比。救法:為暗色背景重新驗證每個語意 token 的明度、彩度與對比;灰白文字或降低品牌色彩度只是選項,不是固定規則。
這七個解法反覆使用同一組工具:面積比例、明度落差、彩度控制與角色分工。配色可用的核心動作不多,差別在於何時採用哪一種。更多網站視覺常見問題,可交叉比對網頁設計常見錯誤。
系統級的維護陷阱:Token 爆炸與技術債
配色不只是設計問題,長期來看也是維護問題。以下是三個大型網站常見的系統級陷阱。
第一個陷阱叫「Token 爆炸」。如果每個新功能都新增一個專用色,久而久之就會累積大量命名相近、重複或已廢棄的 token。對策是建立新增、命名與棄用規則:角色與色階數量要由產品用途決定,而不是套用固定上限;任何新需求先問「能不能用現有角色」,不行才考慮新增。
第二個陷阱叫「視覺與語意分離失效」。某天工程師為了趕功能,直接在元件裡寫死一個紅色 #FF0000,沒有用 --color-semantic-error。這個硬編碼色值可能在日後修改語意色時被漏掉。對策是在 CI 加入適合團隊規範的檢查,或用 stylelint 規則偵測未引用 token 的顏色宣告。
第三個陷阱叫「跨工具漂移」。設計師在 Figma 更新了色票但沒有同步前端,或前端改了 token 卻沒有同步回 Figma,兩邊的品牌色就可能逐漸不同。對策是建立單一來源真實:色票的定義放在一個符合團隊流程的 token 檔或服務中,Figma 與前端都由同一份資料同步或產出。Delta E 只有在指定色彩空間、公式與觀看條件後才有意義,不應用任意數值描述漂移。
從概念到落地:一份可執行的配色工作流程
把前面全部串起來,給你一份可重複的配色流程。它不是唯一的路,但能把主要判斷點排成較容易檢查的順序。
- 鎖定品牌色與情緒定位:先決定一個主品牌色,並寫下這個網站要傳達的情緒(沉穩?活潑?專業?溫暖?)。情緒會決定你待會用哪一種配色和諧關係。
- 挑配色關係:依情緒查前面那張六種關係的表,選定一種(例如分裂互補)。這一步只決定色相之間的角度,不挑色票。
- 展開中性色階:用 oklch 或設計工具依實際用途建立中性色階,作為背景、文字、邊框的池子。
- 分配角色比例:可借用 60-30-10 的主從概念,把中性、次要、強調的位置標出來,先有骨架再填色,不必把比例當成硬規格。
- 填入色票並調明度彩度:才開始挑具體顏色。填完後回頭檢查明度落差與彩度一致性,該壓的壓、該拉開的拉開。
- 驗對比比:依 WCAG 1.4.3 檢查一般文字 4.5:1、大型文字 3:1;另依 1.4.11 檢查辨識 UI 元件、狀態與圖形所必要的非文字資訊是否與相鄰色達 3:1。可在不破壞設計的前提下高於最低門檻,但沒有通用的 5:1 或 6:1 額外標準。
- 做行動版與暗色模式對照:在手機與暗色模式中依實際背景重新調整明度、彩度與語意 token,並驗過適用的對比門檻才定稿。
- 抽成 CSS token 架構:把色票轉成
--color-*custom properties,定義角色(brand/neutral/semantic/action)。 - 交付文件與驗收:導出色票 JSON、寫下色彩約束、附上對比比檢測報告,確認開發收到的資訊完整。
這份流程的好處是每一步都有明確的驗收標準,你可以交給團隊、可以重複執行,不必每次配色都從感覺重新開始。如果你正在找幫你快速產生與管理色票的工具,配色工具整理與網站配色方案指南可以接著看;想從整體版面而非單一色彩切入,那麼網頁版面設計指南與UI/UX 設計指南是比較好的下一步。
診斷你的現有配色:三個快速檢查表
給你三個快速診斷,用來判斷你的現有配色系統是否健康;實際所需時間會依頁面與 token 數量而異。
檢查一:角色一致性
打開你的網站首頁,用開發者工具或 Figma,把所有顏色分成四堆(品牌、行動、中性、語意)。沒有適用所有產品的固定色值上限;真正的警訊是用途相同卻出現重複或近似色,或某些顏色無法歸類。下一步是確認它們是否有獨立用途,再決定保留、合併或棄用。
檢查二:對比比覆蓋率
用 axe DevTools 或 WAVE 逐頁檢查代表性頁面,因為瀏覽器外掛不等於自動掃描整個網站。一般文字低於 4.5:1、符合大型文字定義者低於 3:1,或必要的非文字視覺資訊低於適用門檻,都應列入修正;不能用「超過幾處」才算有問題。自動工具也無法涵蓋所有狀態與背景影像,仍要人工檢查互動狀態。
檢查三:Token 重複率
如果你的專案已經用 CSS custom properties,跑一次簡單的 script 統計哪些 --color-* 變數實際被使用。未被引用不一定代表可以直接刪除,它也可能供執行期主題、外部套件或尚未納入掃描的檔案使用;先確認依賴與棄用流程,再移除真正無用的 token 或合併語意重複的角色。
把色彩學用對,配色就不必再擲筊
回到一開始那個問題:為什麼別人配的色就是比較高級?關鍵不只在天分,也在是否知道自己正在調整哪個面向。多數人卡在色相裡打轉,以為換個顏色就會變好看;但質感還受明度與彩度影響,可用性也要看對比、非顏色線索與實際測試,能不能重複則仰賴角色分工。把這幾件事分開練,判斷會更有依據。
色彩學是一套有刻度的系統,不是一門靠靈感的藝術。色相環給你關係、明度彩度給你質感、WCAG 給你底線、60-30-10 與角色給你紀律。系統層面再抽一層 CSS token,多品牌主題就能在不改元件的前提下切換。下一次打開色票面板,你會知道自己轉的是哪一個旋鈕,不必再對著幾百個 HEX 號碼發呆。
- 今天就挑一個你手上的頁面,把所有顏色分成「品牌、行動、中性、語意」四種角色,數一下各佔多少面積。
- 用開發者工具或檢測器量每一段文字的對比比,依一般文字、大型文字與例外條件標出不符合適用門檻的組合。
- 挑一個彩度最高的區塊,調整彩度後比較畫面層級,並確認品牌語氣與可辨識性是否更合適。
- 把這些色票抽成 CSS custom properties,定義成
--color-brand-primary這類語意命名,為未來的主題切換做準備。
把這四個動作做完,你會更清楚看見色彩學不是玄學,而是一組可以動手、測量與驗證的變數。
常見問題
HEX、RGB、HSL 差在哪裡?做網頁用哪一種?
什麼是 60-30-10 配色比例原則?
對比比 4.5:1 是什麼意思?
深色模式可以直接套用亮色模式的色票嗎?
操作步驟
- 定三個旋鈕把品牌主色寫成 HSL,先固定色相與彩度、只調明度,生出一條從淺到深的明度階梯,作為後續所有配色的基底。
- 用灰階除錯把網站首頁截圖轉成灰階,如果分不出主從,先別換顏色,先把明度對比拉開,這一步通常能解決一半以上的「看起來怪」。
- 套 60-30-10 面積把主導色壓到低彩度中性背景、次要色給結構元件、強調色只留給 CTA 與連結,照片不計入比例。
- 跑一次手機對比度檢查用瀏覽器開發者工具量每段文字的對比度,把 AA 的 4.5:1 當下限、往上抓一段安全邊際,確保手機戶外強光下還讀得清楚。