Claude Code Plugins

Community-maintained marketplace

Feedback
30
0

Guide for implementing Tailwind CSS - a utility-first CSS framework for rapid UI development. Use when styling applications with responsive design, dark mode, custom themes, or building design systems with Tailwind's utility classes.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name tailwindcss
description Guide for implementing Tailwind CSS - a utility-first CSS framework for rapid UI development. Use when styling applications with responsive design, dark mode, custom themes, or building design systems with Tailwind's utility classes.
license MIT
version 1.0.0

Tailwind CSS Skill

Tailwind CSS is a utility-first CSS framework that enables rapid UI development by providing pre-built utility classes. It generates optimized CSS at build-time by scanning your project files, resulting in zero runtime overhead and minimal production bundles.

When to Use This Skill

Use this skill when:

  • Building responsive layouts with mobile-first design
  • Implementing dark mode and theme customization
  • Creating custom design systems with consistent spacing, colors, and typography
  • Styling React, Vue, Svelte, or any web framework components
  • Prototyping interfaces with rapid visual feedback
  • Building production applications with optimized CSS bundles
  • Working with state-based styling (hover, focus, disabled, etc.)
  • Creating complex layouts with Grid and Flexbox utilities

Core Concepts

Utility-First Approach

Tailwind provides low-level utility classes that you apply directly to HTML elements instead of writing custom CSS:

<!-- Traditional CSS approach -->
<div class="card">
	<h2 class="card-title">Title</h2>
</div>

<!-- Tailwind utility-first approach -->
<div class="rounded-lg bg-white p-6 shadow-md">
	<h2 class="text-2xl font-bold text-gray-900">Title</h2>
</div>

Benefits:

  • No CSS file switching - styles live with markup
  • No naming conventions needed
  • Automatic dead code elimination
  • Consistent design tokens across team
  • Fast iteration without CSS bloat

Build-Time Processing

Tailwind scans your source files at build-time and generates only the CSS classes you actually use:

// Tailwind analyzes these files
content: [
	"./src/**/*.{js,jsx,ts,tsx}",
	"./app/**/*.{js,jsx,ts,tsx}",
	"./components/**/*.{js,jsx,ts,tsx}",
];

Result: Optimized production bundles with zero runtime overhead.

Installation & Setup

Modern Setup with Vite

Step 1: Install dependencies

npm install -D tailwindcss @tailwindcss/vite
# or
pnpm add -D tailwindcss @tailwindcss/vite
# or
yarn add -D tailwindcss @tailwindcss/vite

Step 2: Configure Vite

// vite.config.ts
import { defineConfig } from "vite";
import tailwindcss from "@tailwindcss/vite";

export default defineConfig({
	plugins: [tailwindcss()],
});

Step 3: Import in CSS

/* src/index.css */
@import "tailwindcss";

Step 4: Reference stylesheet in HTML

<!DOCTYPE html>
<html>
	<head>
		<link rel="stylesheet" href="./src/index.css" />
	</head>
	<body>
		<div class="bg-blue-500 p-4 text-white">Hello Tailwind!</div>
	</body>
</html>

Framework-Specific Setup

Next.js (App Router):

npx create-next-app@latest --tailwind

Next.js (Manual):

// tailwind.config.js
module.exports = {
	content: ["./app/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}"],
};

React with Vite:

npm create vite@latest my-app -- --template react
npm install -D tailwindcss @tailwindcss/vite

Vue:

npm install -D tailwindcss @tailwindcss/vite

Svelte:

npm install -D tailwindcss @tailwindcss/vite

Astro:

npx astro add tailwind

PostCSS Setup (Alternative)

npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
// postcss.config.js
export default {
	plugins: {
		tailwindcss: {},
		autoprefixer: {},
	},
};

Design System & Tokens

Default Design System

Tailwind includes a comprehensive default design system:

  • Colors: 18 color palettes with 11 shades each (50-950)
  • Spacing: Consistent scale from 0.25rem to 96rem
  • Typography: Font sizes, weights, line heights
  • Breakpoints: Mobile-first responsive system
  • Shadows: Elevation system for depth
  • Border radius: Rounded corners at different scales

Customizing Theme

Use the @theme directive in CSS:

@import "tailwindcss";

