رنگهای Tailwind CSS: پالت OKLCH در v4، رنگهای سفارشی و درجهها
Tailwind CSS v4 شامل 26 مقیاس رنگی است که هر کدام 11 درجه از 50 تا 950 دارند؛ در مجموع 286 رنگ که در OKLCH و بهصورت متغیرهای CSS مثل --color-blue-500 تعریف شدهاند. رنگهای خودتان را با @theme { --color-brand-500: oklch(...) } اضافه میکنید. شمارهٔ درجهٔ یکسان به معنای روشنایی یکسان نیست: blue-600 روشنترین آبی است که روی سفید 4.5:1 را پاس میکند، اما زرد به 700 نیاز دارد.
7 دقیقه مطالعه
ساختار پالت رنگ 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 اضافه شدند. سیاه و سفید هم جداگانه وجود دارند.
همهٔ مقیاسها همان 11 درجه را دارند: 50، 100، 200 تا 900، و 950. درجهٔ 50 تقریباً سفید است و 950 تقریباً سیاه. هر کلاس از یوتیلیتی، رنگ و درجه تشکیل میشود: bg-blue-500، text-rose-700، border-zinc-200.
شمارهٔ درجه جایگاهی در مقیاس است، نه مقدار روشنایی. روشنایی OKLCH درجهٔ 500 از 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 و همچنین green، emerald، teal، cyan و sky در درجهٔ 500 هنوز روشناند و برای متن اصلی به 700 نیاز دارند. red، blue، violet، purple، fuchsia، pink و rose از 600 پاس میشوند و indigo از همان 500. زرد استثناست: حتی 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 معمولی و استایلهای inline هم کار میکند.
خود پالت از نو طراحی نشد، فقط دوباره تنظیم شد. اگر blue-500 نسخهٔ v3 (#3b82f6) را به OKLCH تبدیل کنید، دقیقاً همان روشنایی و فام blue-500 نسخهٔ v4 را دارد. فقط کروما بالا رفت، از 0.188 به 0.214. بقیهٔ مقیاس آبی هم همین الگو را دارد، بهجز blue-400 که 0.7 واحد تیرهتر هم شد. کنتراست تقریباً تغییر نمیکند، در حالی که رنگها زندهتر به نظر میرسند.
این کرومای اضافه از sRGB فراتر میرود. 94 رنگ از 286 رنگ v4 بیرون از sRGB و درون Display P3 قرار دارند و همهشان رنگیاند. در orange، 9 درجه از 11 درجه بیرون از sRGB است و در 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 تنها برای یک رنگ تأکیدی کافی است. به محض اینکه به حالت هاور، پسزمینههای کمرنگ یا حالت تاریک نیاز داشتید، یک مقیاس کامل با درجههای شمارهدار تعریف کنید.
چطور یک مقیاس سفارشی کامل از 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 رنگ بهعلاوهٔ سیاه و سفید. هفده مقیاس رنگیاند و نه مقیاس خنثی: 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 رنگ سفارشی اضافه کنم؟
یک متغیر در فضای نام --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 روی سفید، برای red، blue، violet، purple، fuchsia، pink و rose از 600 استفاده کنید، برای orange، amber، yellow، lime، green، emerald، teal، cyan و sky از 700، و برای indigo و بیشتر مقیاسهای خنثی از 500. olive در میان خنثیها استثناست و به 600 نیاز دارد.
چرا رنگهای Tailwind v4 اشباعتر از v3 به نظر میرسند؟
Tailwind v4 رنگها را در OKLCH تعریف میکند و کرومای آنها را بالا برده است. برای مثال در مقیاس آبی، روشنایی و فام تقریباً دقیقاً مثل v3 ماندند، در حالی که کرومای درجههای میانی 0.02 تا 0.03 بیشتر شد. 94 رنگ از 286 رنگ اکنون بیرون از sRGB هستند و از گسترهٔ وسیعتر Display P3 استفاده میکنند، پس روی نمایشگرهای P3 مثل آیفونها و مکهای جدید زندهتر دیده میشوند.
آیا در @theme نسخهٔ v4 میتوانم از رنگ HEX استفاده کنم؟
بله. متغیرهای تم هر رنگ CSS را میپذیرند، از جمله HEX، rgb()، hsl() و oklch(). مدیفایرهای شفافیت با همهٔ آنها کار میکنند، چون v4 آنها را با color-mix() میسازد.