平面設計

黑色色碼不只 #000000:黑色背景、文字搭配與印刷黑一次看懂

黑色在 WCAG 的對比公式裡拿到理論上的滿分,純黑 #000000 配純白是 21:1,已經是公式能算出的最大值。可是 Google 替 Material 深色主題挑的底色,卻是帶一點灰的 #121212,不是純黑。

色碼表通常只告訴你黑色的 HEX 是 #000000,沒說這個值該放在哪裡,像是大面積的黑色背景要用純黑還是近黑、黑色文字壓在彩色按鈕上看不看得清楚,或是螢幕稿交給印刷廠之後黑色會變成什麼樣子。這幾個問題都有算得出來的依據,不必靠感覺挑。

螢幕上的黑色在 RGB 裡是三個通道全部歸零,印刷稿裡的黑色卻有單色黑與四色黑兩種做法,兩邊的規則並不相通,同一個黑色在不同場合也就得換不同的寫法與判斷。

黑色在網頁色碼與印刷稿上的標示方式

同一個純黑,在網頁與印刷稿裡有好幾種寫法,常用的整理在下表,色碼可以直接複製。

寫法範例說明
HEX 六位#000000最通用的寫法
HEX 三位簡寫#000與 #000000 等值
色名blackCSS 命名顏色,對應 #000000
RGBrgb(0, 0, 0) 或 rgb(0 0 0)三個通道全部為 0
HSLhsl(0, 0%, 0%)明度 0% 即為黑
半透明黑(HEX)#00000080最後兩位是透明度,約 50.2% 不透明
半透明黑(RGB)rgb(0 0 0 / 50%)斜線後接透明度,剛好 50%
CMYK 單色黑K100只用黑墨一個版
CMYK 四色黑黑墨加少量其他色墨比例向印刷廠確認

黑色和白色在寫法上有一個關鍵的不同。RGB 的黑與白都很單純,黑是三個通道全部歸零,白是全部拉滿;到了 CMYK,白色是四色都不上墨,黑色卻要真的上墨,而且有單色黑 K100 與四色黑兩種做法。

網頁寫法有幾個細節值得記。HEX 的三位簡寫是把每一位數重複一次,所以 #000 等於 #000000,黑色剛好可以用簡寫帶過。色名 black 在 W3C 的《CSS Color Module Level 4》命名顏色表裡,對應的就是 #000000,也就是 rgb(0, 0, 0)。HSL 的明度(lightness)只要是 0%,結果就是黑,色相與飽和度填什麼都一樣,所以 hsl(0, 0%, 0%) 與 hsl(200, 80%, 0%) 是同一個黑。

做遮罩,或是在圖片上疊字時,常會用到半透明的黑。CSS 的 HEX 可以多寫兩位當透明度(alpha),00 代表完全透明,ff 代表完全不透明;#00000080 的 80 是十六進位,換算成 128/255,約等於 50.2% 不透明。rgb 寫法則改用斜線接透明度,rgb(0 0 0 / 50%) 剛好是 50%。

印刷稿的黑色,單色黑 K100 只用黑墨一個版,四色黑則是在黑墨之上再加少量的青、洋紅、黃墨。Adobe 的 InDesign 說明文件寫到,色票面板裡的 Black 色票代表 100% 的單色黑;大面積的黑色則建議改用四色黑。四色黑的成分比例會隨印刷廠與紙張而不同,沒有一組通用的百分比,要向印刷廠確認。

還有一件容易被忽略的事,螢幕上的黑也不是真正的零亮度。W3C 的《CSS Color Module Level 4》在描述 sRGB 色彩空間時,把白色亮度寫成 80.0 cd/m²,黑色亮度寫成 0.20 cd/m²。換句話說,#000000 對應的是這個螢幕能呈現的最暗,並不是完全不發光,實務上把它當成螢幕上最黑的那一點使用就夠了。

純黑對比最高,深色主題底色卻取近黑 #121212

純黑和近黑要選哪一個,得看面積。這裡的建議是,大面積的黑色背景、整頁的深色模式底色取近黑,單色標誌與小面積的色塊才用純黑。這是配色建議,不是規範,不過背後有 Google 的設計說明可以對照。

黑色背景不等於 #000000。Google 的 Material 深色主題把介面最底層定在 #121212 的深灰,而不是純黑,理由與文字在深色背景上的顯示方式有關,也和還能不能表現層次有關。

純黑底配純白字的對比最高,邊緣卻容易暈開

