TGViewer
CSS mind CSS mind @css_mind · 2.64K subscribers
Post #27 2.47K
О color-mix() на март 2021

На прошлой неделе CSSWG рассмотрела несколько ишью о функции color-mix(), поэтому считаю нужным написать о ней подробнее.

Эта функция принимает два значения <color> и возвращает результат их смешивания в заданной пропорции в заданном цветовом пространстве.

Грамматика функции, указанная в спецификации:

color-mix() = color-mix( in <colorspace> , [ <color> && <percentage>? ]#{2})

Более наглядно:

/*
* @param {<colorspace>} --colorspace Цветовое пространство
* @param {<color>} --color1 Первый цвет
* @param {<percentage>} [--p1: 50%] Доля первого цвета
* @param {<color>} --color2 Второй цвет
* @param {<percentage>} [--p2: 50%] Доля второго цвета
*/
color: color-mix(in var(--colorspace), var(--color1) var(-p1), var(--color2) var(-p2))


Проценты нормализуются следующим образом:
1. Пусть p1 будет первым процентом, а p2 - вторым.
2. Если оба процента опущены, каждое из них по умолчанию равно 50% (равное сочетание двух цветов).
3. В противном случае, если p2 опущен, он становится 100% - p1
4. В противном случае, если p1 опущен, он становится 100% - p2
5. Если сумма процентов равна нулю поведение пока не определено
6. Если оба значение опредоставлены, но не дают в сумме 100%, они масштабируются соответствующим образом, чтобы они в сумме составляли 100%. Это означает, что p1 = p1 / (p1 + p2), а p2 = p2 / (p1 + p2).

После нормализации обоих значений результат получается по следующему алгоритму:
1. Оба цвета преобразуются в указанное цветовое пространство. Если заданное цветовое пространство имеет меньшую гамму, чем та, в которой задан цвет, который должен быть настроен, будет выполнено отображение гаммы.
2. Затем цвета интерполируются в указанном цветовом пространстве. Результатом смешивания является указанное процентное соотношение цвета по мере перехода от второго цвета к первому.

Для больше наглядности разберем пример:

color-mix(in lch, peru 40%, lightgoldenrod)

1. peru: lch(62.253% 54.011 63.677)
2. lightgoldenrod: lch(91.374% 31.415 98.821)
3. смешение светлоты: 62.253 * 40/100 + 91.374 * (100-40)/100 = 79.7256
4. смешение количества цвета: 54.011 * 40/100 + 31.415 * (100-40)/100 = 40.4534
5. смешение тона: 63.677 * 40/100 + 98.821 * (100-40)/100 = 84.7634
6. результат: lch(79.7256% 40.4534 84.7634)
Telegram CSSWG weekly 03.03.2021 / 6066 Запятые в функции color-mix() В одном из более ранних ишью было решено убрать запятые. Автор же этого ишью привел пример, в котором очевидно должна быть запятая чтобы понять к какому цвету относится процентное значение: color-mix(in lch…
More from @css_mind
  1. Aug 27, 2026Говорят верстать легко, а мне вот сегодня калькулятор с регрессиией понадобился P.S. Кстат…
  2. Jul 14, 2026Кстати если у вас разные конфиги для разных директорий (например у меня для работы один юз…
  3. Jul 9, 2026Просто напоминаю, что существует сайт на старомонгольском. У него уникальный режим письма:…
  4. May 18, 2026А вы знали, что next ломает вам типизацию перменных? Если вы напишите ... @property --var…
  5. May 12, 2026И еще сегодня очередной день рождения CSS2 🥳🎂 28 годиков. Старше меня!
  6. May 12, 2026Между прочим interpolate-size завезли в хром аж полгода назад. Смотрите что мы теперь може…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →