不做暗色模式的網站,在 2026 年不會停留在亮色,而是會被別人的演算法改成暗色。Chrome for Android 的 Auto Dark Theme 會對「沒有表態」的網站自動生成一份暗色版本;Android WebView 的 algorithmic darkening 會在 app 端開啟時做同一件事。兩者的觸發條件都寫得很清楚:當網頁內容沒有使用 prefers-color-scheme、而且作者沒有明確關閉時,UA 就接手。所以「不做」不是一個中立選項,它只是把設計權交給一個沒看過你品牌色的演算法。

這是整個主題最重要的一句話,也是後面所有技術細節的動機:你要嘛設計一份暗色主題,要嘛明確宣告只支援亮色。沉默是最糟的第三種。

三個站得住腳的理由

一、系統偏好已經是預設狀態,不是少數人的設定。 iOS、Android、macOS、Windows 都把外觀跟隨排進系統設定與自動時段切換。使用者開著暗色系統進到一個純白頁面,感受到的不是「這網站是亮色的」,而是「這網站沒做完」。這一點沒有辦法靠說服使用者去改系統設定來解決。

二、UA 的自動反色會破壞語意。 演算法反色是逐一針對顏色做的,它不知道哪個灰是「卡片背景」、哪個灰是「停用文字」。常見結果是:品牌色被改成一個沒人核准過的顏色、原本有層次的卡片全部塌成同一階、半透明疊層算出奇怪的中間色、圖片裡的白底 logo 變成一塊刺眼的亮斑。這些問題在 強制反色的偵測與對抗 有完整拆解。

三、OLED 螢幕的耗電與畏光需求是真實的。 但要誠實:省電效果只在 OLED/AMOLED 面板、且畫面大面積為深色時才顯著,LCD 幾乎沒有差別;亮度愈高差距愈大。把「省電」當成主要賣點會誇大,把它當成附帶好處才準確。

反面:暗色模式不是「對所有人都更好」

視覺心理學上長期存在 positive polarity(亮底暗字)與 negative polarity(暗底亮字)的比較。多數研究傾向認為在一般照明環境下,亮底暗字的閱讀表現與辨識正確率較佳,機制是瞳孔在亮背景下收縮、景深增加、成像更銳利;反過來,散光(astigmatism)使用者在暗底亮字上更容易感受到光暈與模糊。同時,畏光、偏頭痛與部分低視力使用者確實在暗色下更舒適。

這兩件事同時為真,結論只有一個:雙主題的價值在於「讓使用者選」,不在於「暗色比較好」。 任何以「暗色更護眼」為前提的設計決策都應該被降級成偏好問題。這一點的證據強度標記見 主張 vs 可佐證

什麼時候「只做亮色」是對的

有些情況做單一主題是合理的工程決策:印刷預覽、色彩校對工具、地圖或資料視覺化這類顏色本身帶語意的介面、以及品牌強制規範的行銷落地頁。這些場景的共同點是顏色是資料,不是裝飾,任意反色會產生錯誤資訊。

但即使決定只做亮色,也必須明確宣告,而不是什麼都不寫:

<meta name="color-scheme" content="only light">
:root {
  color-scheme: only light;
}

only 這個關鍵字的作用就是禁止 UA 覆寫色彩配置,Chrome 的 Auto Dark Theme 與 WebView 的演算法darkening 都會因此讓開。注意 <meta name="color-scheme" content="only dark">無效值——規範不允許在內容不支援時強制暗色,因為那會產生無法閱讀的畫面。

需要局部例外時,color-scheme 是可繼承屬性,可以只套在某個子樹上:

main { color-scheme: light dark; }
.color-picker { color-scheme: only light; }  /* 這區塊的顏色本身是資料 */

成本評估:這件事到底多大

從零開始加雙主題,工作量幾乎完全取決於一件事——現有樣式裡有多少寫死的顏色。如果顏色已經走 CSS 自訂屬性且命名是語意化的(--surface--text-muted),加暗色主題是改一組值;如果樣式裡散落著 #fffrgba(0,0,0,.08)box-shadow: 0 2px 4px #ccc,那真正的工作是先做一次顏色 token 化,暗色只是它的附帶成果。

這個順序不能顛倒。先硬幹暗色、之後再回頭補 token,會得到兩份互相打架的顏色來源。token 設計的完整方法在 語意化顏色 token 設計

決策清單

決定要不要做、做到什麼程度,用這四個問題就夠:

  1. 這個介面的顏色有沒有攜帶語意(狀態、資料、色彩校對)?有 → 至少要有 only light 的例外區塊。
  2. 內容會不會被放進 app 的 in-app browser(廣告落地頁、社群分享連結)?會 → 雙主題是必要的,因為那裡的環境最容易被強制反色,見 In-app WebView 專篇
  3. 現有 CSS 的顏色是否已 token 化?否 → 先估 token 化的工,那才是主要成本。
  4. 有沒有人負責維護第二套視覺(圖片、logo、插圖、螢幕截圖)?沒有 → 先做「介面雙主題、圖片單一版本並加保護底色」,見 圖片、圖示與 media

下一步:prefers-color-scheme 與 color-scheme:偵測偏好 vs 宣告能力