W3C 的 WCAG 2.2 說明文件把對比比值定義成 (L1 + 0.05) / (L2 + 0.05),L1 是較亮那一色的相對亮度,數值範圍從 1:1 到 21:1。純黑的相對亮度是 0,純白是 1,代入算出來剛好是 21.00,所以純黑底配純白字是對比公式的最大值,沒有任何組合能再往上。

只是對比最高,不代表最好讀。Google 的 Material 深色主題教學指出,高強調的文字不用純白,因為 #FFFFFF 這種亮色放在深色背景上會產生視覺上的「震動」,文字的光線看起來也像在深色背景上暈開、模糊,反而影響閱讀。要分清楚的是,這是 Google 的設計說明,WCAG 的對比標準只看亮度比值,並沒有這樣的規定。Material 的做法是文字仍以白色為底,再用不透明度把亮度壓低。

至於耗電,Google 的 Android 開發文件把「降低耗電」列為深色主題的好處,但原文限定了條件,幅度取決於裝置的螢幕技術。所以不能說用黑色一定比較省電。文件同時列出的另外兩項好處,對低視力與對強光敏感的使用者較友善、低光環境下較好用,倒是沒有這個前提。

近黑色碼的常見取值與用途

近黑沒有標準名稱,設計師手上常用的就是下面這幾個值。表中的對比是依 WCAG 公式計算,除了 #000000 與 #121212 有明確出處,其餘都是常見的自訂值。

色碼RGB對 #FFFFFF對 #E0E0E0備註
#0000000 0 021.0015.91純黑,CSS 色名 black
#0A0A0A10 10 1019.8015.00常見自訂值,貼近純黑
#12121218 18 1818.7314.19Material 深色主題最底層表面
#1A1A1A26 26 2617.4013.18常見自訂值
#1E1E1E30 30 3016.6712.63常見自訂值
#22222234 34 3415.9112.05常見自訂值
#2B2B2B43 43 4314.1610.73常見自訂值
#33333351 51 5112.639.57常見自訂值,常用於淺色底上的文字

這些值各有適合放的位置。#121212 是 Google 的範例拿來當頁面底色的值,#1E1E1E 與 #222222 這類稍亮的近黑,適合放在它上面當卡片或面板的底色,讓兩層之間看得出高低。#1A1A1A、#333333 這類則常被拿來放在淺色底上當文字色,例如 #1A1A1A 對純白的對比仍有 17.40,遠高於一般文字 4.5:1 的門檻。Google 的 Android 開發文件也提到,通用文字色 textColorPrimary 在淺色主題是近黑、在深色主題是近白,可見文字色取近黑與近白,本來就是常見的預設做法。

純黑 #000000 到近黑 #333333 的 8 個色碼,白字對比從 21.00 降到 12.63,#121212 適合當深色頁面底色
近黑越往 #333333 走,白字對比越低,#121212 當頁面底色、#1E1E1E 與 #222222 適合當卡片或面板。

要提醒的是,這些近黑值不屬於 CSS 命名顏色,也別拿來宣稱是某個品牌的標準色。CSS 的色名裡找不到任何一個專門叫「近黑」的名字,黑色系色名裡最接近的 darkslategray 偏青綠,並不是中性的近黑。

黑色背景的深色模式色碼,包含底色層次與文字分級

搜尋「黑色背景」的人,多半在做深色模式或深色網頁。Google 的 Material 深色主題已經公開一套完整的做法,底色用 #121212,用白色疊層表現高低,文字用不透明度分成三級,彩色的強調色則改用淺色調。這套做法拆開來,就是一組可以直接套用的基礎色票。

本節的對比值都以 #121212 當黑色背景計算,另外附上純黑底的數字供對照。

底色以 #121212 起算,用白色疊層拉開高低

淺色介面靠陰影表現高低,到了深色介面,背景已經太暗,陰影幾乎看不出來。Google 的 Material Components 文件也指出,陰影在深色主題中與背景的對比低、效果較差。Material 的解法是疊層,表面越高,疊上去的白色越多、越亮;Google 的教學把這描述成在背景太暗、無法可靠呈現深色陰影時,傳達高度與階層的方式。

Google 的教學範例把電子郵件卡片的底填成 #121212,再疊一層 2% 不透明度的白色,混色後約是 #171717。混色的算法是 疊後 = 底 + (255 − 底) × 比例,所以 18 加上 237 乘 0.02,約等於 23,也就是十六進位的 17。教學後段把品牌主色帶回表面時,卡片的疊層改用主色色系裡的 #ADC0CB,不透明度為 4%。

白色疊層在不同比例下的色碼,可以用同一條公式推算,下表除了 2% 來自 Google 的範例,其餘都只是示例。

疊層比例混出的色碼對 #E0E0E0 對比備註
2%#17171713.58Google 範例的卡片
4%#1B1B1B13.05示例
5%#1E1E1E12.63示例
8%#25252511.61示例

這套疊層是較早期的做法。Material Components 的文件註明,這種 elevation overlay 在 Material 元件裡已被 tonal surface color 系統取代,所以上面的色碼是一組好用的範例,不是唯一標準,自己的專案照著算,一樣可以得到順手的層次。

#121212 疊上 2%、4%、5%、8% 白色後依序變成 #171717、#1B1B1B、#1E1E1E、#252525,表面越高越亮
深色主題用白色疊層取代陰影表現高低,2% 是 Google 範例卡片的 #171717,其餘比例照同一條公式推算。

文字依 87%、60%、38% 三級不透明度換算色碼

Google 的教學把深色主題的文字分成三級,高強調文字的不透明度是 87%,中強調是 60%,停用的文字是 38%,文字色以白色為底。下表把它們換成可以直接貼進色票的色碼,並附上依 WCAG 公式算出的對比。

層級不透明度在 #121212 上的色碼對比在 #000000 上的色碼對比用途
高強調87%#E0E0E014.19#DEDEDE15.61標題、正文
中強調60%#A0A0A07.16#9999997.37說明文字、輔助資訊
停用38%#6C6C6C3.57#6161613.39停用狀態
純白(對照)100%#FFFFFF18.73#FFFFFF21.00不建議當正文

38% 這一級在 #121212 上只有 3.57,連一般文字的 4.5:1 都沒有達到,也就不能拿來放正文。這並不算缺點,因為它本來就是給停用狀態用的。W3C 的 WCAG 2.2 說明文件也寫明,不可操作的介面元件上的文字不在對比要求的範圍內,所以停用的按鈕與欄位,可以放心用這一級。

換成純黑底,三級的對比都會再往上抬一點,87% 是 15.61,60% 是 7.37,38% 則是 3.39,仍然低於 4.5。至於高強調文字,Google 用 87% 的白色而不用純白,對比已經有 14.19,既夠高,又避開了純白在黑色背景上暈開的問題。

深色主題文字 87%、60%、38% 在 #121212 上是 #E0E0E0、#A0A0A0、#6C6C6C,38% 只有 3.57 只能用於停用狀態
高強調 87% 的對比已有 14.19,38% 那一級低於 4.5,只留給停用的按鈕與欄位。

黑底上的強調色要改用淺色調

黑底上的彩色,不能直接沿用白底那一套。Google 的教學說明,製作 Material 深色主題時,會選擇較淺的色調變體,讓色彩系統保持表現力又維持適當的對比;飽和度高的顏色搭配深色背景,容易在視覺上產生「震動」,讓文字更難讀。

下表是同一色系的飽和版與淺色版,在 #121212 上的對比比較。色值取自 W3C 的 CSS 命名顏色表,對比依 WCAG 公式計算。

色系飽和版對比淺色版對比
藍blue #0000FF2.18lightskyblue #87CEFA10.92
藍(中)royalblue #4169E13.87dodgerblue #1E90FF5.79
紅red #FF00004.69lightcoral #F080807.23
紅橘crimson #DC143C3.75tomato #FF63476.36
紫mediumpurple #9370DB4.98violet #EE82EE8.08

純藍 #0000FF 只有 2.18,換成 lightskyblue 就有 10.92,差距非常明顯。crimson 的 3.75 低於 4.5,不能當黑底上的小字;red 的 4.69 數字雖然過關,W3C 的 WCAG 2.2 說明文件仍另外提醒,對比的算法原則上不必區分色覺障礙的類型,唯一的例外是 protanopia(紅色盲)的使用者看紅色這類長波長顏色搭配暗色的情況,因此文件另外提供「避免紅色放在黑底」的建議做法。

Google 的教學也保留了彈性,小型但影響重大的元件,可以選飽和度稍高一點的顏色,只要與底層顏色維持適當的對比。換句話說,淺色調是預設做法,高飽和是例外;一旦換色,記得把對比重新驗過一次。

