Функции в CSS - это, с одной стороны уже привычные способы назначения цвета или получения url изображения для оформления фона блока или маркера списка, но также возможности расчета некоторых величин или получения переменных. В этой статье мы рассмотрим некоторые практические примеры использования функций в CSS для управления цветом.

  1. Назначение цвета - rgb(), rgba(), hsl(), hsla()
  2. Функция calc()
  3. Функция color()
  4. Функция color-mix()

Назначение цвета - rgb(), rgba(), hsl(), hsla(), lch(), oklch()

Для назначения цвета в CSS существует несколько функций.

Функция  rgb()

Достаточно давно в CSS появилась функция  rgb(), которая позволяла указывать цвет по 3-м каналам Red, Green, Blue в виде числовых значений от 0 до 255. Однако, кроме rgb() давно используются шестнадцатеричные коды типа #a12cf34 или #c3f, в которых каждые 2 цифры-буквы соответствуют также каналам Red, Green, Blue. То есть системы цвета, представленные функцией rgb() и шестнадцатеричные кодом по сути одинаковы, но визуально отличаются друг от друга. На самом деле браузер представляет цвет именно в формате rgb().

Ниже вы можете поэкспериментировать с цветами, получив значение в виде функции rgb() или в виде16-ричного hex-кода.

See the Pen Color Picker by Dario Corsi (@dariocorsi) on CodePen.

Кроме rgb() шестнадцатеричного кода есть еще цветовые форматы в виде функций hsl(), lch(), а также их разновидности в формате hsla() и rgba() с alpha-каналом от 0 до 1.

RGBA Color Picker от Jordan тоже можно использовать:

See the Pen Simple RGBA Color Picker by Jordan (@flyingcar) on CodePen.

Функция hsl()

Итак, мы имеем 2 различные «обертки» одной и той же фундаментальной идеи: передача определенных значений для каналов красного, зеленого и синего. Однако есть и другой формат, знакомый по Figma или Photoshop, например, - это цветовой формат HSL (hue-saturation-lightness).

"Переводится" его аббревиатура так:

  • Hue, или Оттенок: это пигмент, который мы хотим использовать. Допустимые значения находятся в диапазоне от 0 до 360. Мы указываем его в градусах, поскольку шкала круговая (0deg и 360degсоответствует тому же оттенку красного).
  • Saturation, или Насыщенность: насколько пигмента содержится в цвете? Допустимые значения: от 0% до 100%. При 0% пигмента в цвете нет, и он полностью серый. При 100% цвет максимально яркий.
  • Lightness, или Яркость: насколько светлый/тёмный цвет? Допустимые значения: от 0% до 100%. При 0% цвет — угольно-чёрный. При 100% цвет — чисто-белый.

Самое интересное, что все цветовые форматы, которые мы видели до сих пор, существуют уже много-много лет. HSL поддерживался даже в Internet Explorer 9 (выпущенном в 2011 году)!

HSLA color picker представлен ниже.

See the Pen HSLA color picker by HTML-plus (@ambassador) on CodePen.

Все рассмотренные нами форматы цвета — rgb(), шестнадцатеричные коды и hsl()— ограничены «стандартным цветовым пространством RGB», обычно сокращённо обозначаемым как sRGB .

Функция lch()

В HSL насыщенность варьируется от 0% (нет насыщенности) до 100% (полная насыщенность). Это возможно, поскольку мы знаем, что речь идёт о цветовом пространстве sRGB — конечной палитре цветов. Однако есть еще один формат определения цвета -LCH, который означает «Lightness Chroma Hue» (яркость, цветность, оттенок). «Chroma» — это, по сути, синоним «saturation» (насыщенность). Концептуально он очень похож на HSL, но имеет два существенных отличия:

  1. Приоритет отдается человеческому восприятию, поэтому два цвета с одинаковым значением параметра "яркость" будут ощущаться одинаково светлыми.
  2. Он не привязан к какому-либо конкретному цветовому пространству.

На данный момент эта функция имеет довольно хорошую поддержку в браузерах. Также сейчас уже можно использовать такую функцию управления цветом, как oklch().

Вы можете попробовать изменения в цвете на основе функции  lch() в LCH Color Picker от lch.oklch.com либо в примере ниже.

See the Pen Color Picker Wheel (LCH color space) by HTML-plus (@ambassador) on CodePen.

Функция oklch()

А в примере ниже можно "поиграться" с выбором цвета и различных оттенков для основных и вспомогательных элеменов вашей страницы. Автор примера Aman.

See the Pen OKLCH Color picker by Aman (@amanfromsolan-the-looper) on CodePen.

Подробнее о назначении цвета с помощью разных форматов можно прочитать в отдельной статье (англ.)

Функция calc()

Функция calc() в CSS используется для математических вычислений: можно складывать, вычитать, умножать или делить значения с разными единицами — пиксели, проценты, em, vw, и даже углы или числа внутри цветовых функций.

Хотя calc() не может напрямую изменять HEX- или RGB-цвет, она прекрасно работает внутри HSL, где цвет задаётся через три параметра: hsl(<hue>, <saturation>, <lightness>)

А значит, можно динамически управлять, например, яркостью или оттенком через calc(). Например, мы можем изменить насыщенность фона кнопки при наведении с помощью функции calc() так, как это делает функция darken() в SCSS.

See the Pen button color with calc() by HTML-plus (@ambassador) on CodePen.

Либо применим css-переменные и calc() для изменения цвета текста.

See the Pen Untitled by HTML-plus (@ambassador) on CodePen.

Рассмотрим также вариант с изменением цвета фона для body за счет изменения значения яркости вычислением через calc():

See the Pen Change body color by HTML-plus (@ambassador) on CodePen.

