遷移至 HD CSS 顏色

本文件為高畫質 CSS 顏色指南的一部分。

Adam Argyle
Adam Argyle

更新網頁專案顏色以支援廣色域螢幕,主要有兩種策略:

  1. 優雅降級:使用新的色彩空間,讓瀏覽器和作業系統根據顯示功能判斷要顯示哪些顏色。

  2. 漸進式改善:使用 @supports@media 評估使用者瀏覽器的功能,如果符合條件,就提供廣色域色彩。

如果瀏覽器無法辨識display-p3顏色:

color: red;
color: color(display-p3 1 0 0);

如果瀏覽器可辨識 display-p3 顏色:

color: red;
color: color(display-p3 1 0 0);

每種方法各有優缺點。以下簡要列出優缺點:

優雅降級

  • 優點
    • 最簡單的路線。
    • 如果沒有寬廣的螢幕,瀏覽器領域的地圖,或限制設為 sRGB,因此由瀏覽器負責。
  • 缺點
    • 瀏覽器可能會將色域限制或色域對應至您不喜歡的顏色。
    • 瀏覽器可能無法理解顏色要求,並完全失敗。不過,這可以藉由指定兩次顏色來緩解這個問題,讓串聯後回歸到之前能夠理解的顏色。

漸進增強

  • 優點
    • 透過代管色彩擬真度設定更大的控制。
    • 不會影響目前顏色的加法策略。
  • 缺點
    • 您需要管理兩個不同的色彩語法。
    • 您需要管理兩個不同的色域。

檢查對焦和色域支援

瀏覽器可檢查 CSS 和 JavaScript 是否支援廣角功能和顏色語法支援。我們不會提供使用者的確切色域,而是提供一般答案,以維護使用者隱私。不過,Google 可提供確切的色彩空間支援,因為它並不是使用者硬體的功能 (例如 gamut) 並不專用。

色域支援查詢

以下程式碼範例會檢查造訪使用者在螢幕上看到的顏色範圍。

透過 CSS 檢查

最不具體的支援查詢是 dynamic-range 媒體查詢:

瀏覽器支援

  • Chrome:98。
  • Edge:98。
  • Firefox:100。
  • Safari:13.1。

資料來源

@media (dynamic-range: high) {
  /* safe to use HD colors */
}

您可以使用 color-gamut 媒體查詢來查詢大致或更高的支援:

瀏覽器支援

  • Chrome:58。
  • Edge:79,
  • Firefox:110。
  • Safari:10.

資料來源

@media (color-gamut: srgb) {
  /* safe to use srgb colors */
}

@media (color-gamut: p3) {
  /* safe to use p3 colors */
}

@media (color-gamut: rec2020) {
  /* safe to use rec2020 colors */
}

您還可以使用以下兩項媒體查詢檢查支援情形:

  1. @media (color)
  2. @media (color-index)

透過 JavaScript 進行檢查

針對 JavaScript,您可以呼叫 window.matchMedia() 函式,並傳遞媒體查詢以供評估。

瀏覽器支援

  • Chrome:9.
  • Edge:12.
  • Firefox:6.
  • Safari:5.1。

資料來源

const hasHighDynamicRange = window
.matchMedia('(dynamic-range: high)')
.matches;

console.log(hasHighDynamicRange); // true || false

const hasP3Color = window
.matchMedia('(color-gamut: p3)')
.matches;

console.log(hasP3Color); // true || false

您可以複製上述模式,用於其他媒體查詢。

色彩空間支援查詢

以下程式碼範例會檢查造訪使用者的瀏覽器,以及該瀏覽器所選用的色彩空間。

透過 CSS 檢查

您可以使用 @supports 查詢個別色彩空間支援情形:

瀏覽器支援

  • Chrome:28.
  • 邊緣:12。
  • Firefox:22。
  • Safari:9.

資料來源

@supports (background: rgb(0 0 0)) {
  /* rgb color space supported */
}


@supports (background: color(display-p3 0 0 0)) {
  /* display-p3 color space supported */
}


@supports (background: oklch(0 0 0)) {
  /* oklch color space supported */
}

透過 JavaScript 進行檢查

針對 JavaScript,您可以呼叫 CSS.supports() 函式並傳遞屬性和值組,以查看瀏覽器是否瞭解。

CSS.supports('background: rgb(0 0 0)')
CSS.supports('background: color(display-p3 0 0 0)')
CSS.supports('background: oklch(0 0 0)')

將硬體和剖析檢查整合在一起

在等待各瀏覽器實作這些新色彩功能的同時,建議您同時檢查硬體功能和色彩剖析功能。我通常會在逐漸提升色彩至高解析度時使用以下方法:

:root {
  --neon-red: rgb(100% 0 0);
  --neon-blue: rgb(0 0 100%);
}

/* is the display HD? */
@media (dynamic-range: high) {

  /* does this browser understand display-p3? */
  @supports (color: color(display-p3 0 0 0)) {

    /* safe to use display-p3 colors */
    --neon-red: color(display-p3 1 0 0);
    --neon-blue: color(display-p3 0 0 1);
  }
}

使用 Chrome 開發人員工具進行色彩偵錯

Chrome 開發人員工具已更新,並配備新工具,協助開發人員建立、轉換及偵錯 HD 色彩。

更新顏色挑選器

色彩挑選器現在支援所有新的色彩空間。讓作者像平常一樣與頻道值互動。

開發人員工具顯示 display-p3 色彩支援。

Gamut 邊界

我們也新增了色域邊界線,在 sRGB 和 Display-P3 色域之間畫線。清楚顯示所選顏色屬於哪個色域。

開發人員工具在顏色挑選器中顯示橫線。

讓作者在視覺上分辨 HD 高畫質和非 HD 高畫質的顏色。 這在使用 color() 函式和新色彩空間時特別實用,因為這兩者都能產生非 HD 和 HD 顏色。如要檢查顏色屬於哪個色域,請彈出顏色挑選器,看看結果!

轉換顏色

開發人員工具已能夠在許多年內,在支援的格式 (例如 hsl、hwb、rgb 和十六進位) 之間轉換顏色。在「Styles」窗格中的方形顏色樣本上加上 shift + click,即可執行這項轉換。新的顏色工具不僅會循環顯示轉換,還會產生對話方塊,讓作者查看並選擇所需的轉換。

轉換時,請務必瞭解轉換是否裁剪符合空間大小。開發人員工具現在會在轉換的顏色上顯示警告圖示,提醒您發生了裁剪。

開發人員工具色域裁剪螢幕截圖,顏色旁有警告圖示。

探索更多 開發人員工具中的 CSS 偵錯功能

後續步驟

提供更鮮豔、一致的操控和插補效果,為使用者帶來更豐富的體驗。

請參閱指南中的色彩資源