Цветовые гармонии: комплементарная, аналоговая, триада и другие
Цветовая гармония выбирает тона на фиксированных углах цветового круга: 180° для комплементарной пары, по 30° для аналоговой, по 120° для триады. Если вращать тон в OKLCH, а не в HSL, цвета остаются одинаково светлыми, и ни один не выпадает из набора случайно.
Читать 5 мин
Что такое цветовая гармония
Гармония это правило подбора цветов, которые сочетаются друг с другом. Берётся базовый цвет, его светлота и насыщенность сохраняются, а тон поворачивается на заданные углы по цветовому кругу.
Углы здесь самое простое. Не менее важно, какой круг вращать: классический HSL и перцептивный OKLCH при одном и том же угле дают заметно разные цвета. Все примеры ниже построены от #2a7fbf, спокойного синего средней светлоты.
| Формат | Значение |
|---|---|
| HEX | |
| HSL | |
| OKLCH |
Комплементарная, сплит, аналоговая, триада, тетрада, квадрат
В каждой строке сохранены светлота базового цвета в OKLCH, 0.577, и его насыщенность, 0.127. Меняется только тон, на углы из таблицы. Если повёрнутый цвет выходит за охват sRGB, насыщенность немного снижается, поэтому пара цветов чуть менее яркие. Монохромная схема устроена иначе: тон тот же, а светлота меняется шагом 0.12.
| Гармония | Углы тона | Цвет 2 | Цвет 3 | Цвет 4 | Цвет 5 |
|---|---|---|---|---|---|
| Комплементарная | 0°, 180° | #ab6708 | |||
| Сплит-комплементарная | 0°, 150°, 210° | #b85a42 | #907800 | ||
| Аналоговая | 0°, −30°, +30° | #008aa7 | #6571c3 | ||
| Триада | 0°, 120°, 240° | #b6566e | #678626 | ||
| Тетрада (прямоугольник) | 0°, 60°, 180°, 240° | #8c64b4 | #ab6708 | #678626 | |
| Квадрат | 0°, 90°, 180°, 270° | #a75a96 | #ab6708 | #258f58 | |
| Монохромная | Тот же тон, L ±0.12, ±0.24 | #00396f | #005b98 | #53a4e7 | #7dcbff |
- Комплементарная: самое сильное напряжение. Второй цвет лучше оставить для мелких акцентов, например для главной кнопки.
- Сплит-комплементарная: та же энергия, но её проще уравновесить, потому что акцент разделён на двух соседей противоположного тона.
- Аналоговая: спокойная и цельная. Хороша для иллюстраций и фонов, слаба, когда один элемент должен выделяться.
- Триада, тетрада и квадрат: живые и трудные в управлении. Пусть один цвет ведёт, а остальные занимают мало места.
- Монохромная: один тон в нескольких ступенях светлоты. Самый надёжный выбор для интерфейсов, ведь контраст всё равно даёт светлота.
Почему круг HSL даёт неровные гармонии
Большинство цветовых кругов в редакторах построены на HSL: они поворачивают тон и сохраняют числа насыщенности и светлоты HSL. Но светлота в HSL это формула, а не то, что видит глаз. Поверните золотисто-жёлтый на 180° в HSL, и получится глубокий синий, который выглядит намного темнее жёлтого.
Поворот в OKLCH сохраняет воспринимаемую светлоту. Вот #f4b400, повёрнутый обоими способами, и светлота OKLCH у каждого результата.
| Роль | Поворот в HSL | L в OKLCH | Поворот в OKLCH | L в OKLCH |
|---|---|---|---|---|
| База | #f4b400 | 0.808 | #f4b400 | 0.808 |
| Комплементарный | #0040f4 | 0.489 | #97c0ff | 0.802 |
| Триада, +120° | #00f4b4 | 0.857 | #00dcec | 0.817 |
| Триада, +240° | #b400f4 | 0.586 | #f299fe | 0.808 |
В наборе HSL светлота гуляет от 0.489 до 0.857: синий и фиолетовый проваливаются, мятный светится. Набор OKLCH держится между 0.802 и 0.817. То же с чистыми основными цветами RGB: #ff0000, #00ff00 и #0000ff образуют идеальную триаду в HSL, но их светлота в OKLCH равна 0.628, 0.866 и 0.452.
Есть и цена. Синий такой же светлый, как этот жёлтый, не может быть очень ярким на экране sRGB, поэтому у комплементарного #97c0ff насыщенность 0.10 вместо 0.166. Приходится выбирать между равной светлотой и равной яркостью, а у пары жёлтый и синий получить обе сразу нельзя.
Художественный круг RYB и экранный круг RGB
Круг из художественной школы это RYB: основные цвета красный, жёлтый и синий, как при смешивании красок. На нём дополнительный к красному это зелёный, а к синему оранжевый. Экран смешивает свет, поэтому цифровые инструменты используют круг RGB, где дополнительный к красному это голубой, а к синему жёлтый.
Ошибки тут нет, просто круги отвечают на разные вопросы. RYB следует традиции живописи, RGB и OKLCH следуют тому, как работают экран и глаз. Если редактор предлагает голубой там, где вы ждали зелёный, значит он использует круг RGB.
| База | Дополнительный в RYB | Дополнительный в RGB (HSL) | Дополнительный в OKLCH |
|---|---|---|---|
| #ff0000 | Зелёный | #00ffff | #009cb2 |
| #0000ff | Оранжевый | #ffff00 | #734f00 |
| #ffff00 | Фиолетовый | #0000ff | #f3f1ff |
Столбец OKLCH показывает, что равная светлота делает с крайними цветами. Дополнительный к чистому синему становится тёмной охрой с той же светлотой 0.45, а дополнительный к чистому жёлтому почти белым лавандовым со светлотой 0.96.
Правило 60-30-10 для гармонии
Гармония говорит, какие цвета взять, но не сколько каждого. Этот пробел закрывает правило 60-30-10: около 60% площади отдают основному цвету, 30% второму и 10% акценту. При равных долях даже удачная гармония выглядит пёстро.
В интерфейсе 60% обычно занимает почти нейтральный цвет с оттенком базового тона, 30% сам базовый цвет, 10% комплементарный акцент. Вот готовый набор от #2a7fbf.
| Роль | Доля | Цвет | OKLCH | Где использовать |
|---|---|---|---|---|
| Основной | 60% | #eff6fd | L 0.97, C 0.012 | Фон страницы, карточки |
| Второй | 30% | #2a7fbf | L 0.577, C 0.127 | Шапка, ссылки, выбранные элементы |
| Акцент | 10% | #ab6708 | L 0.577, C 0.127 | Главная кнопка, выделения |
| Текст | нет | #15232f | L 0.25, C 0.03 | Основной текст на основном цвете |
CSS
:root {
--surface: #eff6fd;
--primary: #2a7fbf;
--accent: #ab6708;
--text: #15232f;
}Как проверить контраст гармонии
Читаемость текста даёт разница в светлоте, а не в тоне. Комплементарная пара выше максимально далека по тону, но #2a7fbf на #ab6708 даёт по WCAG всего 1.05:1, а по APCA Lc 0: как текст это почти невидимо.
У равной светлоты есть и плюс. Белый текст на любом цвете из гармоний OKLCH выше даёт от 4.04:1 до 4.62:1. На HSL-версии тех же гармоний разброс от 2.15:1 до 8.90:1. Поэтому для всего набора OKLCH работает одно исправление: опустите светлоту до 0.52, и белый текст проходит 4.5:1 на любом тоне с насыщенностью 0.127, от 5.00:1 до 5.91:1.
| Текст | Фон | WCAG | APCA Lc | Итог |
|---|---|---|---|---|
| #2a7fbf | #ab6708 | 1.05:1 | 0 | Не читается, светлота одинаковая |
| #ffffff | #2a7fbf | 4.30:1 | -74.8 | Не проходит AA для основного текста |
| #ffffff | #106ead | 5.45:1 | -82.0 | Проходит, база с L 0.52 |
| #ffffff | #995600 | 5.70:1 | -83.3 | Проходит, акцент с L 0.52 |
| #ab6708 | #eff6fd | 4.12:1 | 64.9 | Только крупный текст и иконки |
| #5c2d00 | #d8eafb | 9.42:1 | 82.5 | Комплементарная пара, разведённая по светлоте |
Чтобы поставить два цвета гармонии как текст и фон, разведите их по светлоте: тона оставьте, один цвет опустите примерно к 0.35, другой поднимите к 0.93. Потом проверьте настоящую пару в проверке контраста, а если акцент несёт смысл, прогоните палитру через симулятор нарушений цветового зрения.
Вопросы и ответы
Какие бывают цветовые гармонии?
Основные гармонии: комплементарная (тона на 180° друг от друга), сплит-комплементарная (150° и 210°), аналоговая (по 30° в обе стороны), триада (три тона через 120°), тетрада или прямоугольник (0°, 60°, 180°, 240°), квадрат (четыре тона через 90°) и монохромная (один тон в разных ступенях светлоты).
Какой цвет дополнительный к красному?
Зависит от цветового круга. На художественном круге RYB дополнительный к красному это зелёный. На круге RGB, которым пользуются экраны и редакторы, это голубой, #00ffff для чистого красного, а в OKLCH с той же светлотой это бирюзовый вроде #009cb2.
Почему комплементарные цвета выглядят несбалансированно?
Большинство инструментов вращают тон в HSL, где светлота не совпадает с восприятием. Комплементарный к золотисто-жёлтому #f4b400 в HSL это #0040f4 со светлотой OKLCH 0.489 против 0.808 у жёлтого. Поворот тона в OKLCH оставляет оба цвета одинаково светлыми.
Можно ли ставить комплементарные цвета как текст и фон?
Только если они сильно различаются по светлоте. Комплементарные цвета с одинаковой светлотой, например #2a7fbf и #ab6708, дают контраст всего 1.05:1. Сделайте один тёмным, а другой светлым, например #5c2d00 на #d8eafb даёт 9.42:1.
Что такое правило 60-30-10?
Правило 60-30-10 делит дизайн примерно на 60% основного цвета, 30% второго и 10% акцента. В гармонии основным обычно становится нейтральный цвет с оттенком базового тона, вторым сам базовый цвет, а акцентом комплементарный или цвет из триады.