黑底上的強調色換成淺色版後對比明顯提高,例如 blue 只有 2.18,換成 lightskyblue 達 10.92
飽和色放在黑底上常常對比不足,改用同色系的淺色版,文字才看得清楚。

用 prefers-color-scheme 讀取系統的深淺設定

網頁要自動配合使用者的深淺偏好,最小可用的寫法是 CSS 的 prefers-color-scheme 媒體查詢。下面這段先寫淺色,再在深色偏好下換成前面兩節的色碼。

body {
  background: #ffffff;
  color: #1a1a1a;
}

@media (prefers-color-scheme: dark) {
  body {
    background: #121212;
    color: #e0e0e0;
  }
}Code language: CSS (css)

這個查詢讀的是使用者在作業系統或瀏覽器的設定,並不是網站自己去偵測。根據 MDN 的說明,使用者沒有明確表達偏好時,查詢會視為 light。各主流瀏覽器都已廣泛支援這項查詢,自 2020 年 1 月起就能使用。

切換之後,要記得連同文字與強調色一起重新驗對比,不能只換背景。淺色版裡的 #1A1A1A 文字搬到 #121212 上幾乎看不見,dimgray 的次要文字也只剩 3.41,所以文字的三個層級與強調色,都得照前面兩節的色碼重新挑。

CSS 色名中的黑、深灰與帶色相的近黑

W3C 的《CSS Color Module Level 4》命名顏色表裡,屬於黑色系的色名可以分成兩類,一類是沒有色偏的中性黑灰,另一類是帶有色相的深色。

另一個常見的麻煩,是 charcoal、jet、onyx、墨黑、炭黑這些常聽到的名字,查得到色碼卻不知道出處。這幾個名字其實不在規格裡,本來就沒有標準值。

black 與 dimgray、gray、darkgray 的中性黑灰

從純黑往淺走,會依序經過 dimgray #696969、gray #808080、darkgray #A9A9A9,再往上是 silver 與 lightgray。這幾個色名的 RGB 三個值都相同,所以沒有任何色偏。

英文色名常見中文譯名HEXRGB對白對黑
black黑色#0000000 0 021.001.00
dimgray暗灰色#696969105 105 1055.493.83
gray灰色#808080128 128 1283.955.32
darkgray深灰色#A9A9A9169 169 1692.358.94
silver銀色#C0C0C0192 192 1921.8211.54
lightgray淺灰色#D3D3D3211 211 2111.5014.03

中文譯名是常見叫法,各站不完全一致,溝通時以英文色名或 HEX 為準。darkgray 雖然名字有個「深」字,實際上卻比 gray 還要亮,所以判斷深淺要看色值,不能靠名字,亮度的順序是 black、dimgray、gray、darkgray、silver、lightgray。

每一階適合的位置也不同。dimgray 在白底上有 5.49,過了 4.5,適合在淺色底上放次要文字;gray 在白底只有 3.95,不夠一般文字使用,換到黑底上有 5.32,才夠用;darkgray 在白底只有 2.35,不能當文字,放在黑底上卻有 8.94,是相當舒服的輔助文字色。silver 與 lightgray 已經偏淺灰,在這裡只算黑灰系列的延伸,白底上的 1.82 與 1.50,只適合當分隔線或背景。

帶色相的深色放在黑底上幾乎看不見

darkslategray、midnightblue、navy 這些名字裡帶「深」或「黑」的顏色,本質上是有色相的深色,並不是中性黑。下表把它們對白色與黑色的對比擺在一起。放在白底上,這些顏色的對比很高,放在黑底上卻只有 1.31 到 2.96,幾乎融在背景裡。

英文色名HEXRGB對白對黑
darkslategray#2F4F4F47 79 798.932.35
midnightblue#19197025 25 11214.851.41
navy#0000800 0 12816.011.31
indigo#4B008275 0 13012.951.62
maroon#800000128 0 010.951.92
darkred#8B0000139 0 010.012.10
darkgreen#0064000 100 07.442.82
saddlebrown#8B4513139 69 197.102.96

依色偏大致分成三組。偏青灰的是 darkslategray,在這張表裡最接近中性深灰,卻仍帶著青綠的底色。偏藍紫的有 midnightblue、navy 與 indigo,三個放在黑底上都低於 1.7,幾乎分不出來。偏紅綠褐的有 maroon、darkred、darkgreen 與 saddlebrown,對黑色也都在 3 以下,比藍紫那組稍好,但離文字門檻還差得遠。

