Skip to content

Конвертер HEX в OKLCH

Конвертируйте HEX в OKLCH для токенов дизайна Tailwind v4. Живой перцептивно-равномерный вывод с предупреждениями цветового охвата Display P3. Бесплатно, только в браузере.

Без отслеживания Работает в браузере Бесплатно
Вся конвертация цветов происходит локально в браузере. Никакие данные не отправляются на сервер.
Цветовой охват: sRGB Display P3 Rec2020
Контраст против:
AA AA-Lg AAA AAA-Lg · APCA Lc
Симуляция дальтонизма (8 типов)
Протанопия (нечувствительность к красному)
Дейтеранопия (нечувствительность к зелёному)
Тританопия (нечувствительность к синему)
Ахроматопсия (полная)
Протаномалия (слабая чувствительность к красному)
Дейтераномалия (слабая чувствительность к зелёному)
Тританомалия (слабая чувствительность к синему)
Ахроматомалия (частичная)
Tints / Shades / Tones / Harmonies

Светлые оттенки

Тёмные оттенки

Тона

Гармонии

Скопировать как код
Справочник распространённых цветов
Проверено на соответствие CSS Color 4 §11.2 + §15.1, корректность матрицы OKLAB Оттоссона 2020, паритет палитры Tailwind v4, точность определения цветового охвата Display P3 / Rec.2020 и стабильность переходов туда-обратно между HEX и OKLCH в диапазонах 0–1 Lightness, 0–0.4 Chroma и 0–360° Hue. — Go Tools Engineering Team · May 27, 2026

Что такое конвертер HEX в OKLCH?

Конвертер HEX в OKLCH — это небольшая утилита, которая превращает HEX-код цвета (`#3b82f6`) в перцептивно-равномерную тройку Lightness / Chroma / Hue, которая кодирует тот же цвет в пространстве OKLCH (`oklch(0.629 0.193 263.4)`). HEX-коды — это лаконичные строки по основанию 16, которые дизайнеры и разработчики вставляют между Figma, Sketch, Photoshop, PDF брендбуков и CSS-таблицами стилей — три 8-битных канала, упакованные в 6-символьную форму `#RRGGBB`, привязанную к цветовому пространству sRGB, определённому в IEC 61966-2-1 в 1996 году. OKLCH — это полярная форма OKLAB, перцептивно-равномерного цветового пространства Бьорна Оттоссона 2020 года, добавленного в CSS через синтаксис `oklch()` в CSS Color 4 (W3C Candidate Recommendation с 2022 года). Каналы: Lightness (0–1, также записывается как 0–100%), Chroma (от 0 до примерно 0.4 для самых насыщенных sRGB-цветов, сверху не ограничена для цветов с широким охватом) и Hue (0–360°, та же угловая ось, что и в HSL). Поддержка в браузерах появилась во всех вечнозелёных между мартом 2022 (Safari 15.4) и маем 2023 (Firefox 113), Chrome 111 — в середине (март 2023); совокупное покрытие caniuse — более 94%. Пример: Tailwind blue-500 — это `oklch(0.629 0.193 263.4)`.

**Перцептивная равномерность — почему это важно.** В OKLCH (и его прямоугольном собрате OKLAB) равная числовая дистанция по каналу L соответствует равной воспринимаемой дистанции по яркости — по каждому оттенку, на каждом уровне chroma, в каждой области цветового пространства. В HSL равные значения L выглядят неравномерно яркими по оттенкам, потому что HSL наследует гамма-особенности sRGB: зелёный в `hsl(120 100% 50%)` выглядит заметно ярче, чем синий в `hsl(240 100% 50%)`, хотя оба сообщают L=50%. Структурная причина в том, что HSL выводит L геометрически (среднее канального max и min в гамма-кодированном sRGB), тогда как OKLCH выводит L из перцептивно-привязанной модели, которая сначала линеаризует и проходит через стадию LMS-отклика конусов. Практический итог: удержание L постоянной по оттенкам в OKLCH даёт визуально-эквивалентную яркость — зелёный в `oklch(0.7 0.2 130)` и синий в `oklch(0.7 0.2 250)` выглядят одинаково яркими на экране. Именно поэтому Tailwind v4 перевёл свою палитру по умолчанию на OKLCH-шкалы в 2025 году — каждый шаг оттенка (50, 100, 200, …, 900, 950) попадает в одну и ту же воспринимаемую разницу светлоты, поэтому брендовые цвета чувствуются согласованными по оттенкам без ручной по-цветовой настройки.

**Tailwind v4 и революция дизайн-токенов.** Tailwind v4 (вышел в январе 2025) заменил свою генерацию цветов на основе HSL системой на основе OKLCH. shadcn/ui последовал вскоре, приняв OKLCH для своей темы CSS-переменных; Radix Colors v3 тоже его приняли. Почему сейчас: дизайн-системам нужны оттенки, которые выглядят равномерно расставленными по всей палитре, и нужно, чтобы это свойство автоматически держалось по мере роста палитры. С HSL дизайнерам приходилось вручную корректировать каждый шаг — поднимать L ещё на 5% на тёмном конце шкалы синего, чтобы совпасть с тёмным концом шкалы зелёного, затем снова поднимать, когда бренд эволюционировал. С OKLCH одна формула (шагать L на 0.1, удерживать C и H постоянными) даёт согласованные шкалы автоматически. Реальный пример: в Tailwind v3 `red-500` и `blue-500` имели заметно разный воспринимаемый вес, несмотря на одинаковый HSL L%; в v4 `red-500` и `blue-500` выглядят сбалансированно, потому что оба сидят на одной OKLCH L. Это важно для доступности (согласованный контраст против общих фонов означает, что состояния компонентов чувствуются равномерно по палитре), для согласованности бренда (визуальная иерархия держится по палитрам — кнопка `primary` и кнопка `accent` при одинаковой L чувствуются как один и тот же уровень иерархии) и для эргономики разработчика (одна ментальная модель вместо десятков вручную настроенных исключений, похороненных в спецификации дизайн-токенов).

**Последствия для широкого охвата.** OKLCH не ограничен — он может представлять цвета за пределами sRGB, включая всё, что могут воспроизвести Display P3 и Rec.2020. Это делает его естественным выбором для современных дисплеев с широким охватом. Большинство устройств Apple с 2017 года (iPhone 7 и далее, MacBook Pro с 2016 года, каждый iPad Pro) отрисуют Display P3 нативно, и многие современные Android-устройства и экраны ноутбуков тоже. Компромисс: не каждая тройка OKLCH отображается в валидный sRGB-цвет. Инструмент показывает три бейджа цветового охвата — sRGB, Display P3, Rec.2020 — поэтому вы сразу видите, корректно ли отобразится текущий OKLCH на конкретной цели. Когда цвет только для sRGB, кнопка **Snap to sRGB** использует бинарное уменьшение chroma (по информативному алгоритму отображения цветового охвата CSS Color 4 §13), чтобы ужать цвет в охват, сохраняя L и H — давая HEX-fallback, который вы можете поставлять через `@supports not (color: oklch(0 0 0))` рядом с исходным значением OKLCH для клиентов с более широким охватом.

**Математика конвертации HEX → OKLCH.** Конвейер хорошо определён и опирается на два первоисточника: W3C CSS Color 4 для стадий sRGB и XYZ, Оттоссон 2020 — для стадии OKLAB. Шаг один: распарсить `#RRGGBB` в три 8-битных целых канала sRGB через `parseInt(hex.slice(1, 3), 16)` на канал. Шаг два: нормализовать каждый канал в 0–1, разделив на 255. Шаг три: гамма-декодировать в линейный sRGB через кусочную функцию CSS Color 4 §11.2 (`v <= 0.04045 ? v/12.92 : ((v+0.055)/1.055)^2.4`). Шаг четыре: умножить на матрицу §15.1 3×3, чтобы получить координаты CIE XYZ D65. Шаг пять: умножить на матрицу LMS Оттоссона (из его эталонной реализации 2020 года) и взять кубический корень каждого канала. Шаг шесть: умножить на матрицу OKLAB Оттоссона, чтобы получить L / a / b. Шаг семь: декартовы координаты в полярные — `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`, обернуть H в 0–360°. Полный конвейер выполняется за микросекунды — каждое нажатие клавиши заново отрисовывает вывод OKLCH мгновенно без debounce.

