How to use template literals in Tailwind CSS to change classes dynamically ?
Last Updated :
23 Jul, 2025
Tailwind CSS is a popular utility-first CSS framework used by many web developers to build modern and responsive user interfaces. It provides a wide range of pre-defined classes that can be used to style elements, but what if we want to dynamically change classes based on some condition or user input? This is where template literals come in handy.
Template literals allow us to embed expressions in strings, making it easy to dynamically generate class names. In this article, we will learn how to use template literals with Tailwind CSS to change classes dynamically. Template literals, also known as template strings, are a feature of ECMAScript 6 (ES6) that allow us to create strings with embedded expressions.
Syntax: The syntax of template literals is simple: we use backticks (`string`) to enclose the string and ${} to embed expressions.
<div className={`{variable1} ${variable2}`}>
...
</div>
Installation and project setup: You can skip this part if you have a project setup already. Start by creating a new Next.js project if you don’t have one set up already. Before we start, make sure you have Node.js and npm installed on your system. You can download and install Node.js from this https://nodejs.org/en/.
To create a new Next.js application, run the following command in your terminal:
npx create-next-app@latest my-project
cd my-project
Next, install Tailwind CSS and then run the init command to generate both tailwind.config.js and postcss.config.js
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
Configure your template paths in your tailwind.config.js file as follows:
JavaScript
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./app/**/*.{js,ts,jsx,tsx}",
"./pages/**/*.{js,ts,jsx,tsx}",
"./components/**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
Finally, update the styles/globals.css file in your project directory to include the following code:
@tailwind base;
@tailwind components;
@tailwind utilities;
This imports the base, component, and utility styles provided by Tailwind CSS.Â
Run the App: To start the development server, on the command line run:
npm run dev
With the project setup out of the way, let's move on to some examples.
Project structure
Â
Dynamic class based on state:
Example 1: In this example, we will create a simple counter that increments or decrements a number when the user clicks on a button. We will use a state variable to keep track of the current count and change the color of buttons dynamically based on whether the count is positive or negative.
First, open the pages/index.js file in your project directory and replace its contents with the following code:
JavaScript
import { useState } from 'react'
export default function Home() {
const [count, setCount] = useState(0)
function increment() {
setCount(count + 1)
}
function decrement() {
setCount(count - 1)
}
return (
<div className="flex flex-col items-center
justify-center min-h-screen py-2">
<button
className={
`${count >= 0 ? 'bg-green-500' : 'bg-red-500'}
text-white font-bold py-2 px-4 rounded`
}
onClick={increment}
>
Increment
</button>
<h1 className="text-6xl my-8">{count}</h1>
<button
className={
`${count < 0 ? 'bg-green-500' : 'bg-red-500'}
text-white font-bold py-2 px-4 rounded`}
onClick={decrement}
>
Decrement
</button>
</div>
)
}
In this code, we use the useState hook to create a state variable called count and two functions increment and decrement to update the count. We also use template literals to dynamically generate class names for the buttons based on the value of the count. Conditions:
- If the count is greater than or equal to 0, the Increment button color will be green, and if it is negative, the Increment button color will be red.
- If the count is negative, the decrement button color will be green, and if it is greater than or equal to 0, the decrement button color will be red.
We use the ${} syntax to embed expressions in the string and the ternary operator to conditionally generate the class name. For example, the class name for the increment button is generated using the expression:
${count >= 0 ? 'bg-green-500' : 'bg-red-500'}
Which will evaluate bg-green-500 if the count is greater than or equal to 0, and bg-red-500 otherwise.
The rest of the code is just a simple HTML layout that displays the count and the two buttons.
Open your web browser and go to http://localhost:3000 to see the counter in action. Click on the buttons to increment or decrement the count and watch the button color change dynamically.
Output:
Â
Dynamic class based on user input
Example 2: In this example, we will create a form that asks the user to select their favorite color from a dropdown menu. We will use template literals to dynamically generate a class name for a div element based on the user's selection.
First, open the pages/index.js file in your project directory and replace its contents with the following code:
JavaScript
import { useState } from 'react'
const colors = [
{ name: 'Red', value: 'bg-red-500' },
{ name: 'Blue', value: 'bg-blue-500' },
{ name: 'Green', value: 'bg-green-500' },
{ name: 'Yellow', value: 'bg-yellow-500' },
{ name: 'Purple', value: 'bg-purple-500' },
]
export default function Home() {
const [selectedColor, setSelectedColor]
= useState('bg-red-500')
function handleChange(event) {
setSelectedColor(event.target.value)
}
return (
<div className="flex flex-col items-center
justify-center min-h-screen py-2">
<h1 className="text-6xl my-8">
Select your favorite color:
</h1>
<select className="bg-white border-2
border-gray-300 rounded-md py-2 px-4 mb-4"
value={selectedColor} onChange={handleChange}>
{colors.map(color => (
<option key={color.value} v
alue={color.value}>
{color.name}
</option>
))}
</select>
<div className={`w-64 h-64 ${selectedColor}`}></div>
</div>
)
}
In this code, we define an array of color options and use the useState hook to create a state variable called selectedColor that holds the user's selection. We also define a handleChange function that updates the state when the user selects a different option from the dropdown menu.
The form consists of <select> element that displays the color options and a <div> element that will display the selected color. We use template literals to dynamically generate the class name for the <div> element based on the value of selectedColor. For example, if the user selects "Blue" from the dropdown menu, the class name will be bg-blue-500.
The rest of the code is just a simple HTML layout that displays the form and the colored div element.
Open your web browser and go to http://localhost:3000 to see the color selector form. Select a color from the dropdown menu and watch the colored div element change dynamically.
Output:
Â
I hope this article has given you a good understanding of how to use template literals with Tailwind CSS to create dynamic user interfaces. With these skills, you can build even more complex and interactive applications that respond to user input in real time. To learn more about best practices while defining dynamic classes with template literals check out this official documentation of tailwindcss.
Similar Reads
CSS Tutorial CSS stands for Cascading Style Sheets. It is a stylesheet language used to style and enhance website presentation. CSS is one of the three main components of a webpage, along with HTML and JavaScript.HTML adds Structure to a web page.JavaScript adds logic to it and CSS makes it visually appealing or
7 min read
CSS Introduction CSS (Cascading Style Sheets) is a language designed to simplify the process of making web pages presentable.It allows you to apply styles to HTML documents by prescribing colors, fonts, spacing, and positioning.The main advantages are the separation of content (in HTML) and styling (in CSS) and the
4 min read
CSS Syntax CSS is written as a rule set, which consists of a selector and a declaration block. The basic syntax of CSS is as follows:The selector is a targeted HTML element or elements to which we have to apply styling.The Declaration Block or " { } " is a block in which we write our CSS.HTML<html> <h
2 min read
CSS Selectors CSS Selectors are used to target HTML elements on your pages, allowing you to apply styles based on their ID, class, type attributes, and more. There are mainly 5 types of selectors.Basic CSS Selectors: These are used to target elements by tag, .class, or # ID for fundamental styling needs.Combinato
7 min read
CSS Comments CSS comments are used to add notes or explanations to your code, helping you and others understand it better. They start with /* and end with */ and can be used for both single-line and multi-line comments. Note: Comments are ignored by browsers, so they wonât affect how your webpage looks or works.
2 min read
CSS Colors CSS colors are used to set the color of different parts of a webpage, like text, background, and borders. This helps make the page look more attractive and easier to read. You can define colors using names, hex codes, RGB values, and more.You can try different formats of colors here- #content-iframe
5 min read
CSS Borders Borders in CSS are used to create a visible outline around an element. They can be customized in terms ofWidth: The thickness of the border.Style: The appearance of the border (solid, dashed, dotted, etc.).Color: The color of the border.You can try different types of borders here- #custom-iframe{ he
5 min read
CSS Margins CSS margins are used to create space around an element, separating it from neighboring elements and the edges of the webpage. They control the layout by adjusting the distance between elements, providing better organization and readability.Syntax:body { margin: value;}HTML<html> <head>
4 min read
CSS Height and Width Height and Width in CSS are used to set the height and width of boxes. Their values can be set using length, percentage, or auto.Width and HeightThe width and height properties in CSS are used to define the dimensions of an element. The values can be set in various units, such as pixels (px), centim
4 min read
CSS Outline CSS outline is a property used to draw a line around an element's border. It does not affect the layout, unlike borders. It's often used to highlight elements, providing a visual emphasis without altering the dimensions of the element.Syntaxselector{ outline: outline-width outline-type outline-color
4 min read