所以把這類顏色當成「黑色的替代」之前,要先看清楚它的色偏。它們適合放在淺色底上,或當作面積色使用;和黑色並排時,不要指望靠它們做出層次,因為兩者的亮度差距太小,看起來只會像同一塊黑。

CSS 黑灰色名依亮度排列,darkgray 其實比 gray 亮;navy、midnightblue 這類帶色相的深色在黑底上只有 1.31 到 2.96
中性黑灰看色值判斷深淺,帶色相的深色和黑色並排時幾乎分不出來,做不出層次。

炭黑、墨黑與 charcoal、jet 沒有規格定義值

W3C 的《CSS Color Module Level 4》命名顏色表裡,charcoal、jet、onyx、ebony、raven、obsidian 這幾個色名全部不存在,中文的炭黑、墨黑、漆黑也沒有對應的規格值。各處給出的色碼不一樣,並不是誰抄錯,而是這些名字本來就沒有標準值。

比較務實的做法是,不用色名溝通,直接挑一個 HEX 寫進色票,並且連同用途一起寫下,例如「深色模式底色 #121212」。色名只能在自己的團隊內約定,對外交付時,色碼才是不會誤會的語言。

如果想找一個起點,可以從上面兩張表最接近的色名開始微調。炭黑可以從 dimgray 或 darkslategray 起試,墨黑可以從近黑表裡的 #1A1A1A 起試,這只是建議的起點,不是標準答案,最後要依自己的畫面與對比需求調整。

彩色底上的文字顏色,以相對亮度 0.179 為黑白字分界

按鈕、標籤與色塊的底色是彩色時,上面的文字該放黑還是白,色碼表從來不會告訴你。答案可以算出來,依 WCAG 公式推導,彩色底的相對亮度高於約 0.179,黑字的對比比較高;低於它,白字的對比比較高。

這個結論常常與直覺相反。許多人覺得深色底用白字、淺色底用黑字,但純紅 #FF0000 配白字只有 4.00,過不了一般文字的 4.5,配黑字反而有 5.25。看對比數字選字色,比憑感覺可靠。

黑字與白字對比相等的相對亮度

W3C 的 WCAG 2.2 說明文件把一般文字的對比門檻定在 4.5:1,大字則是 3:1,大字指的是至少 18pt,或 14pt 的粗體。相對亮度的範圍是 0 到 1,黑色為 0,白色為 1,sRGB 的各通道要先經過線性化才代入公式。

黑字放在亮度 L 的底色上,對比是 (L + 0.05) / 0.05;白字的對比則是 1.05 / (L + 0.05)。兩者相等時,(L + 0.05) 的平方等於 1.05 乘以 0.05,解出 L 約為 0.179。

這個分界值給的是判斷準則,不是硬性規定。底色的相對亮度高於 0.179,黑字的對比比較高,低於它,則是白字比較高。但比較高不代表一定夠用,還是得回頭看有沒有過 4.5:1 的門檻。

常見彩色底的黑字與白字對比實算

下表挑了 11 個常見的 CSS 色名,列出相對亮度、黑字對比、白字對比,並標出哪一種字色能過 4.5。色值取自 W3C 的 CSS 命名顏色表,對比依 WCAG 公式計算。

色名HEX相對亮度黑字白字過 4.5 的字色
yellow#FFFF000.92819.561.07黑字
gold#FFD7000.69914.971.40黑字
tomato#FF63470.3067.132.95黑字
red#FF00000.2135.254.00黑字
seagreen#2E8B570.1974.954.25黑字
teal#0080800.1704.404.77白字
royalblue#4169E10.1674.334.85白字
crimson#DC143C0.1604.214.99白字
blueviolet#8A2BE20.1263.525.96白字
firebrick#B222220.1073.146.68白字
purple#8000800.0612.239.42白字

亮度高於 0.179 的底色,黑字的對比都比較高。tomato 的白字只有 2.95,只有黑字能用;gold 與 yellow 配白字分別是 1.40 與 1.07,幾乎看不清楚字。純紅配白字的 4.00,在一般文字下不及格,只有大字的 3:1 能勉強過關。

亮度低於 0.179 的深色那端,結果就反過來。blueviolet 的黑字只有 3.52,白字有 5.96;firebrick 的黑字 3.14,白字 6.68;purple 的黑字 2.23,白字 9.42,這些都該用白字。crimson 比較特別,白字 4.99 剛好過關,黑字 4.21 則不行。

