Перейти к подбору цвета

Цвета Tailwind CSS: палитра v4 в OKLCH, свои цвета и оттенки

В Tailwind CSS v4 есть 26 цветовых шкал по 11 ступеней, от 50 до 950, всего 286 цветов в OKLCH, доступных как CSS-переменные вида --color-blue-500. Свой цвет добавляется через @theme { --color-brand-500: oklch(...) }. Одинаковый номер ступени не означает одинаковую светлоту: у синего текст на белом проходит порог 4.5:1 уже с 600, а жёлтому нужна 700.

Читать 6 мин

Как устроена палитра Tailwind

В стандартной палитре Tailwind v4.3 двадцать шесть именованных шкал. Семнадцать из них хроматические: red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink и rose. Ещё девять нейтральные: slate, gray, zinc, neutral и stone остались с v3, а mauve, olive, mist и taupe появились уже в v4. Сверху идут black и white.

У каждой шкалы одни и те же ступени: 50, 100, 200 и так далее до 900, плюс 950. Ступень 50 почти белая, 950 почти чёрная. Класс складывается из утилиты, названия цвета и ступени: bg-blue-500, text-rose-700, border-zinc-200.

Номер ступени задаёт место в шкале, а не светлоту. У ступени 500 светлота OKLCH колеблется от 55.1% у gray до 79.5% у yellow, поэтому yellow-500 и blue-500 ведут себя в тексте совсем по-разному.

КлассЗначение OKLCHHEX-запасКонтраст на белом
yellow-500oklch(79.5% 0.184 86.047)#efb1001.92:1
amber-500oklch(76.9% 0.188 70.08)#fd9a002.14:1
green-500oklch(72.3% 0.219 149.579)#00c9502.22:1
cyan-500oklch(71.5% 0.143 215.221)#00b8db2.37:1
orange-500oklch(70.5% 0.213 47.604)#ff69002.89:1
red-500oklch(63.7% 0.237 25.331)#fb2c363.81:1
blue-500oklch(62.3% 0.214 259.815)#2b7fff3.76:1
indigo-500oklch(58.5% 0.233 277.117)#615fff4.58:1
gray-500oklch(55.1% 0.027 264.364)#6a72824.84:1

Синий Tailwind: все оттенки с OKLCH, HEX и контрастом

Ниже вся шкала blue в том виде, в каком её задаёт Tailwind v4. HEX в таблице это ближайший цвет sRGB, найденный снижением насыщенности при сохранении светлоты и тона. Контраст посчитан по WCAG 2 именно для этого HEX.

Blue-600 это первая ступень, которая даёт 4.5:1 для основного текста на белом. Blue-500 на чёрном проходит с 5.58:1, а на белом нет, там всего 3.76:1. Ни одна ступень синего не проходит 4.5:1 сразу на белом и на чёрном, так что светлой и тёмной теме нужны разные ступени.

КлассЗначение OKLCHHEX-запасНа беломНа чёрном
blue-50oklch(97% 0.014 254.604)#eff6ff1.09:119.30:1
blue-100oklch(93.2% 0.032 255.585)#dbeafe1.22:117.21:1
blue-200oklch(88.2% 0.059 254.128)#bedbff1.42:114.77:1
blue-300oklch(80.9% 0.105 251.813)#8ec5ff1.81:111.58:1
blue-400oklch(70.7% 0.165 254.624)#51a2ff2.64:17.96:1
blue-500oklch(62.3% 0.214 259.815)#2b7fff3.76:15.58:1
blue-600oklch(54.6% 0.245 262.881)#155dfc5.25:14.00:1
blue-700oklch(48.8% 0.243 264.376)#1447e66.83:13.07:1
blue-800oklch(42.4% 0.199 265.638)#193cb88.82:12.38:1
blue-900oklch(37.9% 0.146 265.522)#1c398e10.37:12.03:1
blue-950oklch(28.2% 0.091 267.935)#16245614.78:11.42:1

Какие оттенки Tailwind проходят WCAG AA на белом

Самая светлая подходящая ступень зависит от тона. Orange, amber, yellow, lime, а также зелёные, бирюзовые и голубые шкалы на ступени 500 ещё светлые, для основного текста им нужна 700. Red, blue, violet, purple, fuchsia, pink и rose проходят с 600, indigo уже с 500. Особняком стоит жёлтый: даже yellow-600 не дотягивает до 3:1 для крупного текста, у него 2.93:1.

Светлота предсказывает результат лучше номера ступени. Среди всех 286 цветов любой оттенок со светлотой OKLCH ниже 58% проходит 4.5:1 на белом, а любой светлее 59.2% не проходит. Посмотрите на L в значении класса, и ответ известен ещё до проверки.