Рабочий процесс HEX → OKLCH в этом инструменте — это одно направление семейства из 5 спиц, которые все используют один и тот же базовый унифицированный конвертер цветов. Специализированный унифицированный конвертер цветов — это хаб: он показывает все 9 форматов одновременно редактируемыми и это правильный инструмент, когда вашему рабочему процессу нужно больше, чем HEX и OKLCH. Однонаправленные спицы целятся в конкретные поисковые интенты Google: конвертер HEX в RGB для направления canvas-и-аппаратура, конвертер RGB в HEX для обратного, конвертер HEX в HSL для legacy цилиндрического дизайнерского пространства, всё ещё используемого во многих кодовых базах Tailwind v3, и конвертер HEX в CMYK для приближений подготовки к печати. Все пять спиц и хаб внутри используют один и тот же OKLCH как источник истины и те же матрицы Оттоссона 2020, поэтому результаты гарантированно идентичны во всём семействе. Каждая конвертация выполняется локально в браузере — ваши HEX-коды никогда не загружаются, никогда не логируются и ноль сетевых запросов срабатывает по мере ввода. Проверьте в DevTools. Чтобы глубже разобраться, почему OKLCH стал стандартом дизайн-систем в 2024–2026 годах, прочитайте наш сопутствующий гид: Цветовое пространство OKLCH — почему его принял Tailwind v4.

// sRGB hex → OKLCH per W3C CSS Color 4 + Ottosson 2020
// References: https://www.w3.org/TR/css-color-4/#color-conversion-code
//             https://bottosson.github.io/posts/oklab/
// Worked example: #3b82f6 (Tailwind blue-500) → oklch(0.629 0.193 263.4)
function hexToOklch(hex) {
  const h = hex.trim().replace(/^#/, '');
  const srgb = [0, 2, 4].map(i => parseInt(h.slice(i, i + 2), 16) / 255);
  // sRGB → linear-sRGB (CSS Color 4 §11.2 piecewise gamma)
  const lin = srgb.map(v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4));
  const [lr, lg, lb] = lin;
  // linear-sRGB → XYZ D65 (CSS Color 4 §15.1 matrix)
  const x = 0.4124564 * lr + 0.3575761 * lg + 0.1804375 * lb;
  const y = 0.2126729 * lr + 0.7151522 * lg + 0.0721750 * lb;
  const z = 0.0193339 * lr + 0.1191920 * lg + 0.9503041 * lb;
  // XYZ D65 → LMS (Ottosson 2020), cube-root, → OKLAB
  const l_ = Math.cbrt(0.8189330101 * x + 0.3618667424 * y - 0.1288597137 * z);
  const m_ = Math.cbrt(0.0329845436 * x + 0.9293118715 * y + 0.0361456387 * z);
  const s_ = Math.cbrt(0.0482003018 * x + 0.2643662691 * y + 0.6338517070 * z);
  const L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;
  const a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;
  const b = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;
  // OKLAB → OKLCH (Cartesian to polar)
  const C = Math.sqrt(a * a + b * b);
  const H = (Math.atan2(b, a) * 180 / Math.PI + 360) % 360;
  return `oklch(${L.toFixed(3)} ${C.toFixed(3)} ${H.toFixed(1)})`;
}
console.log(hexToOklch('#3b82f6')); // → oklch(0.629 0.193 263.4)

Ключевые возможности

Перцептивно-равномерный вывод по всем оттенкам

Канал L в OKLCH привязан к перцептивной модели OKLAB (Оттоссон 2020), поэтому каждый шаг L выглядит как одна и та же смена яркости по всем оттенкам — зелёный в `oklch(0.7 0.2 130)` и синий в `oklch(0.7 0.2 250)` читаются как одинаково яркие на экране. Это и есть то структурное свойство, которое позволяет Tailwind v4 автоматически генерировать визуально-равномерные шкалы без ручной по-цветовой настройки, — то же свойство, которое эквивалентная HSL-шкала гарантировать не может, потому что HSL наследует гамма-особенности sRGB.

Готово для Tailwind v4 — бросайте в блоки @theme

Вывод OKLCH использует форму CSS Color 4 через пробел (`oklch(0.629 0.193 263.4)`) — точный синтаксис, который Tailwind v4 ожидает внутри блока `@theme` как `--color-primary: oklch(0.629 0.193 263.4);`. Точность L совпадает с опубликованной точностью палитры Tailwind (три знака после запятой для L и C, один знак после запятой в градусах для H), поэтому рабочий процесс вставки в конфиг даёт идентичные токены тем, которые Tailwind поставляет по умолчанию. Сочетайте со сниппетом Tailwind v4 в разделе Copy as code для полной строки токена.

Бейджи цветового охвата Display P3 + Rec.2020

Три живых бейджа (sRGB, Display P3, Rec.2020) помечают, попадает ли текущая тройка OKLCH в воспроизводимый диапазон каждого пространства. Полезно, потому что OKLCH не ограничен — многие высоко-chroma цвета выходят за пределы sRGB, но вписываются в P3, который большинство устройств Apple с 2017 года могут отрисовать нативно. Бейджи краснеют при выходе за пределы охвата, чтобы вы могли решить, оставить ли значение с широким охватом для современных дисплеев или приклеить к sRGB для универсальной совместимости. Проверка диапазона каналов выполняется на каждое нажатие клавиши.

Snap to sRGB для legacy-совместимости

Кнопка Snap to sRGB запускает бинарное уменьшение chroma (информативный алгоритм CSS Color 4 §13): удерживать L и H зафиксированными, искать C вниз, пока результирующая конвертация в sRGB не останется в охвате. Поиск завершается за ~30 итераций с субпиксельной точностью. Сохранение L и H означает, что приклеенный цвет читается как тот же оттенок-семья при той же яркости — он просто теряет насыщенность, что и есть наименее визуально-резкий компромисс. Приклеенный HEX сочетается с исходным OKLCH через `@supports not (color: oklch(0 0 0))` для многослойного fallback.

Мгновенная конвертация на каждое нажатие клавиши

Кнопки Convert нет. Введите один символ в поле HEX, и поле OKLCH обновится в том же кадре анимации. Внутреннее каноническое представление — это сама тройка OKLCH, поэтому редактирование OKLCH напрямую равно быстрое — курсор остаётся там, где вы его поставили, перерисовываются только остальные поля форматов. Математика конвертации (sRGB → linear → XYZ → LMS → OKLAB → polar) выполняется за микросекунды; никакого debounce, никакой задержки, никакой видимой перекомпоновки.

Рабочий пример через конвейер W3C + Оттоссон 2020

Раздел с примером кода поставляет рабочую JavaScript-реализацию полного конвейера HEX → OKLCH, использующую точные матрицы и гамма-функцию, опубликованные в W3C CSS Color 4 (§11.2 кусочная гамма, §15.1 матрица linear-sRGB → XYZ D65) и эталонную реализацию OKLAB Бьорна Оттоссона 2020 года. Вставьте в Node REPL и проверьте, что `#3b82f6` даёт `oklch(0.629 0.193 263.4)`. Каждое значение матрицы скопировано из своего первоисточника — без перевыводов или округлений.

Двунаправленно с HSL / RGB / HEX в унифицированном хабе

Хотя эта спица целится конкретно в HEX → OKLCH, та же страница поднимает и остальные восемь полей форматов — RGB для аппаратуры, HSL для legacy CSS, OKLAB для математики палитр, HSV/HWB для пипеток, CMYK для печати и ближайший именованный CSS-цвет. Внутренний OKLCH как источник истины означает, что каждое поле бит-стабильно при переходах туда-обратно: HEX → OKLCH → HSL → HEX восстанавливает исходный HEX. Кликните в любое поле, чтобы редактировать его напрямую, и наблюдайте, как остальные обновляются.