teal、royalblue、crimson 與 seagreen 落在黑白字都接近 4.5 的交界帶,兩種字色的對比都在 4 到 5 附近,只差一點點。teal 的黑字 4.40、royalblue 的黑字 4.33,都是「黑白都很接近,但只有白字過關」的例子。遇到這種底色,換了一點色相或明度,結果就可能翻過來,所以換底色後一定要重新計算,不要憑色相直覺選字色。

11 種彩色底依相對亮度排列,高於 0.179 黑字對比較高,低於 0.179 白字較高,red 配黑字 5.25 勝過白字 4.00
以相對亮度 0.179 為分界選黑字或白字,比憑色相直覺可靠,選完仍要確認有沒有過 4.5。

安全灰 #767676 在純白與純黑都過關,深色主題上對比不足

灰色文字是最常被說「看不清」的顏色,原因在於同一個灰,放在白底和黑底上的對比完全不同。下表是 7 個灰階在四種底色上的對比。

灰階對純白對純黑對 #121212對 #1A1A1A
#5959597.003.002.672.48
#696969 dimgray5.493.833.413.17
#7676764.544.624.123.83
#808080 gray3.955.324.744.41
#9999992.857.376.586.11
#A9A9A9 darkgray2.358.947.977.41
#CCCCCC1.6113.0811.6710.84

#808080 在純白底只有 3.95,在純黑底卻有 5.32;#595959 在白底有 7.00,換到黑底只剩 3.00。中性灰裡只有 #757575 與 #767676 這兩階,同時在純白與純黑上都過 4.5,以 #767676 來說,分別是 4.54 與 4.62,所以它常被當作兩種底色都能用的「安全灰」。

不過一換成深色主題常用的底色,這個安全灰就不再安全了。#767676 放在 #121212 上只剩 4.12,放在 #1A1A1A 上更只有 3.83。灰色的次要文字搬到深色主題時,不能直接沿用淺色版的灰,要重新挑,#808080 在 #121212 上有 4.74,在 #1A1A1A 上是 4.41,想要有餘裕,可以再往 #999999 挑。

安全灰 #767676 在純白與純黑上都過 4.5,換到 #121212 只剩 4.12、#1A1A1A 只剩 3.83
淺色版的灰色次要文字搬到深色主題要重新挑,#808080 或 #999999 在近黑底上才有餘裕。

四組黑色配色的色碼與實算對比

四組黑色配色都標明了底色、文字色、點綴色與主要的對比值,可以直接複製使用。選色的邏輯是底色先定,文字再驗對比,點綴色只做小面積。

另外有兩條通則,同樣是建議,不是規範。

  1. 一個頁面只選一種黑的階層,純黑和近黑並排,會讓表面之間的前後關係變得混亂。
  2. 高飽和的亮色只用在小面積,不要鋪成大面積。

所有對比值都是依 WCAG 公式實算的結果,請當成建議組合,換了色碼就要重新驗算。

4 組黑色配色的色碼與對比,包含黑底金色強調、近黑底冷色點綴、黑底深紅按鈕與白底黃色警示色塊
四組黑色搭配都先定底色、再驗文字對比,高飽和的點綴色只用在小面積。

黑底白字配金色強調

黑金是最經典的黑色配色,底色用 #121212,文字色 #E0E0E0,對比 14.19;標題與連結用 gold #FFD700,對比 13.36。

按鈕的用法剛好反過來,gold 變成按鈕的底,上面放黑字 #000000,對比 14.97。同樣是金色,標題裡的金色是黑底上的字,按鈕上的金色卻是托著黑字的底,兩個方向的對比都夠高,可以並用。

金色也有不能搬去的地方。gold 放在白底上只有 1.40,完全不能當文字;如果想要暗一點的金色,常見的自訂值 #D4AF37 在 #121212 上有 8.91,也能使用,但它不屬於 CSS 色名。

近黑底搭薄荷綠與青色,只做小面積點綴

科技、工具與儀表板常見的冷色深色模式,底色用 #1A1A1A,文字色 #E8E8E8,對比 14.20;點綴色可以選 mediumspringgreen #00FA9A,對比 12.55,或是 aqua #00FFFF,對比 13.88,兩個數字都很高。

不過這兩個都是滿飽和的亮色。前面提到,Google 的說明指出飽和度高的顏色搭配深色背景,容易產生視覺上的震動,讓文字更難讀,所以它們只適合用在連結、圖示與進度條,不要拿來鋪大面積,也不要排成長段的文字。

