Spec-Zone.ru › CSS

`font-palette` CSS property

Baseline Widely available

This feature is well established and works across many devices and browser versions. It's been available across browsers since November 2022.

The font-palette CSS property allows specifying one of the many palettes contained in a color font that a user agent may use for the font. Users can also override the values in a palette or create a new palette by using the @font-palette-values at-rule.

Note: A font-palette palette takes precedence when coloring a font. The color property will not override a font palette, even if specified with !important.

Syntax

/* 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);

Values

This property is specified as a single value from the following list:

normal
Specifies the default color palette or the default glyph colorization (set by the font maker) to be used for the font. With this setting, the palette in the font at index 0 is rendered.
light
Specifies the first palette in the font that matches 'light' to be used for the font. Some fonts contain metadata that identify a palette as applicable for a light (close to white) background. If a font does not have this metadata, the light value behaves as normal.
dark
Specifies the first palette in the font that matches 'dark' to be used for the font. Some fonts contain metadata that identify a palette as applicable for a dark (close to black) background. If a font does not have this metadata, the value behaves as normal.
<dashed-ident>
Allows you to specify your own values for the font palette by using the <palette-identifier> of a @font-palette-values at-rule.
palette-mix()
Creates a new font-palette value by blending together two font-palette values by specified percentages and color interpolation methods.

Formal definition

Initial value normal
Applies to all elements and text
Inherited yes
Computed value as specified
Animation type by computed value

Formal syntax

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

<palette-identifier> = 
  <dashed-ident>

<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 |
  xyz-d50 |
  xyz-d65

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

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

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

Examples

Specifying a dark palette

This example allows you to use the first palette marked as dark (works best on a near black background) by the font-maker.

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

Animating between two palettes

This example illustrates how to animate font-palette value changes to create a smooth font animation.

HTML

The HTML contains a single paragraph of text to animate:

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

CSS

In the CSS, we import a color font called Nabla from Google Fonts, and define two custom font-palette values using the @font-palette-values at-rule. We then create @keyframes that animate between these two palettes, and apply this animation to our paragraph.

@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;
}

Result

The output looks like this:

Note: Browsers that still implement discrete font-palette animation will flip between the two palettes rather than smoothly animating.

Specifications

Specification
CSS Fonts Module Level 4
# font-palette-prop

Browser compatibility

Desktop Mobile
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS
font-palette
101
101
107
87
15.4
101
107
70
15.4
19.0
101
15.4
animation_computed
121
121
No
107
No
121
No
81
No
25.0
121
No
dark
101
101
107
87
15.4
101
107
70
15.4
19.0
101
15.4
light
101
101
107
87
15.4
101
107
70
15.4
19.0
101
15.4
normal
101
101
107
87
15.4
101
107
70
15.4
19.0
101
15.4
palette-mix_function
121
121
No
107
No
121
No
81
No
25.0
121
No

See also

  • palette-mix()
  • @font-palette-values
  • base-palette descriptor
  • font-family descriptor
  • override-colors descriptor

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-palette

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API