Системные цвета могут реагировать на текущее значение color-scheme. Функция light-dark() предоставляет авторам те же возможности.
Системные цвета в CSS
В CSS можно использовать множество цветов из одного из множества цветовых пространств. Например, можно использовать названия цветов, шестнадцатеричные коды цветов, функции цвета, связанные с определенным цветовым пространством, и более общую функцию color().
Например, цвет cornflowerblue можно также обозначить как #6495ED, hsl(218.54deg 79.19% 66.08%) или color(display-p3 0.43 0.58 0.9).
Помимо этих различных названий и форматов, CSS включает цвета, описанные как системные цвета, указанные в CSS Color Module Level 4. Эти системные цвета определяются браузером и представлены ключевым словом.
Например, системный цвет Canvas (не путайте с элементом <canvas>) представляет собой фон контента или документов приложения. Оно хорошо сочетается с CanvasText, которое представляет "текст в контенте приложения или документах", и должно использоваться вместе с ним.
В CSS они используются следующим образом:
body {
color: CanvasText;
background-color: Canvas;
}
По умолчанию CanvasText – это цвет, близкий к black, а Canvas – цвет, близкий к white. Реализация зависит от браузера. Например, CanvasText в Chrome дает #121212, а в Safari – немного более светлый #1e1e1e.
Скрытая сила этих системных цветов заключается в том, что они могут реагировать на вычисленное значение свойства color-scheme. Например, значения CanvasText и Canvas меняются местами, если для color-scheme используется dark.
:root {
color-scheme: dark;
}
body {
color: CanvasText;
background-color: Canvas;
}
В демонстрации ниже вы можете изменить значение color-scheme, заданное для :root, и посмотреть, как изменится страница.
- Если задано значение
light dark, это означает, что элемент поддерживает как светлую, так и тёмную тему. Выбор значения зависит от медиаусловияprefers-color-scheme. - Значение
lightуказывает, что элемент поддерживает светлую цветовую схему. - Если задано значение
dark, это означает, что элемент поддерживает темную цветовую схему.
color-scheme. При переключении между светлой и темной темами цвета страницы меняются, хотя объявления в элементе body остаются прежними.Представляем light-dark()
До сих пор реагировать на используемое значение color-scheme могли только системные цвета. Благодаря light-dark(), указанному в CSS Color Module Level 5, теперь у вас есть такая же возможность.
light-dark() – это функция, которая принимает два аргумента, каждый из которых должен быть <color>. Один из них выбирается в зависимости от используемой цветовой схемы.
- Если используется цветовая схема
lightили неизвестная, возвращается вычисленное значение первого значения. - Если используется цветовая схема
dark, возвращается вычисленное значение второго цвета.
Результат функции light-dark() – <color>. Его можно использовать в ССЦ везде, где принимается <color>. Например, в свойствах color и background-color, а также в функции linear-gradient().
В примере ниже используется цвет фона #333 в тёмной теме и #ccc в светлой теме (или неизвестной теме).
:root {
color-scheme: light dark;
}
body {
background-color: light-dark(#ccc, #333);
}
Чтобы light-dark() работало правильно, необходимо указать color-scheme. Поскольку это свойство наследуется, обычно оно задается для элемента :root, но при желании его можно задать для определенного элемента.
Практическое применение
В примере ниже несколько пользовательских свойств представляют цвета на странице. Чтобы обеспечить поддержку тёмной темы, значения этих дополнительных свойств перезаписываются другим значением в медиаусловии prefers-color-scheme.
:root {
--primary-color: #333;
--primary-background: #e4e4e4;
--highlight-color: hotpink;
}
@media (prefers-color-scheme: dark) {
:root {
--primary-color: #fafafa;
--primary-background: #121212;
--highlight-color: lime;
}
}
prefers-color-scheme.Значения цвета изменяются в CSS с помощью запроса медиа.
Благодаря light-dark() этот код можно упростить. Поскольку для color-scheme задано значение light dark в :root, значения этих цветов автоматически меняются при переключении ОС со светлого режима на темную тему и наоборот.
:root {
color-scheme: light dark;
--primary-color: light-dark(#333, #fafafa);
--primary-background: light-dark(#e4e4e4, #121212);
--highlight-color: light-dark(hotpink, lime);
}
prefers-color-scheme.Значения цвета изменяются с помощью
light-dark().Кроме того, можно принудительно задать для определенного поддерева DOM только светлую или темную тему, установив для свойства color-scheme значение dark или light. В примере ниже это применяется к :root.
prefers-color-scheme.Значения цвета изменяются с помощью
light-dark().Используя один из вариантов, вы можете принудительно включить светлую или тёмную тему. Это достигается за счет изменения значения
color-scheme.