files/en-us/web/css/reference/properties/font-palette/index.md
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 {{cssxref("@font-palette-values")}} at-rule.
[!NOTE] A
font-palettepalette takes precedence when coloring a font. The {{cssxref("color")}} property will not override a font palette, even if specified with {{cssxref("important", "!important")}}.
/* 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
light
light value behaves as normal.dark
normal.<palette-identifier>
font-palette value by blending together two font-palette values by specified percentages and color interpolation methods.{{CSSInfo}}
{{CSSSyntax}}
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;
}
}
This example illustrates how to animate font-palette value changes to create a smooth font animation.
The HTML contains a single paragraph of text to animate:
<p>color-palette
animation</p>
In the CSS, we import a color font called Nabla from Google Fonts, and define two custom font-palette values using the {{cssxref("@font-palette-values")}} at-rule. We then create {{cssxref("@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;
}
The output looks like this:
{{EmbedLiveSample("Animating between two palettes", "100%", 300)}}
[!NOTE] Browsers that still implement
discretefont-paletteanimation will flip between the two palettes rather than smoothly animating.
{{Specifications}}
{{Compat}}