@theme {
	/* Custom colors */
	--color-brand-50: oklch(0.97 0.02 264);
	--color-brand-500: oklch(0.55 0.22 264);
	--color-brand-900: oklch(0.25 0.15 264);

	/* Custom fonts */
	--font-display: "Satoshi", "Inter", sans-serif;
	--font-body: "Inter", system-ui, sans-serif;

	/* Custom spacing */
	--spacing-18: calc(var(--spacing) * 18);
	--spacing-navbar: 4.5rem;

	/* Custom breakpoints */
	--breakpoint-3xl: 120rem;
	--breakpoint-4xl: 160rem;

	/* Custom shadows */
	--shadow-glow: 0 0 20px rgba(139, 92, 246, 0.3);
}

Usage:

<div class="bg-brand-500 font-display shadow-glow">Custom themed element</div>

Color System

Using default colors:

<div class="bg-blue-500">Background</div>
<p class="text-red-600">Text</p>
<div class="border-green-400">Border</div>

Color scale:

  • 50: Lightest
  • 100-400: Light variations
  • 500: Base color
  • 600-800: Dark variations
  • 950: Darkest

Color opacity modifiers:

<div class="bg-black/75">75% opacity</div>
<div class="text-blue-500/30">30% opacity</div>
<div class="bg-purple-500/87">87% opacity</div>

Utility Classes

Layout

Display:

<div class="block">Block</div>
<div class="inline-block">Inline Block</div>
<div class="flex">Flex</div>
<div class="inline-flex">Inline Flex</div>
<div class="grid">Grid</div>
<div class="hidden">Hidden</div>

Flexbox:

<div class="flex items-center justify-between gap-4">
	<div>Item 1</div>
	<div>Item 2</div>
</div>

<div class="flex flex-col items-start">
	<div>Vertical stack</div>
</div>

Grid:

<div class="grid grid-cols-3 gap-4">
	<div>Column 1</div>
	<div>Column 2</div>
	<div>Column 3</div>
</div>

<div class="grid grid-cols-[1fr_500px_2fr] gap-6">
	<div>Flexible</div>
	<div>Fixed 500px</div>
	<div>More flexible</div>
</div>

Positioning:

<div class="relative">
	<div class="absolute right-0 top-0">Positioned</div>
</div>

<div class="fixed bottom-4 right-4">Fixed</div>
<div class="sticky top-0">Sticky header</div>

Spacing

Padding & Margin:

<div class="p-4">Padding all sides</div>
<div class="px-6 py-3">Padding X and Y</div>
<div class="pb-4 pt-8">Padding top/bottom</div>
<div class="m-4">Margin all sides</div>
<div class="mx-auto">Center horizontally</div>
<div class="-mt-4">Negative margin</div>

Gap (Flexbox/Grid):

<div class="flex gap-4">Flex with gap</div>
<div class="grid grid-cols-3 gap-x-6 gap-y-4">Grid with X/Y gap</div>

Typography

Font Size:

<p class="text-xs">Extra small</p>
<p class="text-sm">Small</p>
<p class="text-base">Base (16px)</p>
<p class="text-lg">Large</p>
<p class="text-xl">Extra large</p>
<p class="text-2xl">2XL</p>
<h1 class="text-4xl font-bold">Heading</h1>

Font Weight:

<p class="font-light">Light (300)</p>
<p class="font-normal">Normal (400)</p>
<p class="font-medium">Medium (500)</p>
<p class="font-semibold">Semibold (600)</p>
<p class="font-bold">Bold (700)</p>

Text Alignment:

<p class="text-left">Left aligned</p>
<p class="text-center">Center aligned</p>
<p class="text-right">Right aligned</p>
<p class="text-justify">Justified</p>

Line Height:

<p class="leading-tight">Tight line height</p>
<p class="leading-normal">Normal line height</p>
<p class="leading-relaxed">Relaxed line height</p>

Combining font utilities:

<h1 class="text-4xl/tight font-bold">Font size 4xl with tight line-height</h1>

Colors & Backgrounds

Background colors:

<div class="bg-white">White background</div>
<div class="bg-gray-100">Gray background</div>
<div class="bg-linear-to-r from-blue-500 to-purple-600">
	Gradient background
</div>

Text colors:

<p class="text-gray-900">Dark text</p>
<p class="text-blue-600">Blue text</p>
<a class="text-blue-500 hover:text-blue-700">Link</a>

Borders

<div class="border">Default border</div>
<div class="border-2 border-gray-300">2px border</div>
<div class="border-b-2 border-t">Top and bottom borders</div>
<div class="rounded">Rounded corners</div>
<div class="rounded-lg">Large rounded</div>
<div class="rounded-full">Fully rounded</div>
<div class="rounded-md border border-red-500">Combined</div>

Shadows