如果想降低飽和度,可以改用前面強調色表裡的淺色版,像是 lightskyblue #87CEFA,在 #121212 上有 10.92,畫面會柔和一些。

黑底配深紅按鈕,紅色不當小字

黑底搭紅色是另一個經典組合,但有個容易踩的坑。底色 #000000,文字 #FFFFFF,按鈕底用 crimson #DC143C,按鈕上的白字對比 4.99,剛好過關;換成黑字只有 4.21,所以按鈕上要用白字。

紅色字放在黑底上是另一回事。red #FF0000 在黑底上是 5.25,數字雖然過關,但前面提到 W3C 另有避免紅色放在黑底的提醒,原因與 protanopia 的使用者有關,這裡點到為止。比較穩的做法是,小字改用亮度更高的 tomato #FF6347,對比 7.13;或是乾脆不用紅字,讓紅色只當按鈕的底色。

白底黑字加黃色警示色塊

最後一組把黑色放回淺色底上。頁面底色 #FFFFFF,文字色 #1A1A1A,對比 17.40;次要文字用 dimgray #696969,對比 5.49。警示或提示的色塊用 yellow #FFFF00 或 gold #FFD700,上面的黑字 #111111 對比分別是 17.58 與 13.46。

黃色底上必須用黑字,白字在 yellow 上只有 1.07,幾乎看不清。黃底黑字的對比很高,而且字與底靠的是亮度差、不是色相差,轉成灰階也分得出來。

次要文字用 dimgray 就夠了,沒必要再往淺挑,#999999 在白底上只有 2.85,並不及格。色塊上的字如果是大字,也就是 18pt 以上,或 14pt 的粗體,門檻才會降到 3:1。

印刷的黑色分成單色黑與四色黑

螢幕上的 #000000 轉到印刷稿,並不是只有一種黑。細字與細線用單色黑 K100,大面積的黑底才考慮四色黑,也就是在黑墨之外,再加青、洋紅、黃墨。具體的百分比因印刷機與紙張而異,一律向印刷廠確認,不要自己抄一組數字。

這些做法都出自 Adobe 的說明文件。另外,從 RGB 轉成 CMYK 時,也要檢查總墨量,才不會出現意料之外的黑。

印刷稿的單色黑 K100 只用黑墨一個版,適合細字細線;四色黑加少量青、洋紅、黃墨,適合大面積黑底
小字與細線用單色黑 K100,大面積黑底才改用四色黑,比例交給印刷廠依紙張確認。

小字與細線用單色黑 K100

單色黑只有黑墨這一個版,不必和其他色版對齊,細字與細線最怕不同色版之間套不準,所以小字用 K100 最穩。照同樣的道理推想,由多個版疊出來的黑,得靠每一個版都對得準;細字的筆畫本來就細,只要其中一版稍微偏位,邊緣就可能露出別的色墨。

InDesign 也替這件事做了預設處理。Adobe 的說明文件寫到,InDesign 預設會自動將 100% 黑色的填色與線條設為壓印(overprint),避免小黑字壓在彩色區塊上時,因為套印不準而出問題。

這個預設只針對 Black 色票的 100%,黑色的色調(tints),以及用其他方式建立的黑色,都不受影響。想關閉的話,到偏好設定的 Appearance of Black 頁面,取消勾選 Overprint Black Swatch at 100%;偏好設定在 Windows 位於 Edit > Preferences,在 macOS 位於 InDesign > Preferences。

大面積黑色改用四色黑,成分比例向印刷廠確認

單色黑壓印時,底下的墨色有機會透出來。Adobe 的說明文件寫到,標準的 100% 單色黑在壓印時,可能不會顯得完全不透明,底下的墨色會稍微透出;為了避免這種透出的情況發生在大面積黑色或大字上,建議改用四色黑,也就是在黑墨上加少量的青、洋紅與黃。

至於加多少,Adobe 的建議是向服務供應商確認適合自己印刷機與紙張的確切百分比。四色黑的配方因此沒有通用值,哪個比例看起來比較黑,要看實際印在哪張紙上,這件事交給印刷廠最準。

另外有一個容易搞混的詞,Adobe 特別提醒四色黑不要和 Registration(套準色)混為一談。套準色會讓每一個色版都以 100% 上墨,並不是一組調配好的黑,不能拿來當四色黑用。

RGB 的 0、0、0 轉成 CMYK 後要檢查總墨量

