Кольори Tailwind CSS: палітра v4 в OKLCH, власні кольори й відтінки
Tailwind CSS v4 має 26 колірних шкал по 11 відтінків, від 50 до 950, тобто 286 кольорів в OKLCH у вигляді CSS-змінних на кшталт --color-blue-500. Власні кольори додаються через @theme { --color-brand-500: oklch(...) }. Однаковий номер кроку не означає однакової світлоти: blue-600 найсвітліший синій, що проходить 4,5:1 на білому, а жовтому потрібен 700.
6 хв читання
Як улаштована палітра кольорів Tailwind
Стандартна палітра Tailwind v4.3 має 26 іменованих шкал. Сімнадцять хроматичні: 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.
Кожна шкала має ті самі 11 кроків: 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 як кольори тексту поводяться зовсім по-різному.
| Клас | Значення OKLCH | Запасний HEX | Контраст на білому |
|---|---|---|---|
| yellow-500 | oklch(79.5% 0.184 86.047) | #efb100 | 1.92:1 |
| amber-500 | oklch(76.9% 0.188 70.08) | #fd9a00 | 2.14:1 |
| green-500 | oklch(72.3% 0.219 149.579) | #00c950 | 2.22:1 |
| cyan-500 | oklch(71.5% 0.143 215.221) | #00b8db | 2.37:1 |
| orange-500 | oklch(70.5% 0.213 47.604) | #ff6900 | 2.89:1 |
| red-500 | oklch(63.7% 0.237 25.331) | #fb2c36 | 3.81:1 |
| blue-500 | oklch(62.3% 0.214 259.815) | #2b7fff | 3.76:1 |
| indigo-500 | oklch(58.5% 0.233 277.117) | #615fff | 4.58:1 |
| gray-500 | oklch(55.1% 0.027 264.364) | #6a7282 | 4.84:1 |
Синій Tailwind: усі відтінки з OKLCH, HEX і контрастом
Ось уся синя шкала в тому вигляді, як її задає Tailwind v4. Стовпець HEX містить найближчий колір sRGB, знайдений зниженням хроми зі збереженням світлоти й тону. Контраст наведено за WCAG 2 саме для цього HEX.
Blue-600 перший крок, що проходить 4,5:1 для основного тексту на білому. Blue-500 проходить на чорному з 5,58:1, але не проходить на білому з 3,76:1. Жоден синій крок не дає 4,5:1 на обох фонах, тому світлій і темній темам потрібні різні кроки.
| Клас | Значення OKLCH | Запасний HEX | На білому | На чорному |
|---|---|---|---|---|
| blue-50 | oklch(97% 0.014 254.604) | #eff6ff | 1.09:1 | 19.30:1 |
| blue-100 | oklch(93.2% 0.032 255.585) | #dbeafe | 1.22:1 | 17.21:1 |
| blue-200 | oklch(88.2% 0.059 254.128) | #bedbff | 1.42:1 | 14.77:1 |
| blue-300 | oklch(80.9% 0.105 251.813) | #8ec5ff | 1.81:1 | 11.58:1 |
| blue-400 | oklch(70.7% 0.165 254.624) | #51a2ff | 2.64:1 | 7.96:1 |
| blue-500 | oklch(62.3% 0.214 259.815) | #2b7fff | 3.76:1 | 5.58:1 |
| blue-600 | oklch(54.6% 0.245 262.881) | #155dfc | 5.25:1 | 4.00:1 |
| blue-700 | oklch(48.8% 0.243 264.376) | #1447e6 | 6.83:1 | 3.07:1 |
| blue-800 | oklch(42.4% 0.199 265.638) | #193cb8 | 8.82:1 | 2.38:1 |
| blue-900 | oklch(37.9% 0.146 265.522) | #1c398e | 10.37:1 | 2.03:1 |
| blue-950 | oklch(28.2% 0.091 267.935) | #162456 | 14.78:1 | 1.42:1 |
Які відтінки Tailwind проходять WCAG AA на білому
Найсвітліший прохідний крок залежить від тону. Orange, amber, yellow, lime, а також зелені, teal, cyan і sky на кроці 500 ще світлі, тому для основного тексту їм потрібен 700. Red, blue, violet, purple, fuchsia, pink і rose проходять на 600, indigo вже на 500. Yellow тут виняток: навіть yellow-600 не проходить для великого тексту, лише 2,93:1.
Світлота передбачає результат краще за номер кроку. Серед усіх 286 кольорів кожен відтінок зі світлотою OKLCH нижче 58% проходить 4,5:1 на білому, а кожен вище 59,2% не проходить. Подивіться на L у значенні класу, і відповідь буде відома ще до перевірки.
| Колір | Найсвітліший крок для 4.5:1 | Hex | Контраст | Найсвітліший крок для 3:1 |
|---|---|---|---|---|
| red | 600 | #e7000b | 4.77:1 | 500 |
| orange | 700 | #ca3500 | 5.22:1 | 600 |
| amber | 700 | #bb4d00 | 5.03:1 | 600 |
| yellow | 700 | #a65f00 | 4.93:1 | 700 |
| lime | 700 | #497d00 | 4.98:1 | 600 |
| green | 700 | #008236 | 4.95:1 | 600 |
| emerald | 700 | #007a55 | 5.36:1 | 600 |
| teal | 700 | #00786f | 5.36:1 | 600 |
| cyan | 700 | #007595 | 5.28:1 | 600 |
| sky | 700 | #0069a8 | 5.86:1 | 600 |
| blue | 600 | #155dfc | 5.25:1 | 500 |
| indigo | 500 | #615fff | 4.58:1 | 400 |
| violet | 600 | #7f22fe | 5.89:1 | 500 |
| purple | 600 | #9810fa | 5.54:1 | 500 |
| fuchsia | 600 | #c800de | 4.66:1 | 500 |
| pink | 600 | #e60076 | 4.54:1 | 500 |
| rose | 600 | #ec003f | 4.53:1 | 500 |
| gray | 500 | #6a7282 | 4.84:1 | 500 |
| olive | 600 | #5b5b4b | 6.90:1 | 500 |
Усі нейтральні, крім 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 та інлайн-стилях.
Саму палітру підлаштували, а не перемалювали. Якщо перевести в OKLCH, blue-500 з v3 (#3b82f6) має точно таку саму світлоту й тон, як blue-500 у v4. Зросла лише хрома, з 0,188 до 0,214. Решта синьої шкали поводиться так само, окрім blue-400, який ще й потемнішав на 0,7 пункту. Контраст майже не змінюється, а кольори виглядають яскравішими.
Ця додаткова хрома виходить за межі sRGB. 94 з 286 кольорів v4 лежать поза sRGB, але в межах Display P3, і всі вони хроматичні. В orange поза sRGB 9 кроків з 11, у blue 4 (від 200 до 500). На екрані з P3 ви бачите повний колір, на екрані sRGB браузер показує близький до нього. v4 розрахований на Safari 16.4, Chrome 111 і Firefox 128 або новіші, і всі вони розуміють oklch().
| Клас | HEX у v3 | Запасний HEX у v4 | Насиченість з v3 до v4 | На білому з v3 до v4 |
|---|---|---|---|---|
| blue-400 | #60a5fa | #51a2ff | 0.143 → 0.165 | 2.54 → 2.64 |
| blue-500 | #3b82f6 | #2b7fff | 0.188 → 0.214 | 3.68 → 3.76 |
| blue-600 | #2563eb | #155dfc | 0.215 → 0.245 | 5.17 → 5.25 |
| blue-700 | #1d4ed8 | #1447e6 | 0.217 → 0.243 | 6.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 і всі інші колірні утиліти, а також var(--color-brand) у CSS. Підходять 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 | #fcf3f0 | 1.09:1 |
| brand-100 | #fae4de | 1.22:1 |
| brand-200 | #f8cec3 | 1.44:1 |
| brand-300 | #f3ae9a | 1.85:1 |
| brand-400 | #ed7d5e | 2.73:1 |
| brand-500 | #e4572e | 3.68:1 |
| brand-600 | #ce3a00 | 4.97:1 |
| brand-700 | #ae3000 | 6.52:1 |
| brand-800 | #912600 | 8.46:1 |
| brand-900 | #77260e | 10.15:1 |
| brand-950 | #441508 | 15.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 робить такий пошук для будь-якого кольору й показує три найближчі класи.
| Ваш колір | Найближчий клас v4 | HEX класу | ΔEOK |
|---|---|---|---|
| #635bff | indigo-500 | #615fff | 0.008 |
| #1da1f2 | sky-500 | #00a6f4 | 0.020 |
| #10b981 | emerald-500 | #00bc7d | 0.021 |
| #3b82f6 | blue-500 | #2b7fff | 0.026 |
| #e4572e | orange-600 | #f54900 | 0.042 |
| #ff5733 | orange-600 | #f54900 | 0.046 |
Запитання і відповіді
Скільки кольорів у Tailwind CSS?
Tailwind CSS v4.3 має 26 колірних шкал по 11 відтінків, від 50 до 950, тобто 286 кольорів плюс black і white. Сімнадцять шкал хроматичні, дев’ять нейтральні: slate, gray, zinc, neutral, stone, mauve, olive, mist і taupe.
Який HEX-код у Tailwind blue-500?
У Tailwind v4 blue-500 це oklch(62.3% 0.214 259.815), що трохи виходить за межі sRGB; найближчий HEX #2b7fff. У Tailwind v3 blue-500 був #3b82f6, з тією самою світлотою й тоном, але меншою хромою.
Як додати власні кольори в Tailwind v4?
Додайте змінну в просторі імен --color- всередині @theme у вашому CSS, наприклад @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().