В современном веб-разработке цвет играет решающую роль, задавая настроение, улучшая восприятие контента и повышая удобство пользования сайтом. Несмотря на то, что цвет кажется нам привычным и интуитивным понятием, его истинная природа значительно глубже и сложнее. В последние годы в CSS произошли значительные изменения и расширения в области работы с цветом — появились новые цветовые функции и возможности использования разных цветовых пространств, которые позволяют создавать более точные и насыщенные визуальные решения. Понимание этих нововведений не только поможет создавать привлекательный дизайн, но и обеспечит лучшую совместимость с современными дисплеями и улучшит восприятие цветов пользователем. Первое, что важно понять — цвет в физическом мире не является свойством объекта.
Цвет — результат взаимодействия света с глазом и мозгом человека. Световые волны, отражающиеся от предметов, воспринимаются зрительной системой и интерпретируются как цвет. Поэтому цвет — это субъективное ощущение, зависящее от источника света, характеристик экрана и индивидуальных особенностей восприятия. Чтобы передать точный цвет в цифровом виде, ученые разработали множество систем классификации и описания цвета. В основе лежит цветовое пространство CIEXYZ, созданное Международной комиссией по освещению (CIE) еще в 1931 году.
Это трехмерная модель, которая объединяет все цвета, видимые среднестатистическому человеческому глазу, с помощью трех основных координат, описывающих цвет и яркость. Именно на основе CIEXYZ создаются другие системы и пространства, используемые в дизайне и программировании, включая CSS. Цветовое пространство — это способ математического описания цветов в определенной системе координат. В CSS традиционно использовалось цветовое пространство sRGB — стандарт для большинства дисплеев и устройств. Однако sRGB ограничено в количестве передаваемых оттенков, что не всегда позволяет добиться желаемой насыщенности и реалистичности цвета.
Именно поэтому вместе с развитием технологий появились новые цветовые пространства: display-p3, prophoto-rgb, rec2020 и другие — каждое со своей более широкой гаммой цветов, которых невозможно отобразить в sRGB. Цветовые гаммы (gamut) указывают на диапазон цветов, который доступен в конкретном цветовом пространстве. Например, более широкий gamut означает возможность отображать более насыщенные и разнообразные оттенки. Вместе с тем качество цвета ограничено не только самим цветовыми пространством, но и аппаратными средствами, такими как монитор или камера. Некоторый цвет может быть вне доступа устройства — такой цвет называют вне гаммы (out-of-gamut), и он не будет корректно отображен.
Чтобы работать с цветом в CSS, используются цветовые модели. Модель — это способ описания цвета с помощью набора чисел, как правило трех или четырех. Классические модели — RGB (красный, зеленый, синий), HSL (оттенок, насыщенность, светлота) и HWB (оттенок, насыщенность, белизна). Однако сама модель не определяет конкретный цвет без указания цветового пространства. Например, три числа в RGB могут описывать цвет в sRGB, а могут — в display-p3, и они будут выглядеть по-разному.
В последние годы CSS получил поддержу новых цветовых функций, значительно расширяющих возможности управления цветом. Среди них — color(), цветовые функции для работы в пространстве CIELAB и Oklab, такие как lab(), lch(), oklab(), oklch() и новые функции сведения и контраста цвета, например color-mix() и contrast-color(). Эти функции позволяют разработчикам точнее контролировать эффекты и создавать более гармоничные и адаптивные цветовые схемы. Функция color() открывает доступ к использованию новых цветовых пространств прямо в CSS. С ее помощью можно указывать цвет в display-p3, prophoto-rgb и других пространствах, что особенно важно для современных дисплеев с высокой цветовой точностью.
Помимо этого, color-mix() позволяет смешивать два цвета из любых цветовых пространств, а contrast-color() автоматически подбирает контрастный цвет для обеспечения читаемости и соответствия стандартам доступности. Цветовое пространство CIELAB разработано для достижения большей «перцептуальной однородности». Это значит, что изменения координат в этом пространстве более точно соответствуют визуальным изменениям, воспринимаемым глазом человека. Однако CIELAB все же имеет свои недостатки, особенно на синих оттенках, где возможны искажения при переходах цвета. Для решения этих проблем создана цветовая модель Oklab, которая обеспечивает еще более точное восприятие цвета и лучший контроль над оттенками и светлотой.
Знание и понимание цветовых пространств Oklab и CIELAB особенно полезно для дизайнеров и разработчиков, которые хотят создать плавные, натуральные переходы и градиенты, избегая резких сдвигов в оттенках и цветовых искажений. CSS позволяет использовать эти пространства через функции lab(), lch(), oklab() и oklch(), что открывает перед визуальными художниками и программистами новый уровень художественного контроля. Кроме этого, не стоит забывать о старых добрых color-моделях, таких как rgb(), hsl() и rgba(), которые продолжают использоваться благодаря своей простоте и совместимости с большим количеством браузеров и устройств. Однако важно понимать, что они основаны на sRGB и ограничены его гаммой, что может повлиять на точность цвета на современных широких цветовых дисплеях. Для веб-майнеров и программистов это знание означает необходимость выбирать правильное цветовое пространство в зависимости от задачи.
Например, использование display-p3 и других новых пространств при работе с изображениями высокого качества и цветовыми эффектами, а для базовой верстки и интерфейса достаточно sRGB и классических функций. Кроме технических преимуществ, современные цветовые функции в CSS являются удобным и выразительным инструментом, позволяющим создавать модные и адаптивные дизайны. Они помогают улучшить визуальную консистентность, создавать более выразительные и контрастные цвета, а также обеспечивают поддержку цветовой доступности и адаптацию к условиям окружающей среды. Стоит отметить, что освоение всех аспектов работы с цветом требует времени и практики. Понимание теоретических основ цветового пространства CIEXYZ, моделей и гамет обязательно поможет лучше ориентироваться в новых возможностях CSS и создавать более качественные и функциональные проекты.