<div class="shadow">Small shadow</div>
<div class="shadow-md">Medium shadow</div>
<div class="shadow-lg">Large shadow</div>
<div class="shadow-xl">Extra large shadow</div>
<div class="shadow-none">No shadow</div>

Responsive Design

Mobile-First Breakpoints

Tailwind uses a mobile-first approach. Base styles apply to all screen sizes, then use breakpoint prefixes to override at larger sizes:

Breakpoints:

  • sm: - 640px and up
  • md: - 768px and up
  • lg: - 1024px and up
  • xl: - 1280px and up
  • 2xl: - 1536px and up

Example:

<!-- Mobile: 1 column, Tablet: 2 columns, Desktop: 4 columns -->
<div class="grid grid-cols-1 gap-4 lg:grid-cols-4 sm:grid-cols-2">
	<div>Item 1</div>
	<div>Item 2</div>
	<div>Item 3</div>
	<div>Item 4</div>
</div>

<!-- Hide on mobile, show on desktop -->
<div class="hidden lg:block">Desktop only content</div>

<!-- Show on mobile, hide on desktop -->
<div class="block lg:hidden">Mobile only content</div>

<!-- Responsive text sizes -->
<h1 class="text-2xl lg:text-6xl md:text-4xl">Responsive heading</h1>

Custom Breakpoints

@theme {
	--breakpoint-3xl: 120rem;
	--breakpoint-tablet: 48rem;
}
<div class="tablet:grid-cols-2 3xl:grid-cols-6">Custom breakpoints</div>

Max-width Queries

<!-- Only apply styles below 768px -->
<div class="max-md:hidden flex">Hidden on mobile</div>

<!-- Between breakpoints -->
<div class="lg:hidden md:block">Only visible on tablets</div>

Container Queries

Style elements based on parent container width:

<div class="@container">
	<div class="@md:grid-cols-2 @lg:grid-cols-3">Responds to parent width</div>
</div>

Interactive States

Hover States

<button class="bg-blue-500 text-white hover:bg-blue-700">Hover me</button>

<a class="text-blue-600 hover:underline"> Hover link </a>

<div class="scale-100 transition-transform hover:scale-105">Scale on hover</div>

Focus States

<input class="border focus:border-blue-500 focus:ring-2 focus:ring-blue-200" />

<button class="bg-blue-500 focus:outline-none focus:ring-4 focus:ring-blue-300">
	Accessible button
</button>

Active States

<button class="bg-blue-500 active:bg-blue-800">Click me</button>

Disabled States

<button
	class="bg-blue-500 disabled:cursor-not-allowed disabled:opacity-50"
	disabled
>
	Disabled button
</button>

<input class="disabled:bg-gray-100" disabled />

Form States

<input class="invalid:border-red-500 focus:invalid:ring-red-200" required />

<input
	class="placeholder:italic placeholder:text-gray-400"
	placeholder="Search..."
/>

<input type="checkbox" class="checked:bg-blue-500" />

Group Hover (Parent State)

<div class="group hover:bg-gray-100">
	<p class="group-hover:text-blue-600">Text changes when parent is hovered</p>
	<img class="group-hover:opacity-50" src="..." />
</div>

Peer State (Sibling State)

<input type="checkbox" class="peer" id="terms" />
<label for="terms" class="peer-checked:text-blue-600"> I accept terms </label>

<input type="email" class="peer" required />
<p class="hidden text-red-600 peer-invalid:block">Invalid email</p>

Dark Mode

Setup Dark Mode

Media query approach (automatic):

<div class="bg-white text-gray-900 dark:bg-gray-900 dark:text-white">
	Auto switches based on system preference
</div>

Class-based approach (manual toggle):

// Add .dark class to <html> element
document.documentElement.classList.toggle("dark");

Dark Mode Utilities

<!-- Colors -->
<div class="bg-white dark:bg-slate-900">Background</div>
<p class="text-gray-900 dark:text-gray-100">Text</p>

<!-- Borders -->
<div class="border-gray-200 dark:border-gray-700">Border</div>

<!-- Complete example -->
<div
	class="rounded-lg border border-gray-200 bg-white p-6 dark:border-gray-700 dark:bg-gray-900"
>
	<h2 class="text-2xl font-bold text-gray-900 dark:text-white">
		Dark mode card
	</h2>
	<p class="text-gray-600 dark:text-gray-300">Content adapts to theme</p>
</div>

Dark Mode Toggle Implementation

