Chrome 98 中的 COLRv1 色彩漸層向量字型

Dominik Röttsches
Dominik Röttsches
Rod Sheeter
Rod Sheeter

採用所有喜愛的漸層色彩,提供壓縮友善的緊湊色彩向量字型。

在 Chrome 98 中,Chrome 和字型團隊已新增對 COLRv1 的支援。COLRv1 是 COLRv0 字型格式的進階版本,旨在透過新增漸層、合成和混合,以及改善內部形狀重用,讓色彩字型廣泛應用於經過壓縮的清晰簡潔字型檔案。

Color now

在網路上,文字通常會以 CSS 指定的顏色繪製。字型並未定義任何特定顏色,只會指出應放置像素的位置。這通常是好事。CSS 可讓作者靈活選擇顏色。不過,有時一個字符會包含多種顏色,這些顏色組合起來會代表某種意義。舉例來說,如果這個旗幟 由淡藍色和淡粉色條紋組成的跨性別旗幟。 僅以目前文字顏色繪製,就無法傳達相同的意思。

目前,表情符號是大多數使用者看到的唯一彩色字型。表情符號通常會透過系統表情符號字型或插入圖片 (表情符號,顯示傷心的臉部表情。 有其自身的複雜性) 顯示在網頁上。由於檔案大小太大,尤其是以位圖為基礎的彩色字型,因此很難將表情符號用於網頁字型。我們希望透過支援 COLRv1,讓網站和其他地方都能廣泛使用創意的彩色字型。

展現你的本色

我們建立了幾個範例供您試用:

範例中使用的 Google 字體範例素材資源,可在 Google 字體網路 API 中找到。這些字型僅適用於 Chrome 98 以上版本,且僅供展示實驗性質的字型,因此不會列在 fonts.google.com 的索引項目中。

您現在可以使用免費的開放原始碼工具製作自己的 COLRv1 字型。請試試 nanoemoji 字型編譯器,您可以使用這項工具從 SVG 來源圖片建立 COLRv1 字型,然後在 Chrome 98 以上版本中試用。請按照這篇文章的說明,變更漸層色彩,嘗試製作自己的 Bungee Spice。

舉例來說,您可以修改 Bungee Spice 字型,讓字型呈現藍色和紅色的漸層效果,如下所示:

使用 Bungee Spice 色彩字型的「dune」字樣,以藍色和紅色漸層色調呈現。

請將結果推文至 @googlefonts 🙂? 不妨試試放射或掃描漸層效果。

COLRv1 的新功能

字型格式支援多種顏色支援方式,每種方式都有不同的取捨,但目前尚未有任何方式在網路上成功。(如要進一步瞭解取捨之處,請參閱 Dominik 在 BlinkOn 15 大會上的演講內容)。Chrome 98 支援 COLRv1,這是 COLRv0 的進階版本。我們希望 COLRv1 的圖形功能和精簡檔案,能讓它成為許多彩色字型用途的理想選擇。COLRv1 新增了漸層、合成和混合功能,並改善內部形狀重複使用功能,以便製作更精簡的檔案。

COLRv1 的表現力大致等同於 SVG 原生,加上額外加入的混合和合成功能。顏色填滿有四種類型:純色、線性漸層、放射漸層和掃描/圓錐漸層。使用者可以使用完整的平移、旋轉、扭曲和縮放轉換,藉由 COLRv1 重新調整及轉換字元圖元元素。此外,它還支援字型變化,並可重複使用字型中的現有形狀定義格式。

藍色和紫色的水晶球表情符號,在棕色底部重複使用星星。
水晶球表情符號中的形狀重複使用

以水晶球表情符號為例:星形亮點的形狀相同,但大小不同,因此只需重新調整及重複使用一個形狀,檔案內就不會出現重複的形狀。這個格式可讓您在新的字形中重複使用完整的字形,而無須為每個字形重複編碼相同的形狀。想像一下,有一種帶有花卉裝飾的裝飾性彩色字型,只要參照現有的彩色字形,就能將相同的花朵形狀放在不同的字母上。針對網頁字型用途,COLRv1 在 woff2 下可提供良好的壓縮效果。舉例來說,使用 COLRv1 的 Twemoji 測試版本經過擴充後約為 1.2 MB,但以 woff2 格式則約為 0.6 MB。完整的 Noto Emoji 字元集組建,從 9 MB 的位圖版本縮減至 1.85 MB 的 COLRv1+woff2 格式。

長條圖比較 Noto Emoji 做為點陣圖字型和 COLRv1 字型的大小,約 9MB 和 1.85MB
Noto Emoji 字型大小 CBDT/CBLC 與 WOFF2 壓縮後的 COLRv1 比較。

彩色字型用途

朗朗上口的廣告標題

新穎的色彩字型可讓醒目顯示、標題和橫幅更加醒目。