ЦветПервая ступень для 4.5:1HEXКонтрастПервая ступень для 3:1
red600#e7000b4.77:1500
orange700#ca35005.22:1600
amber700#bb4d005.03:1600
yellow700#a65f004.93:1700
lime700#497d004.98:1600
green700#0082364.95:1600
emerald700#007a555.36:1600
teal700#00786f5.36:1600
cyan700#0075955.28:1600
sky700#0069a85.86:1600
blue600#155dfc5.25:1500
indigo500#615fff4.58:1400
violet600#7f22fe5.89:1500
purple600#9810fa5.54:1500
fuchsia600#c800de4.66:1500
pink600#e600764.54:1500
rose600#ec003f4.53:1500
gray500#6a72824.84:1500
olive600#5b5b4b6.90:1500

Все нейтральные шкалы, кроме olive, проходят уже на 500. У olive-500 светлота 58% и желтоватый тон, контраст всего 4.25:1, поэтому текст gray-500 и olive-500 нельзя менять один на другой без проверки.

Цвета Tailwind v3 и v4: в чём разница

В v3 цвета задавались HEX-значениями в tailwind.config.js, в разделе theme.extend.colors. В v4 настройка переехала в CSS: цвета стали переменными темы внутри @theme, записаны в OKLCH и доступны как CSS-переменные, так что var(--color-blue-500) работает в обычном CSS и в inline-стилях.