Сводка поддержки браузеров инлайн

Инструмент поднимает канонические данные поддержки браузеров, где это уместно: Chrome и Edge 111 (март 2023), Safari 15.4 (март 2022 — самая ранняя), Firefox 113 (май 2023), совокупное покрытие caniuse более 94%. Для старых клиентов оборачивайте токены в `@supports (color: oklch(0 0 0))` и предоставляйте HEX-fallback в альтернативной ветке. Вывод Snap to sRGB — это именно тот fallback, генерируемый автоматически из текущей тройки OKLCH — никакой ручной настройки chroma не нужно.

100% в браузере — без загрузки, без отслеживания

Весь парсинг HEX, конвертация OKLCH, определение цветового охвата, оценка контраста и генерация палитр работают локально в браузере. Ваши HEX-коды никогда не передаются, никогда не логируются ни на одном сервере, никогда не анализируются. Ноль сетевых запросов по мере ввода — проверьте в DevTools. Безопасно для необъявленных брендовых палитр, внутренних дизайн-токенов для невыпущенных продуктов, черновых мокапов под NDA и любой другой конфиденциальной работы с цветом, где значение не может утечь.

Альтернативы конвертеру HEX в OKLCH

OKLCH.com

браузерный инструмент

Красиво построенный OKLCH-ориентированный инструмент от Андрея Ситника (автора полифилла postcss-oklab-function и Autoprefixer). Лучший в классе для чистого исследования OKLCH с пипеткой с учётом широкого охвата, визуализацией с учётом P3 и генерацией палитр. Не покрывает HEX/RGB/HSL/CMYK как основные выводы — сфокусирован только на OKLCH. Берите OKLCH.com, когда занимаетесь глубокой OKLCH дизайн-работой; берите этот инструмент, когда вам также нужна кросс-пространственная конвертация и возможности охвата/контраста/CVD.

Документация палитры Tailwind v4

справочная документация

Документация Tailwind v4 публикует полную палитру по умолчанию в OKLCH вместе с HEX-эквивалентами. Лучше всего для поиска точного оттенка Tailwind (`blue-500` → `oklch(0.629 0.193 263.4)`) или подбора кастомных цветов под визуальный вес оттенка Tailwind. Не интерактивно — нет конвертации произвольных HEX-кодов. Этот инструмент покрывает ту же точность OKLCH и работает для любого HEX, не только для 200+ значений Tailwind по умолчанию.

Песочница ColorJS.io

браузерный инструмент

ColorJS.io — авторитетная библиотека CSS-цветов от Lea Verou и Chris Lilley; песочница выставляет полный граф конвертации (HEX, RGB, HSL, HWB, LCH, OKLCH, OKLAB, P3, Rec2020, ProPhoto, A98). Глубоко корректная математика, идеальна для работы с цветом на уровне спецификации. UI ориентирован на разработчиков (не на дизайнеров) и не имеет возможностей контраста / CVD / палитр. Сочетайте с этим инструментом: используйте ColorJS.io для математики, которую иначе нельзя проверить, используйте этот инструмент для активных рабочих процессов.

Генератор тем shadcn/ui

браузерный инструмент

Генератор тем shadcn от Vercel производит готовые к вставке темы CSS-переменных OKLCH для проектов shadcn/ui. Лучше всего для end-to-end генерации темы, когда конечный продукт — конфиг-файл shadcn. Не поднимает промежуточные значения OKLCH для произвольных HEX-кодов — сфокусирован на полном рабочем процессе темы. Используйте генератор shadcn, когда строите тему shadcn; используйте этот инструмент, когда нужен OKLCH любого отдельного цвета.

ColorHexa

браузерный инструмент

Долгоживущие SEO-страницы по каждому цвету с глубокими метаданными. Недавно добавили поддержку OKLCH вместе с HEX/RGB/HSL/CMYK. UI устарел (начало 2010-х), нет определения широкого охвата, нет контраста APCA. Сильны для SEO-обнаружения конкретного HEX через Google; слабее для активных рабочих процессов конвертации, где UX с едиными полями и возможности охвата/контраста важны. Этот инструмент выигрывает по каждой оси активного рабочего процесса.

Пипетка цвета в DevTools браузера

встроенная возможность браузера

DevTools Chrome, Firefox и Safari все поставляют пипетку, которая переключается между HEX, RGB, HSL, HWB и OKLCH инлайн, когда вы кликаете на образец цвета в CSS-панели. Бесплатно, без установки, всегда доступно. Не имеет бейджей цветового охвата, оценки контраста, симуляции дальтонизма и экспорта кода для не-веб-платформ (SwiftUI, Compose). Берите DevTools, когда уже отлаживаете CSS; берите этот инструмент, когда нужен кросс-платформенный вывод или более глубокие проверки.

Culori CLI

command-line библиотека

Culori — самая тщательная JavaScript-библиотека цветов с поддержкой OKLCH; её CLI обрабатывает конвертацию HEX → OKLCH как однострочник (`culori convert '#3b82f6' --to oklch`). Отлично для CI-скриптов и пакетной миграции токенов. Нет визуальной пипетки или бейджей охвата. Используйте Culori CLI для автоматизации; используйте этот инструмент для интерактивной работы с одним цветом и мгновенной визуальной обратной связи.

Примеры HEX в OKLCH

Миграция HSL-палитры Tailwind 3 → токены OKLCH v4

#3b82f6

Вывод OKLCH: `oklch(0.629 0.193 263.4)`. Канонический рабочий процесс миграции на Tailwind v4: определите брендовый цвет один раз в блоке `@theme` как `--color-primary: oklch(0.629 0.193 263.4)`, затем стройте светлые оттенки, шагая L вверх (`oklch(0.7 0.193 263.4)`, `oklch(0.8 0.15 263.4)`), и тёмные — шагая L вниз (`oklch(0.5 0.193 263.4)`, `oklch(0.4 0.18 263.4)`). Оттенок зафиксирован на 263.4°, chroma якорена около 0.19, светлота — единственная ось, которая движется. Одномерная шкала читается как визуально-равномерная по всему диапазону, чего эквивалентная HSL-шкала гарантировать не может.

Миграция дизайн-токенов с перцептивно-равномерными тёмными оттенками

#FF5733

Вывод OKLCH: примерно `oklch(0.66 0.18 28)`. Чтобы построить 5-ступенчатую шкалу тёмных оттенков из этого брендового оранжевого, удерживайте C = 0.18 и H = 28 постоянными и шагайте L через 0.3, 0.45, 0.6, 0.75, 0.9 — получая `oklch(0.3 0.18 28)` … `oklch(0.9 0.18 28)`. Каждая соседняя пара ощущается как один и тот же визуальный скачок яркости, потому что L в OKLCH привязана к перцептивной модели OKLAB (Оттоссон 2020), а не к гамма-запутанной геометрической L в HSL. Chroma может тихо обрезаться в сторону sRGB на крайних значениях; бейджи цветового охвата инструмента точно укажут, какие шаги требуют внимания.

OKLCH с широким охватом → fallback в sRGB для сайтов на Tailwind v3

#FF1744

Вывод OKLCH: приблизительно `oklch(0.62 0.27 26)`. Высоко-chroma-красный вроде этого выходит за пределы куба sRGB — бейдж **sRGB** загорается красным, бейдж **Display P3** подтверждает, что цвет вписывается в P3, а Rec.2020 тоже его покрывает. На стандартном 24-битном мониторе он отрисуется как обесцвеченное приближение; на дисплее Display P3 (большинство устройств Apple с 2017 года) — насыщенным. Нажмите **Snap to sRGB**, чтобы запустить алгоритм бинарного уменьшения chroma (CSS Color 4 §13, информативный) — L и H остаются зафиксированы, а C уменьшается, пока цвет не впишется, давая HEX-fallback, подходящий для кодовой базы Tailwind v3, которая по-прежнему использует 8-битные HEX-токены.

Миграция темы shadcn/ui