Plakato Color Happy 2022 採用創新字體鑄造廠 Underware (Twitter:@underware、Instagram:@underwarefoundry) 設計的活潑漸層色彩。如要進一步瞭解 Underware 的第一個 COLRv1 版本,請參閱網誌文章

不再取代圖片:表情符號字型

如果您支援使用者原創內容,使用者可能會使用表情符號。目前,掃描文字並將遇到的任何表情符號替換為圖片,是相當常見的做法,可確保跨平台一致的算繪效果,以及支援比作業系統更新的表情符號。然後,在剪貼簿作業期間,這些圖片必須切換回文字。以下是實際範例:

程式碼片段:顯示內嵌圖片為 img 標記,以及中繼資料為聊天記錄的一部分
在 Google Chat 中取代圖片

如果您有表情符號字型,只要將文字轉譯為該字型即可,如下所示:

<style>
@import url(https://fonts.googleapis.com/css2?family=Noto+Color+Emoji);

.emoji {
  font-family: "Noto Color Emoji", sans-serif;
}
</style>
<span class="emoji">🙂</span>

同樣地,在表情符號回應元件中,COLRv1 可讓您使用精簡的字型檔案,而非圖像素材資源目錄。

GitHub 使用的表情符號挑選器 UI
GitHub 上的表情符號回應選擇器

試想一下,要打造完整的表情符號挑選器,您需要擷取多少張圖片!

圖示字型的顏色

在圖示字型中使用顏色可提高清晰度,讓字符更容易理解。

三個黑色輪廓的綠色圖示
Material 雙色圖示,取自 https://fonts.google.com/icons

藝術表達

節省空間的彩色字型可在網路上的文字中展現全新的藝術表達方式。這個 Kufi 風格阿拉伯字型的範例使用色階來詮釋傳統書法的墨水流動效果,並將其套用至 Kufi 風格的阿拉伯文書寫方式,這種書寫方式源自於使用尖筆和墨水書寫,而非刻在石頭上。

阿拉伯字母,漸層從黑色變成紅色。
Reem Kufi Ink,由 Khaled Hosny 設計的阿拉伯字體

特徵偵測

目前,您可以透過使用者代理程式嗅探或在 @PixelAmbachtChromaCheck 等程式庫中搜尋,找出瀏覽器引擎是否支援特定的色彩字型格式,以便在畫布上測試色彩符號的算繪。這兩種解決方案都不是最佳做法。功能測試應只偵測特定功能本身,避免探查使用者代理程式。ChromaCheck 程式庫不應需要執行資源密集的 2D 畫布作業,以便判斷支援情形。

Chrome 團隊希望改善這個情況,因此已在 CSS 工作小組中展開一系列討論 [12],提供有關瀏覽器字型技術在 JavaScript 和 CSS 中宣告式支援的資訊。團隊預計在日後的 Chrome 版本中,針對彩色字型和其他字型技術發布高效的功能偵測功能。

如果您想在專案中使用彩色字型,但 COLRv1 僅支援 Chrome,則有兩種方法可供選擇:請字型供應商提供同時包含單色字形的 COLRv1 字型。不支援 COLRv1 的使用者代理程式會改為轉為單色圖形。或者,您也可以使用 ChromaCheck 程式庫或使用者代理程式嗅探功能,判斷是否支援 COLRv1。接著,您可以提供 CSS,在支援的使用者代理程式中載入 COLRv1 字型,並在其他瀏覽器中使用替代字型格式,例如 COLRv0、點陣圖字型格式或 OpenType SVG。

CSS 字型色彩選取器支援

如果使用不同的顏色組合不需要新的字型,將會非常實用。幸好,我們有一個機制:font-palette CSS 屬性。Chrome 團隊正在努力在 Chrome 中支援字型調色盤

COLRv1 字型與您

如果您對 COLRv1 字型感興趣,請向字型供應商洽詢在專案中使用的 COLRv1 彩色字型,試試上述範例和示範,或者不妨直接著手自行製作,並進行實驗。

如果您對 Chrome 中的 COLRv1 有任何意見,請在 blink-dev 電子郵寄清單上發布,或在問題追蹤工具中提出問題。如果您對 COLRv1 字型格式本身有任何意見回饋,請在 COLRv1 規範 GitHub 存放區中回報問題。

我們很高興在 Chrome 98 中,COLRv1 為網路帶來全新的排版創意。

瞭解詳情

如需更多詳細資訊,請參閱下列資源:

如要瞭解 COLRv1 的運作方式,以及如何在 Chrome 中實作,請參閱 Dominik 在 BlinkOn 15 大會上的演講。

特別銘謝

感謝 Behdad Esfahbod、Cosimo Lupo、Peter Constable、Ben Wagner、Werner Lemberg、Dave Crossland、Vladimir Levantovsky、Jonathan Kew、Laurence Penney、Chris Lilley、David Jonathan Ross、Underware、Just van Rossum、Roel Nieskens 和其他人對 COLRv1 的貢獻。