צבעי 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.
זמן קריאה: 5 דק׳
איך בנויה פלטת הצבעים של 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 כמעט שחורה. מחלקה היא ה-utility ועוד הצבע והדרגה: 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 רגיל ובסגנונות inline.
הפלטה עצמה כוונה מחדש, לא צוירה מחדש. כשממירים ל-OKLCH, ל-blue-500 של v3 (#3b82f6) יש בדיוק אותה בהירות ואותו גוון כמו ל-blue-500 של v4. רק הכרומה עלתה, מ-0.188 ל-0.214. שאר סולם הכחול מתנהג באותו אופן, חוץ מ-blue-400 שגם נעשה כהה יותר ב-0.7 נקודות. הניגודיות כמעט לא זזה, והצבעים נראים חיים יותר.
הכרומה הנוספת חורגת מ-sRGB. מתוך 286 הצבעים של v4, 94 נמצאים מחוץ ל-sRGB ובתוך Display P3, וכולם כרומטיים. ל-orange יש 9 מתוך 11 דרגות בחוץ, ל-blue ארבע (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 וכל utility צבע אחר, ובנוסף var(--color-brand) ב-CSS. מתקבלים HEX, rgb(), hsl() ו-oklch().
כדי להחליף את פלטת ברירת המחדל במקום להרחיב אותה, אפסו קודם את מרחב השמות עם --color-*: initial, ואז הגדירו רק את הצבעים שאתם רוצים. מחלקות utility נוצרות רק למחלקות שאתם באמת משתמשים בהן, ולכן רוב הפרויקטים משאירים את ברירות המחדל.
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 צבעים ועוד שחור ולבן. שבעה-עשר סולמות כרומטיים ותשעה ניטרליים: 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 וכל utility צבע אחר, והערך זמין גם כ-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. מתוך 286 הצבעים, 94 נמצאים עכשיו מחוץ ל-sRGB ומשתמשים בטווח הרחב יותר של Display P3, ולכן הם נראים חיים יותר במסכי P3 כמו מכשירי iPhone ו-Mac חדשים.
אפשר להשתמש בצבעי HEX בתוך @theme ב-Tailwind v4?
כן. משתני ערכת הנושא מקבלים כל צבע CSS, כולל HEX, rgb(), hsl() ו-oklch(). מגדירי שקיפות עובדים עם כולם, כי v4 בונה אותם עם color-mix().