#0f172a

Вывод OKLCH: приблизительно `oklch(0.21 0.04 264.7)`. shadcn/ui перенёс свою CSS-переменную тему на OKLCH вскоре после релиза Tailwind v4, и `#0f172a` (Tailwind slate-900) — это канонический фон тёмного режима. Инструмент воспроизводит опубликованное shadcn значение OKLCH для того же HEX, поэтому вы можете проверить, что портированная сообществом тема совпадает с upstream-определением. Сочетайте с рядом контраста, чтобы убедиться, что текст тёмного режима (белый или близкий к белому) по-прежнему проходит WCAG AA против этого фона — `oklch(0.21 ...)` против `oklch(1 0 0)` даёт комфортное отношение 16:1.

Построить пару тёмная/светлая Tailwind v4 из брендового HEX

#3b82f6

Вывод OKLCH: `oklch(0.629 0.193 263.4)`. Чтобы вывести согласованную пару тёмная/светлая для темы, поворачивайте только канал L, удерживая C и H постоянными: основной цвет светлого режима становится `oklch(0.7 0.15 263)` (чуть ярче, чуть менее chroma, чтобы избежать утомления глаз на белых фонах), основной цвет тёмного режима становится `oklch(0.5 0.18 263)` (чуть темнее, чуть более chroma, чтобы сохранить выразительность на тёмных фонах). Оба варианта читаются как одна и та же брендовая идентичность, потому что оттенок зафиксирован; перцептивный сдвиг L балансирует читаемость в обоих режимах без ручной поканальной настройки RGB.

Распространённые конвертации HEX → OKLCH (Tailwind v4)

Справочная таблица 10 популярных средних оттенков из палитры по умолчанию Tailwind v4 с их HEX и OKLCH эквивалентами. Значения соответствуют опубликованной точности палитры Tailwind v4 (три знака после запятой для L и C, целое или один знак после запятой для H).

Tailwind slate-500

#64748b oklch(0.55 0.04 257)

Slate-500 по умолчанию Tailwind CSS — нейтральный холодный серый, используемый для основного текста, второстепенных поверхностей и неакцентированных UI-элементов. Низкая chroma (0.04) удерживает его визуально нейтральным.

#64748b oklch(0.55 0.04 257)

slate — каноническая нейтральная шкала для тем, дружественных к тёмному режиму, — каждый оттенок slate сидит на очень низкой chroma, поэтому читается как серый, а не как сине-отливающий.

Нужна полная пипетка цвета с RGB, HSL, CMYK, предупреждениями цветового охвата и экспортом кода? Попробуйте унифицированный конвертер цветов — каждый формат одновременно редактируется.

Tailwind gray-500

#6b7280 oklch(0.55 0.03 258)

Gray-500 по умолчанию Tailwind CSS — истинно-нейтральный аналог slate. Чуть более низкая chroma, чем у slate (0.03 против 0.04), для более ахроматичного вида.

#6b7280 oklch(0.55 0.03 258)

gray и slate сидят почти на идентичной L (0.55) — воспринимаемая яркость совпадает, и только крошечная разница в chroma их различает.

Нужна полная пипетка цвета с RGB, HSL, CMYK, предупреждениями цветового охвата и экспортом кода? Попробуйте унифицированный конвертер цветов — каждый формат одновременно редактируется.

Tailwind red-500

#ef4444 oklch(0.64 0.21 25)

Red-500 по умолчанию Tailwind CSS — канонический красный для разрушительных действий / ошибок. Высокая chroma (0.21) удерживает его выразительным на нейтральных фонах.

#ef4444 oklch(0.64 0.21 25)

red-500 сидит на L=0.64, совпадая с blue-500 при L=0.63 — шкалы v4 перцептивно сбалансированы по оттенкам, в отличие от палитры v3 на основе HSL.

Нужна полная пипетка цвета с RGB, HSL, CMYK, предупреждениями цветового охвата и экспортом кода? Попробуйте унифицированный конвертер цветов — каждый формат одновременно редактируется.

Tailwind orange-500

#f97316 oklch(0.71 0.19 42)

Orange-500 по умолчанию Tailwind CSS — тёплый акцентный оттенок и CTA. Сидит между красным и янтарным на круге оттенков (42°).

#f97316 oklch(0.71 0.19 42)

Более высокая L у orange-500 (0.71) против L у red-500 (0.64) намеренна — жёлтые и оранжевые выглядят яркими при более низкой перцептивной L, чем красные.

Нужна полная пипетка цвета с RGB, HSL, CMYK, предупреждениями цветового охвата и экспортом кода? Попробуйте унифицированный конвертер цветов — каждый формат одновременно редактируется.

Tailwind amber-500

#f59e0b oklch(0.76 0.16 70)

Amber-500 по умолчанию Tailwind CSS — оттенок предупреждения / внимания, между оранжевым и жёлтым на круге.

#f59e0b oklch(0.76 0.16 70)

amber-500 попадает на самую высокую L (0.76) из любого Tailwind-цвета уровня 500 — жёлтым естественно нужна более высокая L, чтобы выглядеть визуально как «средний тон».

Нужна полная пипетка цвета с RGB, HSL, CMYK, предупреждениями цветового охвата и экспортом кода? Попробуйте унифицированный конвертер цветов — каждый формат одновременно редактируется.

Tailwind green-500

#22c55e oklch(0.72 0.19 149)

Green-500 по умолчанию Tailwind CSS — оттенок успеха / подтверждения. Сидит на 149° на круге оттенков, в зоне циан-зелёного.

#22c55e oklch(0.72 0.19 149)

green-500 при L=0.72 чуть ярче, чем red-500 при L=0.64 — это совпадает с перцептивной реальностью (зелёные выглядят яркими) и даёт палитре сбалансированный визуальный вес.

Нужна полная пипетка цвета с RGB, HSL, CMYK, предупреждениями цветового охвата и экспортом кода? Попробуйте унифицированный конвертер цветов — каждый формат одновременно редактируется.

Tailwind teal-500

#14b8a6 oklch(0.7 0.13 184)

Teal-500 по умолчанию Tailwind CSS — холодный акцентный оттенок между зелёным и циан. Более низкая chroma, чем у green-500, потому что высоко-chroma циан легко выходит за пределы sRGB.

#14b8a6 oklch(0.7 0.13 184)

H у teal-500 = 184° сидит чуть после циан (180°) — чистый циан в OKLCH сложно выразить в sRGB без обрезки chroma; teal — практический компромисс.

Нужна полная пипетка цвета с RGB, HSL, CMYK, предупреждениями цветового охвата и экспортом кода? Попробуйте унифицированный конвертер цветов — каждый формат одновременно редактируется.

Tailwind blue-500

#3b82f6 oklch(0.63 0.19 263)

Blue-500 по умолчанию Tailwind CSS — канонический «веб-синий» 2020-х, бренд-якорный цвет для палитры v4 и темы по умолчанию shadcn/ui.

#3b82f6 oklch(0.63 0.19 263)

blue-500 — это эталонный цвет, чаще всего используемый как стартовая точка миграции на OKLCH Tailwind v4 — вставьте #3b82f6 сюда, чтобы проверить конвертацию против опубликованного значения.

Нужна полная пипетка цвета с RGB, HSL, CMYK, предупреждениями цветового охвата и экспортом кода? Попробуйте унифицированный конвертер цветов — каждый формат одновременно редактируется.

Tailwind indigo-500

#6366f1 oklch(0.59 0.21 277)

Indigo-500 по умолчанию Tailwind CSS — холодный акцентный спутник синего, сидит на 277° (в сторону фиолетового). Высокая chroma (0.21) даёт ему выразительность.

#6366f1 oklch(0.59 0.21 277)

indigo-500 сидит на более низкой L, чем blue-500 (0.59 против 0.63) — более глубокий оттенок поглощает больше кажущейся яркости, и шкала v4 учитывает это перцептивно.

Нужна полная пипетка цвета с RGB, HSL, CMYK, предупреждениями цветового охвата и экспортом кода? Попробуйте унифицированный конвертер цветов — каждый формат одновременно редактируется.