Саму палитру не перерисовали, а подкрутили. Если перевести blue-500 из v3 (#3b82f6) в OKLCH, светлота и тон совпадут с blue-500 из v4 до третьего знака. Выросла только насыщенность: с 0.188 до 0.214. Так же устроена вся шкала синего, кроме blue-400, который вдобавок стал темнее на 0.7 пункта. Контраст почти не изменился, а цвета стали сочнее.

Добавленная насыщенность выходит за пределы sRGB. Из 286 цветов v4 ровно 94 лежат вне sRGB, но внутри Display P3, и все они хроматические. У orange за охват sRGB выходят 9 ступеней из 11, у blue четыре, с 200 по 500. На экране с P3 виден полный цвет, на экране sRGB браузер показывает близкий к нему. v4 рассчитан на Safari 16.4, Chrome 111 и Firefox 128 и новее, и все они понимают oklch().

КлассHEX в v3HEX-запас в v4Насыщенность v3 и v4На белом v3 и v4
blue-400#60a5fa#51a2ff0.143 и 0.1652.54 и 2.64
blue-500#3b82f6#2b7fff0.188 и 0.2143.68 и 3.76
blue-600#2563eb#155dfc0.215 и 0.2455.17 и 5.25
blue-700#1d4ed8#1447e60.217 и 0.2436.70 и 6.83

CSS

@theme {
    --color-blue-500: oklch(62.3% 0.214 259.815);
}

.card {
    border-color: var(--color-blue-500);
}

Как добавить свой цвет в Tailwind v4

Объявите переменную в пространстве --color- внутри @theme. Всё, что стоит после --color-, становится именем в классе: --color-brand даёт bg-brand, text-brand, border-brand, ring-brand и остальные цветовые утилиты, а в CSS доступен var(--color-brand). Подходят HEX, rgb(), hsl() и oklch().

Чтобы заменить стандартную палитру целиком, а не дополнить её, сначала сбросьте пространство строкой --color-*: initial и затем объявите только нужные цвета. Утилиты генерируются только для классов, которые вы используете, поэтому стандартную палитру обычно оставляют.

CSS

@import 'tailwindcss';

@theme {
    --color-brand: #e4572e;
    --color-ink: oklch(21% 0.02 260);
}

Одного --color-brand хватает для единственного акцента. Как только нужны hover-состояния, подложки и тёмная тема, заведите полную шкалу с номерами ступеней.

Как собрать свою шкалу от 50 до 950

Шкала ниже построена из #e4572e. Его светлота 63.7% соответствует ступени 500, поэтому фирменный цвет остаётся ровно на 500. Остальные ступени идут по кривой светлоты Tailwind, сохраняют тон, насыщенность максимальна на 500 и 600 и плавно убывает к краям, и все значения помещаются в sRGB, так что HEX точный.

Как и тёплым цветам самого Tailwind, этой шкале для основного текста на белом нужна ступень 600. У brand-500 контраст 3.68:1, этого хватает только для крупного текста и иконок.

КлассHEXНа белом
brand-50#fcf3f01.09:1
brand-100#fae4de1.22:1
brand-200#f8cec31.44:1
brand-300#f3ae9a1.85:1
brand-400#ed7d5e2.73:1
brand-500#e4572e3.68:1
brand-600#ce3a004.97:1
brand-700#ae30006.52:1
brand-800#9126008.46:1
brand-900#77260e10.15:1
brand-950#44150815.48:1

CSS

@theme {
    --color-brand-50: oklch(97% 0.01103 36.478);
    --color-brand-100: oklch(93.477% 0.02574 36.478);
    --color-brand-200: oklch(88.485% 0.04964 36.478);
    --color-brand-300: oklch(81.145% 0.08641 36.478);
    --color-brand-400: oklch(71.064% 0.14524 36.478);
    --color-brand-500: oklch(63.723% 0.18385 36.478);
    --color-brand-600: oklch(56.583% 0.19167 36.478);
    --color-brand-700: oklch(49.952% 0.16921 36.478);
    --color-brand-800: oklch(43.729% 0.14814 36.478);
    --color-brand-900: oklch(38.935% 0.11766 36.478);
    --color-brand-950: oklch(27% 0.07538 36.478);
}

Копируйте значения с полной точностью. Если округлить светлоту до 0.1%, а насыщенность до трёх знаков, brand-600 чуть выйдет за охват sRGB: ничего не сломается, но цвет перестанет точно совпадать с HEX.

Как работает прозрачность вида bg-blue-500/50

Число после косой черты задаёт альфу: bg-blue-500/50 это blue-500 с прозрачностью 50%. В v3 это компилировалось в rgb(59 130 246 / 0.5) и работало только для цветов, которые Tailwind мог разложить на каналы. Для своих цветов в CSS-переменных приходилось писать особый формат rgb(var(--brand) / <alpha-value>).

В v4 модификатор превращается в color-mix() в пространстве Oklab: цвет смешивается с transparent. Так работает любой цвет: переменные темы, произвольные значения вроде bg-[#e4572e]/50 и ваши собственные CSS-переменные.

Прозрачность меняет контраст. На белом blue-500/50 выглядит как #95bfff, а blue-500/10 как #eaf2ff. Текст blue-600 даёт 5.25:1, а text-blue-600/60 падает до 2.62:1 и не проходит даже для крупного текста.

CSS

.bg-blue-500\/50 {
    background-color: color-mix(in oklab, var(--color-blue-500) 50%, transparent);
}

Как найти ближайший класс Tailwind для любого HEX

Сравните HEX со всеми 286 оттенками по воспринимаемому расстоянию в Oklab (ΔEOK). Ниже примерно 0.02 разницу трудно заметить даже рядом, и класс Tailwind может заменить ваш цвет. Выше примерно 0.04 лучше добавить свой цвет.

В таблице настоящие совпадения. Старые HEX из v3 возвращаются к тому же классу v4, а типичный фирменный оранжевый вроде #ff5733 попадает между orange-600 и red-400. Страница Tailwind в PickShade делает такой поиск для любого цвета и показывает три ближайших класса.

Ваш цветБлижайший класс v4HEX классаΔEOK
#635bffindigo-500#615fff0.008
#1da1f2sky-500#00a6f40.020
#10b981emerald-500#00bc7d0.021
#3b82f6blue-500#2b7fff0.026
#e4572eorange-600#f549000.042
#ff5733orange-600#f549000.046

Вопросы и ответы

Сколько цветов в Tailwind CSS?

В Tailwind CSS v4.3 двадцать шесть цветовых шкал по 11 ступеней, от 50 до 950, то есть 286 цветов плюс black и white. Семнадцать шкал хроматические, девять нейтральные: slate, gray, zinc, neutral, stone, mauve, olive, mist и taupe.

Какой HEX у blue-500 в Tailwind?

В Tailwind v4 blue-500 задан как oklch(62.3% 0.214 259.815) и немного выходит за sRGB, ближайший HEX это #2b7fff. В Tailwind v3 blue-500 был #3b82f6: светлота и тон те же, насыщенность ниже.

Как добавить свой цвет в Tailwind v4?

Добавьте в CSS переменную из пространства --color- внутри @theme, например @theme { --color-brand-500: oklch(63.7% 0.184 36.48); }. Tailwind сгенерирует bg-brand-500, text-brand-500 и остальные цветовые утилиты, а значение будет доступно как var(--color-brand-500).

Какие цвета Tailwind подходят для текста на белом фоне?

Для основного текста с контрастом 4.5:1 на белом берите 600 у red, blue, violet, purple, fuchsia, pink и rose, 700 у orange, amber, yellow, lime, green, emerald, teal, cyan и sky, и 500 у indigo и большинства нейтральных. Среди нейтральных исключение olive, ему нужна 600.

Почему цвета Tailwind v4 ярче, чем в v3?

Tailwind v4 записал цвета в OKLCH и поднял их насыщенность. Например, в шкале синего светлота и тон почти не изменились по сравнению с v3, а насыщенность средних ступеней выросла на 0.02 или 0.03. Теперь 94 цвета из 286 выходят за sRGB и используют более широкий охват Display P3, поэтому на экранах с P3, например у свежих iPhone и Mac, они выглядят сочнее.

Можно ли писать HEX в @theme Tailwind v4?

Да. Переменные темы принимают любой цвет CSS: HEX, rgb(), hsl() и oklch(). Модификаторы прозрачности работают со всеми, потому что v4 строит их через color-mix().

Попробуйте в PickShade

Похожие статьи