// Store preference
function toggleDarkMode() {
	const isDark = document.documentElement.classList.toggle("dark");
	localStorage.setItem("theme", isDark ? "dark" : "light");
}

// Initialize on load
if (
	localStorage.theme === "dark" ||
	(!("theme" in localStorage) &&
		window.matchMedia("(prefers-color-scheme: dark)").matches)
) {
	document.documentElement.classList.add("dark");
}

Arbitrary Values

Use square brackets for one-off custom values:

Pixel values:

<div class="top-[117px]">Custom position</div>
<p class="text-[22px]">Custom font size</p>
<div class="w-[500px]">Custom width</div>

Colors:

<div class="bg-[#bada55]">Custom hex color</div>
<div class="text-[rgb(123,45,67)]">RGB color</div>
<div class="bg-[oklch(0.55_0.22_264)]">OKLCH color</div>

CSS variables:

<div class="bg-(--my-brand-color)">CSS variable</div>
<div class="text-(length:--my-font-size)">Type hint</div>

Complex values:

<div class="grid-cols-[1fr_500px_2fr]">Custom grid</div>
<div class="content-['>']">Custom content</div>
<div class="mask-type-luminance">Custom property</div>

Transitions & Animations

Transitions

<button class="bg-blue-500 transition-colors hover:bg-blue-700">
	Smooth color transition
</button>

<div class="transform transition-transform hover:scale-110">
	Scale with transition
</div>

<div class="transition-all duration-300 ease-in-out hover:shadow-lg">
	Multiple transitions
</div>

<!-- Duration options -->
<div class="transition duration-150">Fast</div>
<div class="transition duration-300">Normal</div>
<div class="transition duration-500">Slow</div>

Transforms

<!-- Scale -->
<div class="scale-95 hover:scale-100">Scale</div>

<!-- Rotate -->
<div class="rotate-45">Rotate 45deg</div>
<div class="hover:rotate-6">Slight rotation</div>

<!-- Translate -->
<div class="translate-x-4 translate-y-2">Move</div>

<!-- Skew -->
<div class="skew-x-12">Skew</div>

<!-- Combined -->
<div class="translate-x-2 rotate-3 scale-110 transform">
	Multiple transforms
</div>

Animations

<div class="animate-spin">Spinning</div>
<div class="animate-ping">Pinging</div>
<div class="animate-pulse">Pulsing</div>
<div class="animate-bounce">Bouncing</div>

Custom Animations

@theme {
	--animate-slide-in: slide-in 0.5s ease-out;
}

@keyframes slide-in {
	from {
		transform: translateX(-100%);
	}
	to {
		transform: translateX(0);
	}
}
<div class="animate-slide-in">Custom animation</div>

Advanced Patterns

Custom Utilities

Create reusable utility classes:

@utility content-auto {
	content-visibility: auto;
}

@utility tab-* {
	tab-size: var(--tab-size-*);
}
<div class="content-auto">Custom utility</div>
<pre class="tab-4">Custom tab size</pre>

Custom Variants

@custom-variant theme-midnight (&:where([data-theme="midnight"] *));
@custom-variant aria-checked (&[aria-checked="true"]);
<div theme-midnight:bg-navy-900>Applies when data-theme="midnight"</div>

Layer Organization

@layer base {
	h1 {
		@apply text-4xl font-bold;
	}

	body {
		@apply bg-white text-gray-900;
	}
}

@layer components {
	.btn {
		@apply rounded bg-blue-500 px-4 py-2 text-white hover:bg-blue-700;
	}

	.card {
		@apply rounded-lg bg-white p-6 shadow-md;
	}
}

Apply Directive

Extract repeated utilities into CSS classes:

.btn-primary {
	@apply rounded bg-blue-500 px-4 py-2 font-bold text-white hover:bg-blue-700;
}

.input-field {
	@apply rounded-md border border-gray-300 px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500;
}

Component Examples

Button Component

<!-- Primary button -->
<button
	class="transform rounded-lg bg-blue-600 px-6 py-3 font-semibold text-white shadow-md transition-all duration-200 hover:scale-105 hover:bg-blue-700 hover:shadow-lg focus:outline-none focus:ring-4 focus:ring-blue-300 active:bg-blue-800 disabled:cursor-not-allowed disabled:opacity-50"
>
	Click me
</button>

<!-- Secondary button -->
<button
	class="rounded-lg border-2 border-gray-300 bg-white px-6 py-3 font-semibold text-gray-700 hover:bg-gray-50"
>
	Secondary
</button>

