Using Tailwind's Colours Without the Tooling
I think of Tailwind as a design system wrapped up in some clever tooling. As someone that has a hard time picking colours, my favourite part of the design system is the colour palette.
Much as I like Tailwind, I also enjoy writing plain CSS. I was looking for a way to plop Tailwind's colours into a set of plain CSS custom properties.
And while I'm creating a set of colours I'd like them to be defined as HSL values, not the RGB hex values that Tailwind uses.
What to do?
If I were feeling pragmatic I'd manually convert the few colours I'm interested in, and get on with my actual task. But I'm not writing this for the sake of pragmatism. This is a time for unnecessary automation!
I wrote a script that takes Tailwind's colours
object and converts it to a string of CSS custom properties. It swaps the RGB hex values over to HSL at the same time.
Credit to CSS Tricks for the hex to HSL conversion function (and of course Tailwind for the colours).
The output looks like this:
--transparent: transparent; --current: currentColor; --black: hsl(0, 0%, 0%); --white: hsl(0, 0%, 100%); --slate-50: hsl(210, 40%, 98%); --slate-100: hsl(210, 40%, 96.1%); --slate-200: hsl(214, 31.8%, 91.4%); --slate-300: hsl(213, 26.8%, 83.9%); --slate-400: hsl(215, 20.2%, 65.1%); --slate-500: hsl(215, 16.3%, 46.9%); --slate-600: hsl(215, 19.3%, 34.5%); --slate-700: hsl(215, 25%, 26.7%); --slate-800: hsl(217, 32.6%, 17.5%); --slate-900: hsl(222, 47.4%, 11.2%); --gray-50: hsl(210, 20%, 98%); --gray-100: hsl(220, 14.3%, 95.9%); --gray-200: hsl(220, 13%, 91%); --gray-300: hsl(216, 12.2%, 83.9%); --gray-400: hsl(218, 10.6%, 64.9%); --gray-500: hsl(220, 8.9%, 46.1%); --gray-600: hsl(215, 13.8%, 34.1%); --gray-700: hsl(217, 19.1%, 26.7%); --gray-800: hsl(215, 27.9%, 16.9%); --gray-900: hsl(221, 39.3%, 11%); --zinc-50: hsl(0, 0%, 98%); --zinc-100: hsl(240, 4.8%, 95.9%); --zinc-200: hsl(240, 5.9%, 90%); --zinc-300: hsl(240, 4.9%, 83.9%); --zinc-400: hsl(240, 5%, 64.9%); --zinc-500: hsl(240, 3.8%, 46.1%); --zinc-600: hsl(240, 5.2%, 33.9%); --zinc-700: hsl(240, 5.3%, 26.1%); --zinc-800: hsl(240, 3.7%, 15.9%); --zinc-900: hsl(240, 5.9%, 10%); --neutral-50: hsl(0, 0%, 98%); --neutral-100: hsl(0, 0%, 96.1%); --neutral-200: hsl(0, 0%, 89.8%); --neutral-300: hsl(0, 0%, 83.1%); --neutral-400: hsl(0, 0%, 63.9%); --neutral-500: hsl(0, 0%, 45.1%); --neutral-600: hsl(0, 0%, 32.2%); --neutral-700: hsl(0, 0%, 25.1%); --neutral-800: hsl(0, 0%, 14.9%); --neutral-900: hsl(0, 0%, 9%); --stone-50: hsl(60, 9.1%, 97.8%); --stone-100: hsl(60, 4.8%, 95.9%); --stone-200: hsl(20, 5.9%, 90%); --stone-300: hsl(24, 5.7%, 82.9%); --stone-400: hsl(24, 5.4%, 63.9%); --stone-500: hsl(25, 5.3%, 44.7%); --stone-600: hsl(33, 5.5%, 32.4%); --stone-700: hsl(30, 6.3%, 25.1%); --stone-800: hsl(12, 6.5%, 15.1%); --stone-900: hsl(24, 9.8%, 10%); --red-50: hsl(0, 85.7%, 97.3%); --red-100: hsl(0, 93.3%, 94.1%); --red-200: hsl(0, 96.3%, 89.4%); --red-300: hsl(0, 93.5%, 81.8%); --red-400: hsl(0, 90.6%, 70.8%); --red-500: hsl(0, 84.2%, 60.2%); --red-600: hsl(0, 72.2%, 50.6%); --red-700: hsl(0, 73.7%, 41.8%); --red-800: hsl(0, 70%, 35.3%); --red-900: hsl(0, 62.8%, 30.6%); --orange-50: hsl(33, 100%, 96.5%); --orange-100: hsl(34, 100%, 91.8%); --orange-200: hsl(32, 97.7%, 83.1%); --orange-300: hsl(31, 97.2%, 72.4%); --orange-400: hsl(27, 96%, 61%); --orange-500: hsl(25, 95%, 53.1%); --orange-600: hsl(21, 90.2%, 48.2%); --orange-700: hsl(17, 88.3%, 40.4%); --orange-800: hsl(15, 79.1%, 33.7%); --orange-900: hsl(15, 74.6%, 27.8%); --amber-50: hsl(48, 100%, 96.1%); --amber-100: hsl(48, 96.5%, 88.8%); --amber-200: hsl(48, 96.6%, 76.7%); --amber-300: hsl(46, 96.7%, 64.5%); --amber-400: hsl(43, 96.4%, 56.3%); --amber-500: hsl(38, 92.1%, 50.2%); --amber-600: hsl(32, 94.6%, 43.7%); --amber-700: hsl(26, 90.5%, 37.1%); --amber-800: hsl(23, 82.5%, 31.4%); --amber-900: hsl(22, 77.8%, 26.5%); --yellow-50: hsl(55, 91.7%, 95.3%); --yellow-100: hsl(55, 96.7%, 88%); --yellow-200: hsl(53, 98.3%, 76.9%); --yellow-300: hsl(50, 97.8%, 63.5%); --yellow-400: hsl(48, 95.8%, 53.1%); --yellow-500: hsl(45, 93.4%, 47.5%); --yellow-600: hsl(41, 96.1%, 40.4%); --yellow-700: hsl(35, 91.7%, 32.9%); --yellow-800: hsl(32, 81%, 28.8%); --yellow-900: hsl(28, 72.5%, 25.7%); --lime-50: hsl(78, 92%, 95.1%); --lime-100: hsl(80, 89.1%, 89.2%); --lime-200: hsl(81, 88.5%, 79.6%); --lime-300: hsl(82, 84.5%, 67.1%); --lime-400: hsl(83, 78%, 55.5%); --lime-500: hsl(84, 80.5%, 44.3%); --lime-600: hsl(85, 85.2%, 34.5%); --lime-700: hsl(86, 78.4%, 27.3%); --lime-800: hsl(86, 69%, 22.7%); --lime-900: hsl(88, 61.2%, 20.2%); --green-50: hsl(138, 76.5%, 96.7%); --green-100: hsl(141, 84.2%, 92.5%); --green-200: hsl(141, 78.9%, 85.1%); --green-300: hsl(142, 76.6%, 73.1%); --green-400: hsl(142, 69.2%, 58%); --green-500: hsl(142, 70.6%, 45.3%); --green-600: hsl(142, 76.2%, 36.3%); --green-700: hsl(142, 71.8%, 29.2%); --green-800: hsl(143, 64.2%, 24.1%); --green-900: hsl(144, 61.2%, 20.2%); --emerald-50: hsl(152, 81%, 95.9%); --emerald-100: hsl(149, 80.4%, 90%); --emerald-200: hsl(152, 76%, 80.4%); --emerald-300: hsl(156, 71.6%, 66.9%); --emerald-400: hsl(158, 64.4%, 51.6%); --emerald-500: hsl(160, 84.1%, 39.4%); --emerald-600: hsl(161, 93.5%, 30.4%); --emerald-700: hsl(163, 93.5%, 24.3%); --emerald-800: hsl(163, 88.1%, 19.8%); --emerald-900: hsl(164, 85.7%, 16.5%); --teal-50: hsl(166, 76.5%, 96.7%); --teal-100: hsl(167, 85.5%, 89.2%); --teal-200: hsl(168, 83.8%, 78.2%); --teal-300: hsl(171, 76.9%, 64.3%); --teal-400: hsl(172, 66%, 50.4%); --teal-500: hsl(173, 80.4%, 40%); --teal-600: hsl(175, 83.9%, 31.6%); --teal-700: hsl(175, 77.4%, 26.1%); --teal-800: hsl(176, 69.4%, 21.8%); --teal-900: hsl(176, 60.8%, 19%); --cyan-50: hsl(183, 100%, 96.3%); --cyan-100: hsl(185, 95.9%, 90.4%); --cyan-200: hsl(186, 93.5%, 81.8%); --cyan-300: hsl(187, 92.4%, 69%); --cyan-400: hsl(188, 85.7%, 53.3%); --cyan-500: hsl(189, 94.5%, 42.7%); --cyan-600: hsl(192, 91.4%, 36.5%); --cyan-700: hsl(193, 82.3%, 31%); --cyan-800: hsl(194, 69.6%, 27.1%); --cyan-900: hsl(196, 63.6%, 23.7%); --sky-50: hsl(204, 100%, 97.1%); --sky-100: hsl(204, 93.8%, 93.7%); --sky-200: hsl(201, 94.4%, 86.1%); --sky-300: hsl(199, 95.5%, 73.9%); --sky-400: hsl(198, 93.2%, 59.6%); --sky-500: hsl(199, 88.7%, 48.4%); --sky-600: hsl(200, 98%, 39.4%); --sky-700: hsl(201, 96.3%, 32.2%); --sky-800: hsl(201, 90%, 27.5%); --sky-900: hsl(202, 80.3%, 23.9%); --blue-50: hsl(214, 100%, 96.9%); --blue-100: hsl(214, 94.6%, 92.7%); --blue-200: hsl(213, 96.9%, 87.3%); --blue-300: hsl(212, 96.4%, 78.4%); --blue-400: hsl(213, 93.9%, 67.8%); --blue-500: hsl(217, 91.2%, 59.8%); --blue-600: hsl(221, 83.2%, 53.3%); --blue-700: hsl(224, 76.3%, 48%); --blue-800: hsl(226, 70.7%, 40.2%); --blue-900: hsl(224, 64.3%, 32.9%); --indigo-50: hsl(226, 100%, 96.7%); --indigo-100: hsl(226, 100%, 93.9%); --indigo-200: hsl(228, 96.5%, 88.8%); --indigo-300: hsl(230, 93.5%, 81.8%); --indigo-400: hsl(234, 89.5%, 73.9%); --indigo-500: hsl(239, 83.5%, 66.7%); --indigo-600: hsl(243, 75.4%, 58.6%); --indigo-700: hsl(245, 57.9%, 50.6%); --indigo-800: hsl(244, 54.5%, 41.4%); --indigo-900: hsl(242, 47.4%, 34.3%); --violet-50: hsl(250, 100%, 97.6%); --violet-100: hsl(251, 91.3%, 95.5%); --violet-200: hsl(251, 95.2%, 91.8%); --violet-300: hsl(252, 94.7%, 85.1%); --violet-400: hsl(255, 91.7%, 76.3%); --violet-500: hsl(258, 89.5%, 66.3%); --violet-600: hsl(262, 83.3%, 57.8%); --violet-700: hsl(263, 70%, 50.4%); --violet-800: hsl(263, 69.3%, 42.2%); --violet-900: hsl(264, 67.4%, 34.9%); --purple-50: hsl(270, 100%, 98%); --purple-100: hsl(269, 100%, 95.5%); --purple-200: hsl(269, 100%, 91.8%); --purple-300: hsl(269, 97.4%, 85.1%); --purple-400: hsl(270, 95.2%, 75.3%); --purple-500: hsl(271, 91%, 65.1%); --purple-600: hsl(271, 81.3%, 55.9%); --purple-700: hsl(272, 71.7%, 47.1%); --purple-800: hsl(273, 67.2%, 39.4%); --purple-900: hsl(274, 65.6%, 32%); --fuchsia-50: hsl(289, 100%, 97.8%); --fuchsia-100: hsl(287, 100%, 95.5%); --fuchsia-200: hsl(288, 95.8%, 90.6%); --fuchsia-300: hsl(291, 93.1%, 82.9%); --fuchsia-400: hsl(292, 91.4%, 72.5%); --fuchsia-500: hsl(292, 84.1%, 60.6%); --fuchsia-600: hsl(293, 69.5%, 48.8%); --fuchsia-700: hsl(295, 72.4%, 39.8%); --fuchsia-800: hsl(295, 70.2%, 32.9%); --fuchsia-900: hsl(297, 63.6%, 28%); --pink-50: hsl(327, 73.3%, 97.1%); --pink-100: hsl(326, 77.8%, 94.7%); --pink-200: hsl(326, 84.6%, 89.8%); --pink-300: hsl(327, 87.1%, 81.8%); --pink-400: hsl(329, 85.5%, 70.2%); --pink-500: hsl(330, 81.2%, 60.4%); --pink-600: hsl(333, 71.4%, 50.6%); --pink-700: hsl(335, 77.6%, 42%); --pink-800: hsl(336, 74.4%, 35.3%); --pink-900: hsl(336, 69%, 30.4%); --rose-50: hsl(356, 100%, 97.3%); --rose-100: hsl(356, 100%, 94.7%); --rose-200: hsl(353, 96.1%, 90%); --rose-300: hsl(353, 95.7%, 81.8%); --rose-400: hsl(351, 94.5%, 71.4%); --rose-500: hsl(350, 89.2%, 60.2%); --rose-600: hsl(347, 77.2%, 49.8%); --rose-700: hsl(345, 82.7%, 40.8%); --rose-800: hsl(343, 79.7%, 34.7%); --rose-900: hsl(342, 75.5%, 30.4%);
Which is based on the following input:
/* Tailwind 2 colours from// https://github.com/tailwindlabs/tailwindcss/blob/c64bc1f6526adb88ae2e3bbb96e2c529f92f6cb3/colors.js*/const colours = {transparent: "transparent",current: "currentColor",black: "#000",white: "#fff",slate: {50: "#f8fafc",100: "#f1f5f9",200: "#e2e8f0",300: "#cbd5e1",400: "#94a3b8",500: "#64748b",600: "#475569",700: "#334155",800: "#1e293b",900: "#0f172a",},gray: {50: "#f9fafb",100: "#f3f4f6",200: "#e5e7eb",300: "#d1d5db",400: "#9ca3af",500: "#6b7280",600: "#4b5563",700: "#374151",800: "#1f2937",900: "#111827",},zinc: {50: "#fafafa",100: "#f4f4f5",200: "#e4e4e7",300: "#d4d4d8",400: "#a1a1aa",500: "#71717a",600: "#52525b",700: "#3f3f46",800: "#27272a",900: "#18181b",},neutral: {50: "#fafafa",100: "#f5f5f5",200: "#e5e5e5",300: "#d4d4d4",400: "#a3a3a3",500: "#737373",600: "#525252",700: "#404040",800: "#262626",900: "#171717",},stone: {50: "#fafaf9",100: "#f5f5f4",200: "#e7e5e4",300: "#d6d3d1",400: "#a8a29e",500: "#78716c",600: "#57534e",700: "#44403c",800: "#292524",900: "#1c1917",},red: {50: "#fef2f2",100: "#fee2e2",200: "#fecaca",300: "#fca5a5",400: "#f87171",500: "#ef4444",600: "#dc2626",700: "#b91c1c",800: "#991b1b",900: "#7f1d1d",},orange: {50: "#fff7ed",100: "#ffedd5",200: "#fed7aa",300: "#fdba74",400: "#fb923c",500: "#f97316",600: "#ea580c",700: "#c2410c",800: "#9a3412",900: "#7c2d12",},amber: {50: "#fffbeb",100: "#fef3c7",200: "#fde68a",300: "#fcd34d",400: "#fbbf24",500: "#f59e0b",600: "#d97706",700: "#b45309",800: "#92400e",900: "#78350f",},yellow: {50: "#fefce8",100: "#fef9c3",200: "#fef08a",300: "#fde047",400: "#facc15",500: "#eab308",600: "#ca8a04",700: "#a16207",800: "#854d0e",900: "#713f12",},lime: {50: "#f7fee7",100: "#ecfccb",200: "#d9f99d",300: "#bef264",400: "#a3e635",500: "#84cc16",600: "#65a30d",700: "#4d7c0f",800: "#3f6212",900: "#365314",},green: {50: "#f0fdf4",100: "#dcfce7",200: "#bbf7d0",300: "#86efac",400: "#4ade80",500: "#22c55e",600: "#16a34a",700: "#15803d",800: "#166534",900: "#14532d",},emerald: {50: "#ecfdf5",100: "#d1fae5",200: "#a7f3d0",300: "#6ee7b7",400: "#34d399",500: "#10b981",600: "#059669",700: "#047857",800: "#065f46",900: "#064e3b",},teal: {50: "#f0fdfa",100: "#ccfbf1",200: "#99f6e4",300: "#5eead4",400: "#2dd4bf",500: "#14b8a6",600: "#0d9488",700: "#0f766e",800: "#115e59",900: "#134e4a",},cyan: {50: "#ecfeff",100: "#cffafe",200: "#a5f3fc",300: "#67e8f9",400: "#22d3ee",500: "#06b6d4",600: "#0891b2",700: "#0e7490",800: "#155e75",900: "#164e63",},sky: {50: "#f0f9ff",100: "#e0f2fe",200: "#bae6fd",300: "#7dd3fc",400: "#38bdf8",500: "#0ea5e9",600: "#0284c7",700: "#0369a1",800: "#075985",900: "#0c4a6e",},blue: {50: "#eff6ff",100: "#dbeafe",200: "#bfdbfe",300: "#93c5fd",400: "#60a5fa",500: "#3b82f6",600: "#2563eb",700: "#1d4ed8",800: "#1e40af",900: "#1e3a8a",},indigo: {50: "#eef2ff",100: "#e0e7ff",200: "#c7d2fe",300: "#a5b4fc",400: "#818cf8",500: "#6366f1",600: "#4f46e5",700: "#4338ca",800: "#3730a3",900: "#312e81",},violet: {50: "#f5f3ff",100: "#ede9fe",200: "#ddd6fe",300: "#c4b5fd",400: "#a78bfa",500: "#8b5cf6",600: "#7c3aed",700: "#6d28d9",800: "#5b21b6",900: "#4c1d95",},purple: {50: "#faf5ff",100: "#f3e8ff",200: "#e9d5ff",300: "#d8b4fe",400: "#c084fc",500: "#a855f7",600: "#9333ea",700: "#7e22ce",800: "#6b21a8",900: "#581c87",},fuchsia: {50: "#fdf4ff",100: "#fae8ff",200: "#f5d0fe",300: "#f0abfc",400: "#e879f9",500: "#d946ef",600: "#c026d3",700: "#a21caf",800: "#86198f",900: "#701a75",},pink: {50: "#fdf2f8",100: "#fce7f3",200: "#fbcfe8",300: "#f9a8d4",400: "#f472b6",500: "#ec4899",600: "#db2777",700: "#be185d",800: "#9d174d",900: "#831843",},rose: {50: "#fff1f2",100: "#ffe4e6",200: "#fecdd3",300: "#fda4af",400: "#fb7185",500: "#f43f5e",600: "#e11d48",700: "#be123c",800: "#9f1239",900: "#881337",},};