For this project we will be using npm for package management. You can follow this steps to create a minimal Astro 5 with Tailwind CSS 4 project and implement a basic theme toggle button.
Prerequisites:
- NodeJs installed
- Code editor download here
1. Create a new Astro project
# Create a new project with npm
npm create astro@latest my-astro-project
If you don't have installed create astro just accept the installation. During the initial setup, select the options you prefer (generally "Empty" is a good option to start with).
Navigate to the project directory
cd my-astro-project
2. Install Tailwind CSS 4
Install Tailwind CSS based on the integration with astro in tailwindcss docs you can check here:
npm install tailwindcss @tailwindcss/vite
3. Configure Tailwind CSS for Astro
Modify the atro.config.mjs file:
import { defineConfig } from "astro/config";
// add this line
import tailwindcss from "@tailwindcss/vite";
export default defineConfig({
// add this code
vite: {
plugins: [tailwindcss()],
},
// add this code
});
4. Create the global CSS file
Create a file at src/styles/global.css with the following content:
@tailwindcss;
/* Create a custom Tailwind variant for dark mode.
* It applies styles when .dark is present on the element.
* :where(.dark, .dark *) ensures low specificity for better overrides.
*/
@custom-variant dark (&:where(.dark, .dark *));
5. Add content to index
Modify the src/pages/index.astro file with this content:
---
---
lang="en">
charset="utf-8" />
name="viewport" content="width=device-width, initial-scale=1" />
My Astro Theme Toggle
class="transition-colors duration-300 bg-white text-black dark:bg-gray-900 dark:text-white">
class="container mx-auto p-4 flex items-center justify-center">
class="text-2xl font-bold mb-4">Astro Site + Tailwind
id="theme-toggle"
class="px-4 py-2 bg-gray-200 dark:bg-gray-700 rounded-md"
>
Toggle Theme
class="mt-8">
More content...
// Simple script to toggle the theme
document.getElementById('theme-toggle')?.addEventListener('click', () => {
document.body.classList.toggle('dark');
});
Enter fullscreen mode
Exit fullscreen mode
6. Run the development server
npm run dev
Enter fullscreen mode
Exit fullscreen mode
This will start the Astro development server. Navigate to http://localhost:4321 in your browser to see your site and test the theme toggle button.