| name | tailwind-css |
| description | This skill should be used when the user asks to "use Tailwind CSS", "install Tailwind", "style with Tailwind", "add Tailwind utilities", "create responsive design with Tailwind", or needs guidance on Tailwind CSS utility-first styling and configuration. |
Tailwind CSS
Build modern, responsive web interfaces using utility-first CSS with Tailwind CSS.
Overview
Tailwind CSS is a utility-first CSS framework that generates CSS by scanning HTML files, JavaScript components, and templates for class names. It provides single-purpose utility classes that compose together directly in markup, enabling rapid UI development without writing custom CSS.
Core Principles
Utility-First Styling
Apply styles by combining single-purpose utility classes directly in markup:
<div class="mx-auto flex max-w-sm items-center gap-x-4 rounded-xl bg-white p-6 shadow-lg">
<img class="size-12 shrink-0" src="/logo.svg" alt="Logo" />
<div>
<div class="text-xl font-medium text-black">Title</div>
<p class="text-gray-500">Description text</p>
</div>
</div>
Mobile-First Responsive Design
Unprefixed utilities apply to all screen sizes. Prefixed utilities apply at specified breakpoint and above:
<img class="w-16 md:w-32 lg:w-48" src="..." />
State Variants
Prefix utilities with state variants to apply styles conditionally:
<button class="bg-sky-500 hover:bg-sky-700 focus:ring-2 dark:bg-sky-900">
Save
</button>
Installation
Using Vite (Recommended)
-
Install dependencies:
npm install tailwindcss @tailwindcss/vite
-
Configure Vite plugin in vite.config.ts:
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})
-
Import Tailwind in CSS file:
@import "tailwindcss";
-
Start development:
npm run dev
Using PostCSS
-
Install dependencies:
npm install tailwindcss @tailwindcss/postcss
-
Configure PostCSS in postcss.config.js:
module.exports = {
plugins: {
'@tailwindcss/postcss': {}
}
}
-
Import Tailwind in CSS file:
@import "tailwindcss";
Using Tailwind CLI
-
Install globally or as dev dependency:
npm install -D tailwindcss
-
Create input CSS with Tailwind imports:
@import "tailwindcss";
-
Build CSS:
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch
Common Utility Patterns
Layout
<div class="flex items-center justify-between gap-4">
<div class="grid grid-cols-3 gap-6">
<div class="mx-auto max-w-7xl px-4">
Typography
<h1 class="text-4xl font-bold text-gray-900">
<p class="text-base text-gray-600 leading-relaxed">
<p class="truncate">
Spacing
<div class="p-6">
<div class="px-4 py-2">
<div class="m-4">
<div class="mt-8 mb-4">
Colors
<div class="bg-blue-500">
<p class="text-red-600">
<div class="border border-gray-300">
Responsive Design
<div class="flex flex-col md:flex-row">
<div class="p-4 md:p-6 lg:p-8">
<div class="hidden lg:block">
Breakpoints Reference
| Prefix | Min Width | CSS |
|---|
sm | 40rem (640px) | @media (width >= 40rem) |
md | 48rem (768px) | @media (width >= 48rem) |
lg | 64rem (1024px) | @media (width >= 64rem) |
xl | 80rem (1280px) | @media (width >= 80rem) |
2xl | 96rem (1536px) | @media (width >= 96rem) |
State Variants
Apply utilities based on element state:
<button class="bg-blue-500 hover:bg-blue-700">
<input class="border-gray-300 focus:border-blue-500 focus:ring-2">
<button class="active:bg-blue-800">
<button class="disabled:opacity-50 disabled:cursor-not-allowed">
<div class="bg-white dark:bg-gray-800">
<a class="group">
<span class="group-hover:underline">Link</span>
</a>
Arbitrary Values
Use square bracket syntax for one-off values:
<div class="bg-[#1da1f2]">
<div class="top-[117px]">
<div class="grid-cols-[200px_1fr_1fr]">
<div class="h-[calc(100vh-4rem)]">
<div class="bg-(--brand-color)">
Customization
Theme Variables
Customize design tokens using CSS variables in @theme:
@import "tailwindcss";
@theme {
--color-brand: #ff6347;
--font-sans: 'Inter', system-ui, sans-serif;
--spacing-18: 4.5rem;
--breakpoint-3xl: 120rem;
}
Adding Custom Utilities
Define custom utilities in @layer utilities:
@import "tailwindcss";
@layer utilities {
.text-balance {
text-wrap: balance;
}
.scrollbar-hide {
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
}
}
Managing Duplication
Extract Components
For repeated patterns, create reusable components:
export function Button({ variant, children }) {
const baseClasses = "px-4 py-2 rounded-lg font-medium";
const variants = {
primary: "bg-blue-500 text-white hover:bg-blue-700",
secondary: "bg-gray-200 text-gray-900 hover:bg-gray-300"
};
return (
<button className={`${baseClasses} ${variants[variant]}`}>
{children}
</button>
);
}
Custom CSS Classes
For template-based projects, create reusable CSS classes:
@layer components {
.btn-primary {
border-radius: calc(infinity * 1px);
background-color: var(--color-blue-500);
padding-inline: var(--spacing-4);
padding-block: var(--spacing-2);
font-weight: var(--font-weight-semibold);
color: white;
&:hover {
@media (hover: hover) {
background-color: var(--color-blue-700);
}
}
}
}
Framework Integration
Tailwind integrates with popular frameworks:
- Next.js - Add
@tailwindcss/vite to Next.js config
- Laravel - Use Vite with Laravel Mix
- SvelteKit - Add to Vite config
- Vue/Nuxt - Vite plugin integration
- Angular - Configure with build system
- React - Vite or Create React App setup
Consult references/framework-setup.md for detailed framework-specific instructions.
Best Practices
DO
- Use utility classes for rapid prototyping and development
- Apply mobile-first responsive design patterns
- Leverage state variants for interactive elements
- Create components for repeated UI patterns
- Use theme variables for consistent design tokens
- Compose utilities to build complex designs
- Use arbitrary values for one-off customizations
DON'T
- Fight the utility-first approach with excessive custom CSS
- Use
sm: prefix to target mobile (use unprefixed instead)
- Duplicate long class lists (extract components)
- Ignore dark mode styling (
dark: variant)
- Mix Tailwind with large amounts of traditional CSS
- Override utilities with
!important unnecessarily
- Create deeply nested custom component styles
Common Patterns
Card Component
<div class="overflow-hidden rounded-lg bg-white shadow-md">
<img class="h-48 w-full object-cover" src="image.jpg" alt="" />
<div class="p-6">
<h3 class="text-xl font-semibold">Card Title</h3>
<p class="mt-2 text-gray-600">Card description text.</p>
<button class="mt-4 rounded bg-blue-500 px-4 py-2 text-white hover:bg-blue-700">
Action
</button>
</div>
</div>
Form Input
<div class="space-y-2">
<label class="block text-sm font-medium text-gray-700" for="email">
Email
</label>
<input
id="email"
type="email"
class="w-full rounded-lg border border-gray-300 px-4 py-2 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="you@example.com"
/>
</div>
Navigation Bar
<nav class="border-b border-gray-200 bg-white">
<div class="mx-auto flex max-w-7xl items-center justify-between px-4 py-4">
<div class="text-xl font-bold">Brand</div>
<div class="hidden space-x-6 md:flex">
<a href="#" class="text-gray-700 hover:text-blue-500">Home</a>
<a href="#" class="text-gray-700 hover:text-blue-500">About</a>
<a href="#" class="text-gray-700 hover:text-blue-500">Contact</a>
</div>
</div>
</nav>
Troubleshooting
Styles not applying:
- Verify Tailwind is imported in CSS
- Check build process is running
- Ensure classes are detected in source files
- Confirm no conflicting CSS overriding utilities
Responsive variants not working:
- Add viewport meta tag to HTML
<head>
- Use mobile-first approach (unprefixed for mobile)
- Check breakpoint prefix spelling
Dark mode not working:
- Verify
dark: variant is configured
- Check system/manual dark mode preference
- Ensure parent has dark mode class if using class strategy
Build output too large:
- Tailwind only includes used utilities by default
- Verify source file detection is working
- Check for overly broad file patterns
Additional Resources
Reference Files
For detailed information:
references/framework-setup.md - Framework-specific installation guides for Next.js, Laravel, Vue, Angular, and more
references/utility-reference.md - Comprehensive utility class reference organized by category
references/customization-guide.md - Deep dive on theme customization, plugins, and extending Tailwind
Official Documentation
Quick Reference
Installation:
npm install tailwindcss @tailwindcss/vite
Vite Config:
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({ plugins: [tailwindcss()] })
Import in CSS:
@import "tailwindcss";
Common Utilities:
- Layout:
flex, grid, block, inline-block
- Spacing:
p-4, m-2, gap-4, space-x-2
- Sizing:
w-full, h-screen, max-w-lg
- Typography:
text-lg, font-bold, leading-relaxed
- Colors:
bg-blue-500, text-white, border-gray-300
- Responsive:
md:flex-row, lg:grid-cols-3
- State:
hover:bg-blue-700, focus:ring-2, dark:bg-gray-800