Функция color()

Функция  color() — это CSS-функция для задания цветов в любом цветовом пространстве.

Синтаксис: color(<цветовое пространство> <значение1> <значение2> ... [ / <альфа> ] )

где:

  • <цветовое пространство> — пространство, в котором задаются компоненты. Например:
    • srgb — стандартный sRGB (обычные RGB-цвета)
    • display-p3 — более широкий диапазон цветов (HDR, богатые цвета)
    • lab — модель LAB (более естественные переходы)
    • lch — модель LCH (оттенок, насыщенность, яркость)
    • oklab, oklch — новые цветовые пространства, приближенные к человеческому восприятию
  • <значение1>, <значение2>, ... — компоненты цвета (например, R, G, B для sRGB или L, a, b для LAB)
  • [ / <альфа> ] — необязательная альфа-прозрачность (0–1 или %)

Примеры использования:

Преимущества:

  1. Больше контроля над восприятием цвета: пространства lab, lch, oklab позволяют создавать более естественные градиенты и смешения по сравнению с RGB.
  2. Прозрачность через альфа: можно задавать прозрачность внутри функции.
  3. Будущее CSS: color() совместим с color-mix(), color-contrast(), calc() и другими современными функциями работы с цветом.

У этой функции есть пока один жирный минус - браузеры Chrome, Firefox, Safari пока либо частично поддерживают только srgb, либо совсем не поддерживают другие пространства (lab, lch, oklab). То есть реальный рендер браузером элементов с использованием этого значения часто требует конвертации в пространство sRGB для браузеров, потому что именно sRGB — «де-факто» стандарт для экранов.

Пример:

See the Pen color() example by HTML-plus (@ambassador) on CodePen.

Функция color-mix()

Функция color-mix() — это часть нового набора цветовых функций, появившихся в CSS Color Module Level 5. Она позволяет смешивать два цвета прямо в CSS, задавая цветовое пространство и пропорции смешивания — как если бы вы мешали краски на палитре.

Тема color-mix() в CSS сейчас действительно актуальна, ведь это современная возможность работать с цветами “по-настоящему” нативно, без препроцессоров вроде Sass.

Практическое применение color-mix()

  • Создание цветовых тем: динамически варьировать оттенки в светлой и тёмной темах.
  • Ховеры и состояния кнопок: плавно изменять цвет без ручного подбора.
  • Генерация градиентов: смешивать цвета для гармоничных переходов.
  • Стилизация иконок или SVG: менять цвет под фон или тему сайта.

Синтаксис:

где:

  • in <color-space> — обязательный параметр, указывает, в каком цветовом пространстве выполняется смешивание.
    Примеры: srgb, display-p3, hsl, lab, lch.
  • <color1> и <color2> — цвета для смешивания.
  • <percentage> — необязательный параметр, задаёт долю каждого цвета. Если не указано, оба цвета берутся по 50%.

Важно: Если сумма процентов не равна 100%, CSS автоматически нормализует их пропорционально.

Примеры кода с color-mix():

background-color: color-mix(in srgb, red, blue); - красный и синий в пространстве srgb

Результат: фиолетовый оттенок, примерно равный #800080.

background-color: color-mix(in srgb, red 75%, blue); - взять 75% красного и 25% синего.

Результат — более тёплый пурпурный цвет.

Пример в HSL:

background: color-mix(in hsl, hsl(120 100% 50%), hsl(0 100% 50%) 40%);

Пример в LAB:

background: color-mix(in lab, blue, yellow);

Можно смешивать и прозрачные цвета — альфа-канал учитывается.

color: color-mix(in srgb, rgba(255, 0, 0, 0.5), white); - использование прозрачных цветов

LAB работает ближе к человеческому восприятию цвета — смесь будет выглядеть более гармоничной, чем в sRGB.

Можно также микшировать с чёрным или белым, чтобы получить эффект осветления/затемнения. Раньше для этого использовали rgba() или opacity. Теперь можно проще:

Это естественная альтернатива таким приёмам, как функции lighten() и darken() из препроцессора Sass.

Еще один вариант - использование css-переменных:

Так можно создавать динамические цветовые палитры и темы.

Можно даже комбинировать с другими функциями, например:

color: color-mix(in srgb, color(display-p3 1 0 0), currentColor 50%);

Или смешивать с currentColor, чтобы адаптировать оттенок текста к текущему контексту.

Попробуйте смешать цвета в примере ниже.

See the Pen CSS color-mix() Playground by HTML-plus (@ambassador) on CodePen.

Еще один вариант смешивания цветов от Adam Argyle:

See the Pen Interactive CSS color-mix() by Adam Argyle (@argyleink) on CodePen.

Примеры использования функции color-mix()

Изменение при использовании псевдокласса :hover

Пример 1

See the Pen hover-effect with color-mix() by HTML-plus (@ambassador) on CodePen.

Пример 2

See the Pen Button effect on :hover/ :focus by HTML-plus (@ambassador) on CodePen.

Изменение темы сайта/страницы от Jhey

See the Pen Blueprint Theme Toggle w/ View Transitions by Jhey (@jh3y) on CodePen.

Изменение цвета элементов страницы от Ryan Trimble

See the Pen CSS color-mix() Demo by Ryan Trimble (@mrtrimble) on CodePen.

Палитра цветов от Stuart Robson

See the Pen Quick and Dirty Colour Palettes using color-mix() by Stuart Robson (@sturobson) on CodePen.

Изменение цвета в зависимости от темы и css-переменных

See the Pen Dynamic Theme Generator with smooth transitions by HTML-plus (@ambassador) on CodePen.

 

 

 

 

Автор: Админ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *