Spec-Zone.ru › CSS

Свойство CSS `font-palette`

Базовая поддержка Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она доступна во всех браузерах с ноября 2022 года.

Свойство font-palette CSS позволяет указать одну из множества палитр, содержащихся в цветном шрифте, которую пользовательский агент может использовать для шрифта. Пользователи также могут переопределить значения палитры или создать новую палитру с помощью директивы @font-palette-values.

Примечание: Палитра font-palette имеет приоритет при окрашивании шрифта. Свойство color не переопределяет палитру шрифта, даже если задано с помощью !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
Задаёт палитру по умолчанию или стандартную раскраску глифов (установленную создателем шрифта), которая будет использоваться для шрифта. При этой настройке отображается палитра шрифта с индексом 0.
light
Задаёт первую палитру шрифта, соответствующую значению «светлая». В некоторых шрифтах есть метаданные, указывающие, что палитра подходит для светлого (почти белого) фона. Если в шрифте нет таких метаданных, значение light ведёт себя как normal.
dark
Задаёт первую палитру шрифта, соответствующую значению «тёмная». В некоторых шрифтах есть метаданные, указывающие, что палитра подходит для тёмного (почти чёрного) фона. Если в шрифте нет таких метаданных, значение ведёт себя как normal.
<dashed-ident>
Позволяет задать собственные значения палитры шрифта, используя <palette-identifier> директивы @font-palette-values.
palette-mix()
Создаёт новое значение font-palette, объединяя два значения font-palette в заданных пропорциях и с использованием указанных методов интерполяции цветов.

Формальное определение

Начальное значение normal
Применяется к всем элементам и тексту
Наследуется да
Вычисленное значение как задано
Тип анимации по вычисленному значению

Формальный синтаксис

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>

Примеры

Указание тёмной палитры

В этом примере можно использовать первую палитру, помеченную создателем шрифта как тёмная (лучше всего подходит для почти чёрного фона).

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

Анимация между двумя палитрами

В этом примере показано, как анимировать изменения значения font-palette для создания плавной анимации шрифта.

HTML

HTML содержит один абзац текста для анимации:

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

CSS

В CSS мы импортируем цветной шрифт цветной шрифт под названием Nabla из Google Fonts и определяем два пользовательских значения font-palette с помощью директивы @font-palette-values. Затем мы создаём @keyframes, которые анимируют переход между этими двумя палитрами, и применяем эту анимацию к абзацу.

@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 Fonts Level 4
# font-palette-prop

Совместимость с браузерами

Компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari на iOS Samsung Internet WebView для Android WebView на iOS
font-palette
101
101
107
87
15.4
101
107
70
15.4
19.0
101
15.4
animation_computed
121
121
Нет
107
Нет
121
Нет
81
Нет
25.0
121
Нет
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
Нет
107
Нет
121
Нет
81
Нет
25.0
121
Нет

См. также

  • palette-mix()
  • @font-palette-values
  • base-palette дескриптор
  • font-family дескриптор
  • override-colors дескриптор

© 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