Tailwind violet-500

#8b5cf6 oklch(0.6 0.24 295)

Violet-500 по умолчанию Tailwind CSS — фиолетово-акцентный оттенок на 295°. Самая высокая chroma (0.24) из любого Tailwind-цвета уровня 500, часто используется для AI / творческо-продуктового брендинга.

#8b5cf6 oklch(0.6 0.24 295)

Высокая C=0.24 у violet-500 ставит его близко к потолку охвата sRGB — поднимите выше, и он пересечёт в территорию широкого охвата только-P3.

Нужна полная пипетка цвета с RGB, HSL, CMYK, предупреждениями цветового охвата и экспортом кода? Попробуйте унифицированный конвертер цветов — каждый формат одновременно редактируется.

Как пользоваться конвертером HEX в OKLCH

  1. 1

    Вставьте HEX-код в поле HEX

    Бросьте любое HEX-значение во ввод HEX — с ведущим `#` или без, в 3-значном сокращении (`#F73`), 6-значной полной форме (`#3b82f6`), 4-значном альфа-сокращении (`#F738`) или 8-значной альфа-полной форме (`#FF573380`). Парсер нормализует все пять входных форм в один и тот же внутренний цвет перед выводом OKLCH. Регистр не имеет значения (`#3b82f6` и `#3B82F6` парсятся идентично). Невалидные символы или неверное число цифр дают тихую инлайн-ошибку; валидный HEX обновляет все остальные поля форматов в реальном времени, включая OKLCH.

  2. 2

    Считайте тройку OKLCH из поля OKLCH

    Поле OKLCH поднимает значение в современной форме из CSS Color 4: `oklch(0.629 0.193 263.4)` для непрозрачного цвета, `oklch(0.629 0.193 263.4 / 0.5)` для цвета с альфой. L округляется до трёх знаков после запятой (совпадает с опубликованной точностью Tailwind v4), C — до трёх знаков, H — до одного знака после запятой в градусах. Внутренний OKLCH как источник истины в инструменте означает, что точность float сохраняется по всем остальным полям — переходы туда-обратно обратно в HEX остаются бит-стабильными, в отличие от legacy-конвертеров, маршрутизирующих через HSL, которые дрейфят на градус-другой за каждый цикл.

  3. 3

    Нажмите Copy, чтобы получить строку OKLCH

    У каждой карточки формата есть кнопка Copy справа. Один клик — и значение оказывается в буфере обмена; метка кнопки кратко переключается на «Copied!», чтобы вы знали. Скопированная строка — это канонический синтаксис CSS Color 4 (`oklch(0.629 0.193 263.4)`), готовый к вставке в блок `@theme` Tailwind v4 или определение CSS-переменной shadcn/ui. Для платформенно-специфического вывода (CSS custom property, токен Tailwind v4, SwiftUI, Compose, Flutter) используйте раздел Copy as code под пипеткой — эти сниппеты выдают формат, который каждая платформа ожидает нативно.

  4. 4

    Проверьте бейджи цветового охвата Display P3 / Rec.2020

    Три бейджа цветового охвата (sRGB, Display P3, Rec.2020) показывают, попадает ли текущий цвет в воспроизводимый диапазон каждого пространства. Если бейдж sRGB красный, а P3 зелёный — цвет является OKLCH с широким охватом, который отрисуется насыщенным на железе Apple (iPhone, iPad, MacBook с 2017 года), но обесцветится на legacy 24-битном мониторе. Кнопка **Snap to sRGB** использует бинарное уменьшение chroma (информативный алгоритм CSS Color 4 §13), чтобы ужать цвет в sRGB, сохраняя L и H, давая HEX-fallback, который вы можете поставлять через `@supports not (color: oklch(0 0 0))`.

  5. 5

    Также видны: RGB, HSL, OKLAB, HSV, HWB, CMYK, именованный цвет

    Тот же HEX, который вы вставляете, зажигает и остальные восемь полей форматов — RGB для вызовов canvas и аппаратуры, HSL для legacy CSS-переменных, OKLAB для математики палитр и матриц дальтонизма, HSV и HWB для дизайнерских рабочих процессов с пипеткой, CMYK для оценки печати и ближайший именованный CSS-цвет для документации и прозы. Вы никогда не заперты только в HEX → OKLCH. Пипетка (квадрат SL + слайдер оттенка + слайдер альфы) одновременно управляет всеми девятью, а в браузерах на базе Chromium кнопка EyeDropper сэмплирует любой пиксель на экране, включая за пределами браузера.

Типичные ошибки HEX / OKLCH

Считать OKLCH Chroma как HSL Saturation

OKLCH Chroma не ограничена (0 до ~0.4 для цветов, вписывающихся в sRGB, выше — для широкого охвата) — это НЕ процент насыщенности 0–100%, как S в HSL. Считать, что C=0.3 означает «30% насыщенности», — значит неправильно прочитать шкалу: 0.3 — это высоко-chroma, около потолка sRGB для одних оттенков и далеко за ним для других. Максимум C варьируется по L и H — зелёный при L=0.7 поддерживает гораздо больший C, чем синий при L=0.3. Воспринимайте C как абсолютное расстояние от серого, не как относительный процент.

✗ Неверно
Установить OKLCH C = 0.3, ожидая «30% насыщенности»:
oklch(0.7 0.3 250) → может выйти за пределы охвата sRGB для синих
Цвет с широким охватом отрисуется обесцвеченным на legacy-дисплеях.
✓ Верно
Воспринимайте C как абсолютную chroma, проверяйте бейджи охвата:
oklch(0.7 0.15 250) → комфортно в sRGB для этой пары L+H
Используйте бейджи, чтобы найти максимальный C, вписывающийся в целевой охват.

Считать OKLCH L таким же, как HSL L

Оба пространства сообщают Lightness как ось 0–1 (или 0–100%), но они измеряют разные вещи. L в HSL геометрическая — выведена из усреднения max/min RGB в гамма-кодированном sRGB. L в OKLCH перцептивная — привязана к модели OKLAB. Перенос HSL-палитры как `oklch(L%, C, H)` в ожидании совпадающей яркости даёт неравномерные результаты, потому что отношение L между двумя пространствами нелинейно. Для средне-тоновых цветов OKLCH L = 0.6 примерно соответствует HSL L = 50%, но кривая дрейфит на тёмном и светлом концах.

✗ Неверно
Скопировать HSL L-проценты напрямую в OKLCH:
hsl(220 50% 30%) перенесённый как oklch(0.30 0.10 220)
Два цвета выглядят заметно разными по яркости.
✓ Верно
Заново выведите OKLCH из исходного HEX, не переносите HSL:
источник HEX → конвертация в OKLCH → oklch(0.34 0.08 254)
Перцептивная L остаётся корректной; палитра чувствуется равномерной.

Забыть, что OKLCH с широким охватом не отобразится в sRGB

OKLCH не ограничен — вы можете написать `oklch(0.7 0.4 30)`, и синтаксис валиден, но chroma превышает то, что может закодировать байтовое пространство sRGB 256-на-канал. На sRGB-мониторе этот цвет обрезается до ближайшего в-охвате приближения (обычно обесцвеченная версия). На мониторе Display P3 он отрисуется корректно. Поставка OKLCH с широким охватом без проверки бейджей охвата даёт цвет, который выглядит по-разному на разных дисплеях — едва уловимый, но реальный баг кросс-платформенной согласованности.

