AI Workshop: learn to build apps with AI →
Tailwind CSS: You can’t generate classes dynamically in Tailwind

Join the AI Workshop and learn to build real-world apps with AI. A hands-on, practical program to level up your skills.


I wanted to have a dynamic color in Tailwind, using a syntax like this in JSX:

bg-${color}-500

But it wasn’t applied to the page because Tailwind couldn’t find, for example, the text bg-red-500 in the code, so the class was not included in the final CSS.

So instead I made a list of possible color options in a switch, and generated the class:

const getColorClass = (color) => {
  switch (color) {
    case 'green': return 'text-green-500'
    case 'blue': return 'text-blue-500'
    case 'red': return 'text-red-500'
    default: return ''
  }
}

And I used this function in my classes:

<h1 className={`mt-10 ${getColorClass(color)}`}>
...

A “quick way” is to write the classes you might need in a comment, like this:

/* possible grid values: grid-cols-1 grid-cols-2 grid-cols-3 */
<div className={`grid grid-cols-${data[0].length}`}>

In Tailwind v4 you can also safelist classes directly in CSS using @source inline():

@import "tailwindcss";
@source inline("text-green-500 text-blue-500 text-red-500");

This guarantees those classes are generated even if they do not appear in your HTML or JS files.

Lessons in this unit:

0: Introduction
1: Box model properties
2: Colors
3: Typography
4: Flexbox and Grid in Tailwind
5: Modifiers
6: Responsive design in Tailwind
7: Apply a style to children with Tailwind
8: How to fix Unknown at rule @tailwindcss (unknownAtRules) in VS Code
9: How to align center vertically using Tailwind
10: How to use custom fonts with Tailwind CSS
11: Setting up Tailwind CSS on Vite
12: Show-hide an element based on existence of a parent class in Tailwind
13: The Tailwind Cheat Sheet
14: How to set up Tailwind CSS (v4)
15: ▶︎ You can’t generate classes dynamically in Tailwind