<!-- Icon button -->
<button class="rounded-full p-2 transition-colors hover:bg-gray-100">
	<svg class="h-6 w-6">...</svg>
</button>

Card Component

<div
	class="overflow-hidden rounded-xl bg-white shadow-lg transition-shadow hover:shadow-xl dark:bg-gray-800"
>
	<img class="h-48 w-full object-cover" src="..." alt="Card image" />
	<div class="p-6">
		<h3 class="mb-2 text-2xl font-bold text-gray-900 dark:text-white">
			Card Title
		</h3>
		<p class="mb-4 text-gray-600 dark:text-gray-300">
			Card description text goes here
		</p>
		<button
			class="rounded-lg bg-blue-600 px-4 py-2 font-semibold text-white hover:bg-blue-700"
		>
			Learn More
		</button>
	</div>
</div>

Form Component

<form
	class="mx-auto max-w-md rounded-lg bg-white p-8 shadow-md dark:bg-gray-800"
>
	<div class="mb-6">
		<label
			class="mb-2 block font-semibold text-gray-700 dark:text-gray-300"
			for="email"
		>
			Email
		</label>
		<input
			type="email"
			id="email"
			class="w-full rounded-lg border border-gray-300 px-4 py-2 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white"
			placeholder="you@example.com"
		/>
	</div>

	<div class="mb-6">
		<label
			class="mb-2 block font-semibold text-gray-700 dark:text-gray-300"
			for="password"
		>
			Password
		</label>
		<input
			type="password"
			id="password"
			class="w-full rounded-lg border border-gray-300 px-4 py-2 invalid:border-red-500 focus:outline-none focus:ring-2 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white"
		/>
	</div>

	<button
		type="submit"
		class="w-full rounded-lg bg-blue-600 py-3 font-bold text-white transition-colors hover:bg-blue-700"
	>
		Sign In
	</button>
</form>

Navigation Component

<nav class="sticky top-0 z-50 bg-white shadow-md dark:bg-gray-900">
	<div class="container mx-auto px-4">
		<div class="flex h-16 items-center justify-between">
			<div class="flex items-center gap-8">
				<a href="/" class="text-2xl font-bold text-blue-600">Logo</a>
				<div class="hidden gap-6 md:flex">
					<a
						href="#"
						class="text-gray-700 transition-colors hover:text-blue-600 dark:text-gray-300"
						>Home</a
					>
					<a
						href="#"
						class="text-gray-700 transition-colors hover:text-blue-600 dark:text-gray-300"
						>About</a
					>
					<a
						href="#"
						class="text-gray-700 transition-colors hover:text-blue-600 dark:text-gray-300"
						>Services</a
					>
				</div>
			</div>
			<button
				class="rounded p-2 hover:bg-gray-100 dark:hover:bg-gray-800 md:hidden"
			>
				<svg class="h-6 w-6">...</svg>
			</button>
		</div>
	</div>
</nav>

Grid Layout

<div class="container mx-auto px-4 py-8">
	<div
		class="grid grid-cols-1 gap-6 xl:grid-cols-4 lg:grid-cols-3 sm:grid-cols-2"
	>
		<div class="rounded-lg bg-white p-6 shadow-md">Item 1</div>
		<div class="rounded-lg bg-white p-6 shadow-md">Item 2</div>
		<div class="rounded-lg bg-white p-6 shadow-md">Item 3</div>
		<div class="rounded-lg bg-white p-6 shadow-md">Item 4</div>
	</div>
</div>

Best Practices

1. Use Consistent Spacing Scale

<!-- Good: Use spacing scale -->
<div class="mb-6 p-4">
	<!-- Avoid: Arbitrary values unless necessary -->
	<div class="mb-[23px] p-[17px]"></div>
</div>

2. Leverage Design Tokens

<!-- Good: Use semantic color names -->
<button class="bg-blue-600 hover:bg-blue-700">
	<!-- Avoid: One-off colors -->
	<button class="bg-[#3B82F6] hover:bg-[#2563EB]"></button>
</button>

3. Mobile-First Responsive Design

<!-- Good: Mobile first, then scale up -->
<div class="text-base lg:text-xl md:text-lg">
	<!-- Avoid: Desktop first -->
	<div class="text-xl lg:text-base"></div>
</div>

4. Component Extraction

// React component with Tailwind
function Button({ children, variant = "primary" }) {
	const baseClasses = "font-semibold px-6 py-3 rounded-lg transition-colors";
	const variants = {
		primary: "bg-blue-600 hover:bg-blue-700 text-white",
		secondary: "bg-gray-200 hover:bg-gray-300 text-gray-900",
	};

	return (
		<button className={`${baseClasses} ${variants[variant]}`}>
			{children}
		</button>
	);
}