✗ Неверно
Поставить oklch(0.7 0.4 30) без проверки sRGB-охвата:
P3-дисплеи отрисуют насыщенный красный; sRGB-дисплеи — обесцвеченный
Брендовый цвет выглядит несогласованно на разном железе пользователей.
✓ Верно
Проверьте бейдж sRGB-охвата, при необходимости Snap to sRGB, слоями через @supports:
@supports (color: oklch(0 0 0)) { --primary: oklch(0.7 0.4 30); }
@supports not (color: oklch(0 0 0)) { --primary: #ef6b50; }
Железо P3 получает значение с широким охватом; железо sRGB — приклеенный fallback.

Пропуск поддержки oklch() в браузерах

Нативный парсинг `oklch()` пришёл в Chrome и Edge 111 (март 2023), Safari 15.4 (март 2022) и Firefox 113 (май 2023). Совокупное покрытие caniuse — 94%+, но оставшиеся 6% включают IE 11, старый Safari на iOS 15.3 или раньше, старый Android Chrome и встроенные webview. Поставка `oklch()` без fallback в этот длинный хвост отрисуется как значение CSS `inherit` или полностью провалится. Всегда feature-детектируйте через `@supports` для продакшен-сайтов с широкой аудиторией.

✗ Неверно
Определить брендовый цвет только в OKLCH:
:root { --primary: oklch(0.629 0.193 263.4); }
IE 11 и старый iOS Safari не отрисуют цвет вовсе.
✓ Верно
Слоями через @supports для грациозного fallback:
:root { --primary: #3b82f6; }
@supports (color: oklch(0 0 0)) { :root { --primary: oklch(0.629 0.193 263.4); } }
Современные браузеры получают OKLCH; legacy-браузеры — HEX-fallback.

Путать OKLCH и LCH (полярная форма CIE-LAB)

CSS Color 4 поставляет и `oklch()`, и `lch()`. Они выглядят идентично по форме (L / C / H), но используют разные базовые пространства: `lch()` — полярная форма CIE-LAB (1976), `oklch()` — полярная форма OKLAB (Оттоссон 2020). Эти два НЕ взаимозаменяемы — `lch(60% 50 240)` и `oklch(0.6 0.15 240)` описывают разные цвета. Перцептивная равномерность CIE-LAB ломается вблизи насыщенных синих, поэтому Оттоссон заново вывел OKLAB. Для новой работы с дизайн-системами предпочитайте `oklch()` вместо `lch()`.

✗ Неверно
Подменить lch() на oklch() в ожидании того же результата:
lch(60% 50 240) ≠ oklch(0.6 0.15 240) — совершенно разные цвета
Скопированное между пространствами значение тихо неверно.
✓ Верно
Выберите одно пространство и оставайтесь в нём:
oklch(0.629 0.193 263.4) для современных дизайн-систем
или lch(60% 50 240) — но не меняйте имена функций без перевыполнения конвертации

Кто пользуется HEX в OKLCH

Frontend-разработчики, мигрирующие на токены OKLCH Tailwind v4
Tailwind v4 стандартизировался на OKLCH для своей палитры по умолчанию в январе 2025 года. Миграция кодовой базы v3 с брендовыми цветами на HEX-основе означает конвертацию каждого HEX в OKLCH и вставку результата в новый блок `@theme`. Вставьте каждый HEX сюда, скопируйте значение `oklch()`, определите `--color-primary: oklch(0.629 0.193 263.4)` и подобные. Живые бейджи цветового охвата помечают любые цвета, выходящие за пределы sRGB, поэтому вы можете решить, оставить ли значение с широким охватом для пользователей Display P3 или приклеить к sRGB.
Авторы тем shadcn/ui, строящие кастомные палитры
Тема CSS-переменных shadcn/ui использует OKLCH для каждого токена (`--background`, `--foreground`, `--primary` и т. д.). Кастомные темы выводятся из базового брендового HEX через конвертацию в OKLCH и затем прохождение по L для светлого/тёмного вариантов. Вставьте брендовый HEX, считайте тройку OKLCH, постройте остальную часть темы, шагая L при зафиксированных C и H. Точно соответствует каноническому рабочему процессу shadcn.
Авторы дизайн-систем, генерирующие перцептивно-равномерные шкалы
Сгенерируйте шкалу 50/100/200/.../900, шагая по каналу L равными приращениями OKLCH при зафиксированных C и H. Визуальный разрыв между соседними стопами выглядит идентичным по каждому оттенку — это и есть то, что нужно палитре брендовых цветов. Tailwind v4 использует именно эту конструкцию для своей палитры по умолчанию, и shadcn/ui её зеркалит. Вставьте каждый брендовый HEX, считайте OKLCH, сгенерируйте шкалу алгоритмически или через панель Tints/Shades/Tones под пипеткой.
Инженеры доступности, проверяющие контраст в пространстве OKLCH
WCAG 2.1 и APCA оба сообщают контраст против разрешённого sRGB-цвета, а не тройки OKLCH — но знание OKLCH L брендового цвета делает настройку контраста предсказуемой: подбросьте L на 0.1, чтобы пройти AA против белого, опустите L на 0.1, чтобы пройти AA против чёрного. Одновременный вид OKLCH + WCAG + APCA делает эту связь видимой. Вставьте брендовый HEX, наблюдайте за бейджами контраста, регулируйте L в OKLCH (предсказуемее, чем в HSL), пока пара не пройдёт обе метрики.
Веб-разработчики, строящие токены с широким охватом для современных дисплеев
Большинство устройств Apple с 2017 года (и многие современные Android-устройства) отрисуют Display P3 нативно. Определение брендовых акцентных цветов в OKLCH позволяет адресовать насыщенные красные и зелёные только-P3, которые ни один HEX-код закодировать не может. Вставьте существующий HEX, чтобы считать его OKLCH, затем поднимите канал C над потолком sRGB, чтобы забрать дополнительную насыщенность P3. Бейджи цветового охвата подтвердят, что новое значение вписывается в P3 (и грациозно откатывается на экранах только-sRGB через браузерное сжатие chroma).
Преподаватели, объясняющие перцептивную и геометрическую светлоту
Одновременный вид OKLCH + HSL делает разницу между перцептивной и геометрической светлотой очевидной. Вставьте насыщенный зелёный и насыщенный синий при одной и той же HSL L=50%; значения OKLCH L заметно различаются, потому что OKLCH измеряет реальную воспринимаемую яркость. Перетащите слайдер оттенка HSL и наблюдайте, как OKLCH L колеблется, пока вы удерживаете HSL L постоянной — кривая визуализирует гамма-особенность. Готовая к классу демонстрация того, почему дизайн-системы мигрировали на OKLCH.
Open-source-мейнтейнеры, модернизирующие документацию токенов
Старая документация дизайн-систем обычно перечисляет брендовые цвета только как HEX-коды. Модернизация на OKLCH означает показывать тот же цвет в обоих пространствах — HEX для совместимости с code-блоками, OKLCH для таблицы спецификаций и современного определения токена. Вставьте каждый HEX, скопируйте вывод OKLCH, обновите документацию. URL-хэш, которым можно поделиться, также позволяет контрибьюторам ссылаться на точный обсуждаемый цвет в GitHub-issue без двусмысленности.

Математика и конвейер HEX в OKLCH

HEX → OKLCH — это конвейер из 7 шагов
Конвертация маршрутизируется через пять промежуточных представлений: HEX → целочисленный sRGB → нормализованный sRGB (0–1) → линейный sRGB (гамма-декодированный) → CIE XYZ D65 → OKLAB → OKLCH. Каждый шаг — это хорошо определённая матрица или кусочная функция из первоисточника. Инструмент запускает полный конвейер на каждое нажатие клавиши; математика достаточно быстрая (микросекунды), чтобы debouncing не требовался. Поднятие промежуточного RGB-кортежа рядом с OKLCH означает, что вы можете отладить неожиданное значение OKLCH, осмотрев каналы RGB.
Гамма-функция CSS Color 4 §11.2
Конвертация sRGB → linear-sRGB использует кусочную функцию CSS Color 4 §11.2: `v ≤ 0.04045 ? v/12.92 : ((v + 0.055) / 1.055)^2.4`. Кусочная форма (с маленьким линейным сегментом около нуля) избегает численной нестабильности чистой экспоненциальной формы на очень тёмных цветах. Это та же функция, которую используют ICC-профили для кодирования sRGB, и та же функция, которую браузеры используют внутри при отрисовке HEX-кодов. Обратная для OKLCH → HEX применяет ту же функцию в обратную сторону: `v ≤ 0.0031308 ? v * 12.92 : 1.055 * v^(1/2.4) - 0.055`.
Матрица CSS Color 4 §15.1: linear-sRGB ↔ XYZ D65
Матрица из CSS Color 4 §15.1 конвертирует linear-sRGB в CIE XYZ при точке белого D65: `X = 0.4124564 R + 0.3575761 G + 0.1804375 B`, `Y = 0.2126729 R + 0.7151522 G + 0.0721750 B`, `Z = 0.0193339 R + 0.1191920 G + 0.9503041 B`. Строка Y даёт формулу яркости sRGB. Матрица — та же самая, что используется в каждой библиотеке управления цветом, включая ICC, Adobe Color Engine и open-source-конвейер LCMS. Обратная матрица для OKLCH → HEX применяет инверсию §15.1.
Матрицы OKLAB и шаг кубического корня (Оттоссон 2020)
Конвертация XYZ D65 → OKLAB использует две матрицы и шаг извлечения кубического корня, опубликованные в статье Бьорна Оттоссона об OKLAB 2020 года. Первая матрица трансформирует XYZ в пространство LMS-отклика конусов (свободно смоделированное по чувствительностям человеческих L/M/S конусов). Извлеките кубический корень каждого канала, чтобы нелинейно сжать динамический диапазон (шаг, корректирующий перцептивную равномерность). Вторая матрица трансформирует кубически-корневой LMS в координаты OKLAB L/a/b. Все три операции используют точные значения, опубликованные в эталонной реализации статьи; без перевыводов или округлений. Обратная для OKLCH → HEX применяет эти матрицы в обратную сторону.
OKLAB ↔ OKLCH — декартовы координаты в полярные
Оси `a` и `b` в OKLAB образуют плоскость chroma, перпендикулярную оси L. OKLCH полярно кодирует эту плоскость: `C = sqrt(a² + b²)` (евклидово расстояние от серого), `H = atan2(b, a) * 180 / π` (угол в градусах, обёрнут в 0–360°). Обратная: `a = C * cos(H * π / 180)`, `b = C * sin(H * π / 180)`. Полярная форма предпочтительнее OKLAB для хранения дизайн-токенов, потому что Hue — стабильная ось: вращение Hue не приводит к случайному кросс-фейду через серый, как это может случиться при вращении `a` или `b` в OKLAB.
Определение цветового охвата через проверку диапазона каналов
Цвет считается в-охвате для целевого пространства (sRGB, Display P3, Rec.2020), если каждый канал попадает в `[-ε, 1 + ε]` после конвертации в primaries этого пространства, где `ε = 1e-7`, чтобы поглощать шум точности float около границ. Бейдж охвата для каждого пространства краснеет, когда какой-либо канал выходит за диапазон. OKLCH не ограничен по охвату — `oklch(0.7 0.4 30)` — валидная координата, но может выходить за пределы байтового пространства sRGB 256-на-канал. Проверка выполняется на каждое нажатие клавиши; в сочетании со Snap to sRGB это ловит самую распространённую ловушку внедрения (OKLCH с широким охватом, неправильно отображающийся на legacy-экранах).
Бинарное уменьшение chroma в Snap to sRGB
Snap to sRGB соответствует информативному алгоритму отображения цветового охвата CSS Color 4 §13: удерживать L и H зафиксированными на текущих значениях, бинарным поиском найти C ∈ [0, currentC] — наибольший C, чья конвертация в sRGB остаётся в-охвате. Поиск выполняется не более чем за 30 итераций (точность ~10⁻⁹), чего более чем достаточно для визуальной точности. Сохранение L и H означает, что приклеенный цвет читается как тот же оттенок-семья при той же яркости — он просто теряет насыщенность. Мы не обрезаем каналы RGB напрямую, потому что это заметно искажает оттенок (особенно в синих, которые обрезаются в сторону фиолетового).

Лучшие практики для HEX / OKLCH

Используйте OKLCH как канонический формат токенов в новом коде
Для любой дизайн-системы, поставляющейся в 2025 году или позже, определяйте брендовые цвета и шкалы палитр в OKLCH. Ось L автоматически даёт перцептивно-равномерные шкалы; ось Chroma может адресовать цвета с широким охватом, которые HEX закодировать не может. Держите HEX-fallback для старых браузеров через `@supports not (color: oklch(0 0 0))` или сборочный PostCSS, но делайте OKLCH источником истины в вашем хранилище токенов. Tailwind v4 и shadcn/ui оба поставляются именно так; новые проекты могут следовать их примеру без трения.
Генерируйте шкалы, шагая L, удерживая C и H постоянными
Каноническая конструкция OKLCH-шкалы: зафиксировать C и H, пройти L равными приращениями. 9-ступенчатая шкала `oklch(L 0.15 263)` для L = 0.1, 0.2, …, 0.9 даёт визуально-равномерное расстояние между шагами по каждому шагу. Именно это Tailwind v4 делает внутри. Не проходите C вместе с L, если только не хотите, чтобы chroma-интенсивность шкалы намеренно варьировалась (редко). Не дрейфьте H между шагами — даже 5° дрейфа делает шкалу запутанной.
Совпадайте с точностью Tailwind v4: 3 знака L+C, 1 знак H
Палитра по умолчанию Tailwind v4 публикует значения OKLCH с тремя знаками после запятой для L и C и одним знаком после запятой для H — `oklch(0.629 0.193 263.4)` для blue-500. Соблюдение этой точности в ваших собственных токенах означает, что рабочие процессы вставки в конфиг дают идентичные значения тем, которые поставляет Tailwind, и инструменты diff не будут помечать ложные различия. Округление по умолчанию в инструменте следует этой конвенции; копи-паст в блок `@theme` бит-точен.
Прогоняйте OKLCH с широким охватом через проверку Display P3
Если вы целитесь в современное железо Apple (iPhone, iPad, MacBook с 2017 года) или поставляете HDR-aware контент, бейджи цветового охвата позволяют поднять C выше потолка sRGB, чтобы забрать дополнительную насыщенность P3. Применяемое браузером сжатие chroma уберегает цвет от обрезки на экранах только-sRGB. Не приклеивайте к sRGB заранее по умолчанию, если не знаете, что вся ваша аудитория сидит на legacy-дисплеях — это теряет 30%+ насыщенности, которую может отрисовать железо P3.
Предоставляйте HEX-fallback через @supports для браузеров до 2023
Хотя поддержка `oklch()` в вечнозелёных браузерах сейчас 94%+, длинный хвост (IE 11, старый Android Chrome, встроенные webview) по-прежнему нуждается в fallback. Оборачивайте токены в `@supports (color: oklch(0 0 0))` и предоставляйте HEX-вариант в альтернативной ветке. Вывод Snap to sRGB — это именно тот fallback, генерируемый автоматически из текущей тройки OKLCH с сохранением L и H. Сборочные PostCSS-плагины вроде `postcss-oklab-function` тоже могут инлайнить sRGB-приближение во время компиляции.
Документируйте и OKLCH, и исходный HEX в ваших токенах
Когда вы поставляете CSS-переменную вроде `--color-primary: oklch(0.629 0.193 263.4)`, включайте комментарий с исходным HEX: `/* source: #3b82f6 (Tailwind blue-500) */`. Через шесть месяцев, когда кому-то понадобится вывести связанный оттенок или сверить значение с PDF брендбука, исходный HEX сохраняет полный след происхождения. Один OKLCH значим, но его сложнее опознать с одного взгляда; исходный HEX — это идентификатор, который большинство коллег будут искать первым.
Используйте URL-хэш, чтобы делиться живыми решениями по цвету
Каждое изменение цвета автоматически обновляет URL-хэш как `#hex=3b82f6` или `#oklch=...`. Скопируйте URL в тред Slack или GitHub-issue, и любой, кто откроет, попадёт на тот же цвет с той же тройкой OKLCH. Это надёжнее, чем вставка OKLCH-строки в чат — получатели иногда опечатываются на десятичных или оборачивают неправильную точность — и позволяет треду design-review ссылаться на точный цвет, а не на «брендовый синий, который мы обсуждали во вторник». Хэш никогда не передаётся на сервер.

Часто задаваемые вопросы

Что такое цвет OKLCH?
OKLCH — это полярная форма OKLAB, перцептивно-равномерного цветового пространства, опубликованного Бьорном Оттоссоном в 2020 году. Каналы: Lightness (0–1, также записывается как 0–100%), Chroma (от 0 до примерно 0.4 в зависимости от оттенка и L, сверху не ограничена) и Hue (0–360°, концептуально идентичен оттенку в HSL). Выводится из CIE-LAB через стадию LMS-отклика конусов с шагом извлечения кубического корня. CSS Color 4 добавил синтаксис `oklch()` в 2022 году. Tailwind v4 стандартизировался на OKLCH для своей палитры по умолчанию в 2025 году. Пример: `oklch(0.629 0.193 263.4)` — это Tailwind blue-500.
OKLCH лучше, чем HSL?
Для дизайн-систем — да. L (lightness) в HSL геометрическая — выводится усреднением max и min RGB — и наследует гамма-кривую sRGB, поэтому `hsl(60 100% 50%)` (жёлтый) выглядит заметно ярче, чем `hsl(240 100% 50%)` (синий), хотя оба сообщают L=50%. L в OKLCH перцептивна, привязана к модели OKLAB Оттоссона 2020 года. Практический итог: шкала OKLCH при равномерной L выглядит визуально-равномерной по каждому оттенку; шкала HSL нуждается в ручной по-оттеночной коррекции, чтобы выглядеть равномерной. Именно поэтому Tailwind v4 перевёл свою палитру по умолчанию с генерации на основе HSL на генерацию на основе OKLCH.
Какие браузеры поддерживают oklch()?
Все вечнозелёные браузеры с середины 2023 года: Chrome и Edge 111 (март 2023), Safari 15.4 (март 2022, самая ранняя поставка), Firefox 113 (май 2023). Совокупное покрытие caniuse — более 94%. Для длинного хвоста — IE 11, старый Safari, Android Chrome на legacy-железе — оборачивайте свои токены в `@supports (color: oklch(0 0 0))` и предоставляйте HEX или `hsl()` fallback в альтернативной ветке. Инструменты сборки вроде PostCSS `postcss-oklab-function` тоже могут инлайнить sRGB-приближение рядом со значением OKLCH во время компиляции.
Зачем использовать OKLCH в Tailwind v4?
Tailwind v4 (вышел в январе 2025) перевёл свою палитру по умолчанию с генерации на основе HSL на генерацию на основе OKLCH именно потому, что OKLCH автоматически даёт перцептивно-равномерные шкалы. В системе v3 на HSL `red-500` и `blue-500` имели заметно разный воспринимаемый вес, несмотря на одинаковый HSL L%, что вынуждало дизайнеров вручную подстраивать отдельные стопы; в v4 оба выглядят сбалансированно, потому что сидят на одинаковой OKLCH L. OKLCH также открывает цвета Display P3 с широким охватом, которые ни один HEX-код закодировать не может — токен Tailwind v4 вроде `oklch(0.65 0.25 30)` может адресовать P3-красные, выходящие за пределы sRGB. Сборка по-прежнему выдаёт HEX-fallback для старых браузеров.
OKLCH перцептивно равномерен?
Да — в этом и состоит замысел. OKLCH наследует перцептивную равномерность от OKLAB, цветового пространства Бьорна Оттоссона 2020 года, разработанного специально для исправления неравномерностей в CIE-LAB (предыдущем лучшем перцептивно-равномерном пространстве). Фиксированный шаг по каналу L соответствует фиксированному шагу воспринимаемой яркости. Фиксированный шаг по C соответствует фиксированному шагу воспринимаемой chroma. Приближения CIELAB ломаются вблизи очень насыщенных цветов; OKLAB и его полярная форма OKLCH остаются точными по всему цветовому охвату, поэтому каждый современный инструмент дизайн-системы (Tailwind v4, shadcn/ui, Radix Colors v3) стандартизировался на нём.
Как читать значение OKLCH?
`oklch(L C H)` — три числа, опционально с `/ A` для альфы. L — воспринимаемая светлота от 0 (чёрный) до 1 (белый); числовая форма и процентная форма эквивалентны (`0.6` и `60%`). C — chroma от 0 (серый) до примерно 0.4 для самых насыщенных sRGB-цветов; жёсткой верхней границы нет, цвета с широким охватом могут её превышать. H — оттенок в градусах от 0 до 360, как в HSL (0/360 = красный, 120 = зелёный, 240 = синий). Пример: `oklch(0.629 0.193 263.4)` — это Tailwind blue-500: яркий, высоко-chroma, в дуге синего.
В чём разница между OKLCH и LCH?
Оба — полярные формы (Lightness / Chroma / Hue) цветового пространства семейства CIE-LAB. LCH — полярная форма CIE-LAB, перцептивно-равномерного пространства 1976 года. OKLCH — полярная форма OKLAB, обновлённого Оттоссоном пространства 2020 года. Разница: перцептивная равномерность CIE-LAB ломается вблизи сильно насыщенных синих и фиолетовых (задокументированная слабость модели), поэтому LCH-шкала через насыщенные цвета выглядит едва уловимо неравномерной. OKLAB исправляет это, заново выводя матрицы из исправленной стадии LMS-отклика конусов. Оба поставляются в CSS Color 4 (синтаксис `lch()` и `oklch()`); для новой работы с дизайн-системами в 2025 году предпочитайте OKLCH.
Как преобразовать HEX в OKLCH?
Конвейер таков: распарсить HEX `#RRGGBB` в целые каналы sRGB через `parseInt(hex, 16)`, нормализовать в 0–1, гамма-декодировать в линейный sRGB через кусочную функцию CSS Color 4 §11.2, умножить на матрицу §15.1, чтобы получить CIE XYZ D65, умножить на матрицу LMS Оттоссона и взять кубический корень каждого канала, умножить на матрицу OKLAB Оттоссона, чтобы получить L/a/b, затем декартовы координаты в полярные: `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`. Полный конвейер выполняется за микросекунды. Этот инструмент запускает его вживую по мере ввода — `#3b82f6` мгновенно приходит как `oklch(0.629 0.193 263.4)`.

Похожие инструменты

Все инструменты →

Конвертер систем счисления — bin, hex, dec, oct

Конвертеры

Конвертация между системами счисления — двоичной, hex, десятичной, восьмеричной и любой базой 2-36 мгновенно. Бесплатно, приватно — вся обработка в браузере.

Конвертер цветов — HEX, RGB, HSL и OKLCH

Конвертеры

Конвертируйте HEX в RGB, HSL, OKLCH, OKLAB и CMYK прямо в браузере — копируйте любой формат в один клик. Бесплатно, без регистрации, ваши цвета никогда не покидают страницу.

Конвертер HEX в CMYK

Конвертеры

Конвертируйте HEX-цвета в CMYK прямо в браузере. Наивное приближение на основе sRGB для предпросмотра печати. Бесплатно, без регистрации, ваши цвета остаются локально.

Конвертер HEX в HSL

Конвертеры

Конвертируйте любой HEX-цвет в HSL прямо в браузере — поддерживаются 3-значные, 6-значные и 8-значные HEX с альфой. Бесплатно, мгновенно, без регистрации, ваши цвета никогда не покидают страницу.

Конвертер HEX в RGB

Конвертеры

Конвертируйте любой HEX-код цвета в RGB прямо в браузере — поддерживаются 3-значные, 6-значные и 8-значные HEX с альфой. Бесплатно, мгновенно, без регистрации, ваши цвета никогда не покидают страницу.

Сжатие изображений онлайн — JPEG, PNG и WebP

Конвертеры

Сжимайте JPEG, PNG и WebP до 80% меньше — в браузере, без загрузки. Batch до 20 изображений, регулировка качества, сравнение «до и после». Бесплатно и приватно.