Kolory Tailwind CSS: paleta OKLCH w v4, własne kolory i odcienie
Tailwind CSS v4 ma 26 skal kolorów po 11 odcieni, od 50 do 950, czyli 286 kolorów zdefiniowanych w OKLCH jako zmienne CSS, np. --color-blue-500. Własne dodajesz przez @theme { --color-brand-500: oklch(...) }. Ten sam numer stopnia nie oznacza tej samej jasności: blue-600 to najjaśniejszy niebieski, który daje 4,5:1 na białym, a żółty potrzebuje 700.
6 min czytania
Jak zbudowana jest paleta kolorów Tailwind
Domyślna paleta w Tailwind v4.3 ma 26 nazwanych skal. Siedemnaście jest chromatycznych: red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink i rose. Dziewięć to neutralne: slate, gray, zinc, neutral i stone z v3 oraz mauve, olive, mist i taupe dodane w v4. Do tego dochodzą black i white.
Każda skala ma te same 11 stopni: 50, 100, 200 i dalej aż do 900 oraz 950. 50 to prawie biel, 950 to prawie czerń. Klasa to narzędzie plus kolor i stopień: bg-blue-500, text-rose-700, border-zinc-200.
Numer stopnia to pozycja w skali, a nie wartość jasności. Stopień 500 ma od 55,1% jasności OKLCH w gray do 79,5% w yellow, dlatego yellow-500 i blue-500 zachowują się jako kolory tekstu zupełnie inaczej.
| Klasa | Wartość OKLCH | Zamiennik hex | Kontrast na białym |
|---|---|---|---|
| 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 |
Niebieski w Tailwind: każdy odcień z OKLCH, hex i kontrastem
Oto pełna skala blue w definicji Tailwind v4. Kolumna hex to najbliższy kolor sRGB, znaleziony przez obniżanie chromy przy zachowaniu jasności i barwy. Współczynniki kontrastu to wartości WCAG 2 zmierzone dla tego hex.
Blue-600 to pierwszy stopień, który daje 4,5:1 dla tekstu podstawowego na białym. Blue-500 przechodzi na czarnym z wynikiem 5,58:1, ale na białym ma tylko 3,76:1. Żaden stopień niebieskiego nie osiąga 4,5:1 na obu tłach, więc jasny i ciemny motyw potrzebują różnych stopni.
| Klasa | Wartość OKLCH | Zamiennik hex | Na białym | Na czarnym |
|---|---|---|---|---|
| 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 |
Które odcienie Tailwind przechodzą WCAG AA na białym
Najjaśniejszy stopień, który przechodzi, zależy od barwy. Orange, amber, yellow, lime oraz skale zielone, morskie, cyjanowe i błękitne są na 500 wciąż jasne, więc do tekstu podstawowego potrzebują 700. Red, blue, violet, purple, fuchsia, pink i rose przechodzą od 600, indigo już od 500. Wyjątkiem jest yellow: nawet yellow-600 nie spełnia progu dla dużego tekstu, ma 2,93:1.
Jasność przewiduje wynik lepiej niż numer stopnia. Spośród wszystkich 286 kolorów każdy odcień z jasnością OKLCH poniżej 58% daje 4,5:1 na białym, a każdy powyżej 59,2% nie daje. Odczytaj L z wartości klasy, a odpowiedź znasz jeszcze przed testem.
| Kolor | Najjaśniejszy stopień dla 4.5:1 | Hex | Kontrast | Najjaśniejszy stopień dla 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 |
Wszystkie neutralne oprócz olive przechodzą od 500. Olive-500 ma 58% jasności i żółtawą barwę, osiąga tylko 4,25:1, więc tekst w gray-500 i w olive-500 nie jest wymienny.
Kolory Tailwind v3 a v4
W v3 kolory były wartościami hex w tailwind.config.js pod theme.extend.colors. v4 przenosi konfigurację do CSS: kolory to zmienne motywu wewnątrz @theme, zapisane w OKLCH i udostępnione jako zmienne CSS, więc var(--color-blue-500) działa w zwykłym CSS i w stylach inline.
Samą paletę dostrojono, a nie narysowano od nowa. Po konwersji do OKLCH blue-500 z v3 (#3b82f6) ma dokładnie tę samą jasność i barwę co blue-500 z v4. Wzrosła tylko chroma, z 0,188 do 0,214. Reszta skali blue wygląda tak samo, z wyjątkiem blue-400, który dodatkowo ściemniał o 0,7 punktu. Kontrast prawie się nie zmienia, a kolory wyglądają żywiej.
Ta dodatkowa chroma wychodzi poza sRGB. 94 z 286 kolorów v4 leży poza sRGB, a wewnątrz Display P3, i wszystkie są chromatyczne. Orange ma poza sRGB 9 z 11 stopni, blue ma 4 (od 200 do 500). Na ekranie P3 widzisz pełny kolor, na ekranie sRGB przeglądarka pokazuje najbliższy. v4 celuje w Safari 16.4, Chrome 111 i Firefox 128 lub nowsze, a wszystkie rozumieją oklch().
| Klasa | Hex w v3 | Zamiennik hex w v4 | Chroma v3 → v4 | Na białym 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);
}Jak dodać własne kolory w Tailwind v4
Zadeklaruj zmienną w przestrzeni nazw --color- wewnątrz @theme. Część po --color- staje się nazwą klasy, więc --color-brand daje bg-brand, text-brand, border-brand, ring-brand i każde inne narzędzie koloru, a do tego var(--color-brand) w CSS. Akceptowane są hex, rgb(), hsl() i oklch().
Żeby zastąpić domyślną paletę zamiast ją rozszerzać, najpierw wyzeruj przestrzeń nazw przez --color-*: initial, a potem zdefiniuj tylko potrzebne kolory. Narzędzia powstają wyłącznie dla klas, których faktycznie używasz, więc większość projektów zostawia domyślne.
CSS
@import 'tailwindcss';
@theme {
--color-brand: #e4572e;
--color-ink: oklch(21% 0.02 260);
}Jedno --color-brand wystarczy na pojedynczy akcent. Gdy tylko potrzebujesz stanów hover, przyciemnionych teł albo ciemnego motywu, zdefiniuj pełną skalę z numerowanymi stopniami.
Jak zbudować pełną własną skalę od 50 do 950
Poniższą skalę wygenerowano z #e4572e. Jej jasność 63,7% odpowiada stopniowi 500, więc kolor marki zostaje dokładnie na 500. Pozostałe stopnie idą za krzywą jasności Tailwinda i zachowują tę samą barwę, chroma osiąga szczyt na 500 i 600 i maleje ku obu końcom, a wszystkie stopnie mieszczą się w sRGB, więc wartości hex są dokładne.
Tak jak ciepłe barwy samego Tailwinda, ta skala potrzebuje 600 do tekstu podstawowego na białym. Brand-500 daje 3,68:1, co wystarcza tylko do dużego tekstu i ikon.
| Klasa | Hex | Na białym |
|---|---|---|
| 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);
}Przy wklejaniu zachowaj pełną precyzję. Zaokrąglenie jasności do 0,1% i chromy do trzech miejsc po przecinku wypycha brand-600 tuż poza sRGB, co nie szkodzi, ale kolor przestaje dokładnie odpowiadać wartości hex.
Jak działają modyfikatory przezroczystości, np. bg-blue-500/50
Ukośnik po kolorze ustawia jego kanał alfa: bg-blue-500/50 to blue-500 przy 50%. v3 kompilował to do rgb(59 130 246 / 0.5), co działało tylko dla kolorów, które Tailwind potrafił rozbić na kanały. Własne kolory zdefiniowane jako zmienne CSS wymagały specjalnego formatu rgb(var(--brand) / <alpha-value>).
v4 kompiluje modyfikator do color-mix() w Oklab, mieszając kolor z transparent. To działa z każdym kolorem: zmiennymi motywu, dowolnymi wartościami, np. bg-[#e4572e]/50, i twoimi własnymi zmiennymi CSS.
Przezroczystość zmienia kontrast. Na białym blue-500/50 wyświetla się jako #95bfff, a blue-500/10 jako #eaf2ff. Tekst w blue-600 ma 5,25:1, ale text-blue-600/60 spada do 2,62:1 i nie przechodzi nawet dla dużego tekstu.
CSS
.bg-blue-500\/50 {
background-color: color-mix(in oklab, var(--color-blue-500) 50%, transparent);
}Jak znaleźć najbliższą klasę Tailwind dla dowolnego hex
Porównaj hex ze wszystkimi 286 odcieniami według odległości percepcyjnej w Oklab (ΔEOK). Poniżej około 0,02 różnicę trudno zauważyć przy zestawieniu obok siebie, więc klasa Tailwind może zastąpić twój kolor. Powyżej około 0,04 lepiej dodać własny kolor.
Tabela pokazuje prawdziwe dopasowania. Stare wartości hex z v3 trafiają do tej samej klasy w v4, a typowy pomarańczowy marki, np. #ff5733, wypada między orange-600 a red-400. Strona Tailwind w PickShade robi to wyszukiwanie dla dowolnego koloru i pokazuje trzy najbliższe klasy.
| Twój kolor | Najbliższa klasa v4 | Hex klasy | Δ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 |
Pytania i odpowiedzi
Ile kolorów ma Tailwind CSS?
Tailwind CSS v4.3 ma 26 skal kolorów po 11 odcieni, od 50 do 950, co daje 286 kolorów oraz black i white. Siedemnaście skal jest chromatycznych, a dziewięć neutralnych: slate, gray, zinc, neutral, stone, mauve, olive, mist i taupe.
Jaki jest kod hex koloru blue-500 w Tailwind?
W Tailwind v4 blue-500 to oklch(62.3% 0.214 259.815), co leży nieco poza sRGB; najbliższy hex to #2b7fff. W Tailwind v3 blue-500 miał wartość #3b82f6, z tą samą jasnością i barwą, ale niższą chromą.
Jak dodać własne kolory w Tailwind v4?
Dodaj zmienną w przestrzeni nazw --color- wewnątrz @theme w swoim CSS, na przykład @theme { --color-brand-500: oklch(63.7% 0.184 36.48); }. Tailwind wygeneruje wtedy bg-brand-500, text-brand-500 i każde inne narzędzie koloru, a wartość będzie dostępna jako var(--color-brand-500).
Które kolory Tailwind są dostępne na białym tle?
Dla tekstu podstawowego z kontrastem 4,5:1 na białym użyj 600 dla red, blue, violet, purple, fuchsia, pink i rose, 700 dla orange, amber, yellow, lime, green, emerald, teal, cyan i sky oraz 500 dla indigo i większości neutralnych. Wśród neutralnych wyjątkiem jest olive, który potrzebuje 600.
Dlaczego kolory Tailwind v4 wyglądają na bardziej nasycone niż w v3?
Tailwind v4 definiuje kolory w OKLCH i podniósł ich chromę. Na przykład w skali blue jasność i barwa zostały prawie dokładnie takie jak w v3, a chroma środkowych stopni wzrosła o 0,02–0,03. 94 z 286 kolorów leży teraz poza sRGB i korzysta z szerszej przestrzeni Display P3, więc wyglądają żywiej na ekranach P3, takich jak nowe iPhone’y i Maki.
Czy w @theme w Tailwind v4 można używać kolorów hex?
Tak. Zmienne motywu przyjmują dowolny kolor CSS, w tym hex, rgb(), hsl() i oklch(). Modyfikatory przezroczystości działają ze wszystkimi, bo v4 buduje je przez color-mix().