5. Use @apply for Repeated Patterns

/* Only use @apply for truly repeated patterns */
@layer components {
	.card {
		@apply rounded-lg bg-white p-6 shadow-md transition-shadow hover:shadow-lg;
	}
}

6. Accessibility First

<button class="focus:outline-none focus:ring-4 focus:ring-blue-300">
	Accessible button
</button>

<a class="text-blue-600 hover:underline focus:outline-2 focus:outline-offset-2">
	Accessible link
</a>

7. Performance Optimization

  • Use PurgeCSS in production (automatic with modern setup)
  • Avoid dynamic class names: class={text-${color}-500} won't work
  • Use safelist for dynamic classes if needed

8. Dark Mode Consistency

<!-- Ensure all elements have dark mode variants -->
<div
	class="border border-gray-200 bg-white text-gray-900 dark:border-gray-700 dark:bg-gray-900 dark:text-white"
>
	Complete dark mode support
</div>

Common Patterns

Centering Content

<!-- Horizontal center -->
<div class="flex justify-center">Content</div>
<div class="mx-auto w-fit">Content</div>

<!-- Vertical center -->
<div class="flex h-screen items-center">Content</div>

<!-- Center both axes -->
<div class="flex h-screen items-center justify-center">Centered content</div>

Full-Width Container with Max Width

<div class="container mx-auto max-w-7xl px-4">
	Content with consistent max width
</div>

Aspect Ratio Boxes

<div class="aspect-square">Square</div>
<div class="aspect-video">16:9 video</div>
<div class="aspect-4/3">4:3 ratio</div>

Truncate Text

<p class="truncate">Long text that will be truncated with ellipsis...</p>

<p class="line-clamp-3">
	Long text that will be truncated after 3 lines with ellipsis...
</p>

Smooth Scrolling

<html class="scroll-smooth">
	<a href="#section">Smooth scroll to section</a>
</html>

Troubleshooting

Classes Not Working

  1. Check content configuration:
// tailwind.config.js
content: [
	"./src/**/*.{js,jsx,ts,tsx}",
	// Add all file paths where you use Tailwind
];
  1. Dynamic classes won't work:
// ❌ Won't work
const color = 'blue'
<div className={`text-${color}-500`} />

// ✅ Works
<div className={color === 'blue' ? 'text-blue-500' : 'text-red-500'} />
  1. Specificity issues:
/* Use !important sparingly */
<div class="text-red-500!">Overrides other styles</div>

Build Issues

# Clear cache and rebuild
rm -rf .next node_modules/.cache
npm run dev

IntelliSense Not Working

Install official extension:

  • VS Code: "Tailwind CSS IntelliSense"
  • Configure in .vscode/settings.json:
{
	"tailwindCSS.experimental.classRegex": [
		["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"]
	]
}

Resources

Framework Integration Examples

React

export function Card({ title, description }) {
	return (
		<div className="rounded-lg bg-white p-6 shadow-md transition-shadow hover:shadow-lg">
			<h3 className="mb-2 text-2xl font-bold">{title}</h3>
			<p className="text-gray-600">{description}</p>
		</div>
	);
}

Vue

<template>
	<div
		class="rounded-lg bg-white p-6 shadow-md transition-shadow hover:shadow-lg"
	>
		<h3 class="mb-2 text-2xl font-bold">{{ title }}</h3>
		<p class="text-gray-600">{{ description }}</p>
	</div>
</template>

<script setup>
defineProps(["title", "description"]);
</script>

Svelte

<script>
  export let title
  export let description
</script>

<div class="bg-white rounded-lg shadow-md p-6 hover:shadow-lg transition-shadow">
  <h3 class="text-2xl font-bold mb-2">{title}</h3>
  <p class="text-gray-600">{description}</p>
</div>

Implementation Checklist

When implementing Tailwind CSS:

  • Install tailwindcss and framework-specific plugin
  • Configure build tool (Vite/PostCSS/CLI)
  • Set up content paths in configuration
  • Import Tailwind in CSS file
  • Configure custom theme tokens (if needed)
  • Set up dark mode strategy
  • Install VS Code IntelliSense extension
  • Create reusable component patterns
  • Implement responsive breakpoints
  • Add accessibility focus states
  • Test dark mode across all components
  • Optimize for production build
  • Document custom utilities and components