把螢幕稿的 #000000 直接轉成 CMYK 時,得到的是 K100 還是四色混合,取決於色彩設定與目的描述檔;同一個 RGB 黑在不同的設定下,轉出來的結果可能不同。

建議的做法是,轉完用 Photoshop 的資訊面板檢查一次。Adobe 的說明文件寫到,資訊面板的色彩讀數選項裡有 Total Ink,會顯示指標所在位置所有 CMYK 墨量的總百分比,計算依據是 CMYK 設定對話框裡的值。把吸管移到黑色區域,就能讀到那個位置的總墨量。

總墨量的上限是多少,由印刷廠與紙張決定,並沒有放諸四海皆準的數字。把讀到的結果和檔案一起交給印刷廠確認,比自己猜上限安全得多。

黑色的色碼從來不只是一個值,它背後還有放在哪裡、配誰、印在什麼上面這幾個前提。下次替專案定義黑色時,不妨在色票裡把每個黑色的用途一起寫下來,像是「深色模式底色 #121212」「標誌專用黑 #000000」,並且用對比公式把每一組文字與底色驗過一遍,印刷稿的黑則交給印刷廠依紙張確認。這樣一來,團隊裡的每個人看到「黑色」,指的才會是同一件事。

常見問答

本區問答由 AI 依文章內容自動整理,僅供快速參考,正式內容仍以全文為準。

黑色的 HEX 與 RGB 色碼怎麼寫?

純黑的 HEX 色碼是 #000000,可簡寫成 #000,RGB 寫成 rgb(0, 0, 0),CSS 色名 black 對應的也是同一個值。HSL 只要明度是 0% 就是黑,色相與飽和度填什麼都一樣。

黑色背景為什麼常用 #121212 而不是純黑?

Google 的 Material 深色主題把最底層定在 #121212,Material 元件文件說明,深灰底比純黑更容易看出陰影,也能減輕淺色文字帶來的眼睛疲勞。近黑也留下往上疊白色表現層次的空間,純黑配純白雖有 21:1 的最大對比,卻不代表最好讀。

深色模式的文字色碼要怎麼分級?

深色模式的文字以白色為底分三級不透明度,高強調 87%、中強調 60%、停用 38%,在 #121212 上約是 #E0E0E0、#A0A0A0 與 #6C6C6C。38% 那一級對比只有 3.57,只適合停用狀態。

黑底上的強調色為什麼要改用淺色調?

黑底上的高飽和色容易產生視覺震動,對比也常不夠,例如純藍 #0000FF 在 #121212 上只有 2.18,換成 lightskyblue 就有 10.92。淺色調是預設做法,小型但重要的元件才例外改用較飽和的顏色,換色後要重新驗對比。

彩色按鈕上的字該用黑字還是白字?

彩色底上的字色可依 WCAG 公式判斷,底色相對亮度高於約 0.179 時黑字對比較高,低於則白字較高。純紅 #FF0000 配白字只有 4.00,配黑字反而有 5.25。對比比較高不代表一定夠用,仍要確認有沒有過 4.5:1。

安全灰 #767676 在深色模式還夠用嗎?

安全灰 #767676 在純白與純黑上都過 4.5:1,但放到 #121212 上只剩 4.12,在 #1A1A1A 上更只有 3.83。深色模式的次要文字要重新挑,例如 #808080 或更有餘裕的 #999999。

charcoal、墨黑這類黑色色名有標準色碼嗎?

charcoal、jet、onyx 這類色名不在 W3C 的 CSS 命名顏色表裡,中文的炭黑、墨黑也沒有規格值,各處色碼不同是因為本來就沒有標準。對外交付時直接寫 HEX 並註明用途,例如「深色模式底色 #121212」最不會誤會。

印刷稿的黑色該用單色黑還是四色黑?

印刷稿的小字與細線用單色黑 K100,只有黑墨一個版,不怕套印不準;大面積黑底或大字才改用四色黑,在黑墨上加少量青、洋紅與黃墨。四色黑沒有通用比例,要向印刷廠依印刷機與紙張確認。

資料來源
  1. CSS Color Module Level 4 — W3C
  2. Understanding WCAG 2.2: Contrast (Minimum) — W3C
  3. Design a dark theme with Material and Figma — Google
  4. Material Components for Android: Dark theme — Google
  5. Android Developers: Implement dark theme — Google
  6. prefers-color-scheme — MDN
  7. About overprinting in InDesign — Adobe
  8. Print objects on all color plates in InDesign — Adobe
  9. Photoshop image information — Adobe