font-palette

Baseline 廣泛可用 *

此功能已成熟,可跨多種裝置和瀏覽器版本使用。自 ⁨2022 年 11 月⁩起,所有瀏覽器均支援此功能。

* 此特性的某些部分可能存在不同級別的支援。

font-palette CSS 屬性允許指定彩色字型中包含的眾多調色盤之一,使用者代理可以將其用於字型。使用者還可以透過使用 @font-palette-values at-rule 來覆蓋調色盤中的值或建立新的調色盤。

注意:在為字型著色時,font-palette 調色盤優先。即使使用 !important 指定,color 屬性也不會覆蓋字型調色盤。

語法

css
/* Using a font-defined palette */
font-palette: normal;

/* Using a user-defined palette */
font-palette: --one;

/* Creating a new palette by blending two others */
font-palette: palette-mix(in lch, --blue, --yellow);

normal

指定用於字型的預設顏色調色盤或預設字形著色(由字型建立者設定)。使用此設定,將渲染字型中索引為 0 的調色盤。

light

指定字型中第一個匹配“light”的調色盤,用於字型。某些字型包含元資料,用於識別適用於淺色(接近白色)背景的調色盤。如果字型沒有此元資料,則 light 值的行為與 normal 相同。

dark

指定字型中第一個匹配“dark”的調色盤,用於字型。某些字型包含元資料,用於識別適用於深色(接近黑色)背景的調色盤。如果字型沒有此元資料,則該值的行為與 normal 相同。

<palette-identifier>

允許您使用 @font-palette-values at-rule 為字型調色盤指定自己的值。此值使用 <dashed-ident> 格式指定。

palette-mix()

透過按指定百分比和顏色插值方法混合兩個 font-palette 值來建立新的 font-palette 值。

正式定義

初始值normal
應用於所有元素和文字。它也適用於 ::first-letter::first-line
繼承性
計算值同指定值
動畫型別由計算值

正式語法

font-palette = 
normal |
light |
dark |
<palette-identifier> |
<palette-mix()>

<palette-mix()> =
palette-mix( <color-interpolation-method> , [ [ normal | light | dark | <palette-identifier> | <palette-mix()> ] && <percentage [0,100]>? ]#{2} )

<color-interpolation-method> =
in [ <rectangular-color-space> | <polar-color-space> <hue-interpolation-method>? | <custom-color-space> ]

<rectangular-color-space> =
srgb |
srgb-linear |
display-p3 |
display-p3-linear |
a98-rgb |
prophoto-rgb |
rec2020 |
lab |
oklab |
<xyz-space>

<polar-color-space> =
hsl |
hwb |
lch |
oklch

<hue-interpolation-method> =
[ shorter | longer | increasing | decreasing ] hue

<custom-color-space> =
<dashed-ident>

<xyz-space> =
xyz |
xyz-d50 |
xyz-d65

示例

指定深色調色盤

此示例允許您使用字型建立者標記為深色(最適合接近黑色的背景)的第一個調色盤。

css
@media (prefers-color-scheme: dark) {
  .banner {
    font-palette: dark;
  }
}

在兩個調色盤之間進行動畫

此示例說明了如何對 font-palette 值更改進行動畫處理,以建立平滑的字型動畫。

HTML

HTML 包含一個要動畫處理的段落文字

html
<p>color-palette<br />animation</p>

CSS

在 CSS 中,我們從 Google Fonts 匯入一個名為 Nabla彩色字型,並使用 @font-palette-values at-rule 定義兩個自定義 font-palette 值。然後我們建立 @keyframes,在這些調色盤之間進行動畫,並將此動畫應用於我們的段落。

css
@import "https://fonts.googleapis.com/css2?family=Nabla&display=swap";

@font-palette-values --blue-nabla {
  font-family: "Nabla";
  base-palette: 2; /* this is Nabla's blue palette */
}

@font-palette-values --grey-nabla {
  font-family: "Nabla";
  base-palette: 3; /* this is Nabla's grey palette */
}

@keyframes animate-palette {
  from {
    font-palette: --grey-nabla;
  }

  to {
    font-palette: --blue-nabla;
  }
}

p {
  font-family: "Nabla", fantasy;
  font-size: 5rem;
  margin: 0;
  text-align: center;
  animation: animate-palette 4s infinite alternate linear;
}

結果

輸出如下所示

注意:仍然實現 discrete font-palette 動畫的瀏覽器將在兩個調色盤之間切換,而不是平滑地動畫。

規範

規範
CSS 字型模組第 4 級
# font-palette-prop

瀏覽器相容性

另見