- Learn
- Stack Essentials
- Tailwind CSS
- Introduction to Tailwind CSS
Learn Tailwind CSS fundamentals and understand why AI tools generate utility-first styles.
Introduction to Tailwind CSS
Tailwind CSS is the styling framework of choice for AI coding tools. Understanding its utility-first approach helps you read, modify, and extend AI-generated styles.
Why AI Tools Use Tailwind
Self-Describing Styles
Traditional CSS requires context-switching:
/* styles.css - What does this do? */
.card {
padding: 1rem;
background: white;
border-radius: 0.5rem;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
Tailwind is inline and descriptive:
{/* Styles are right here, easy to understand */}
<div className="p-4 bg-white rounded-lg shadow-sm">
Card content
</div>
AI can generate complete components without separate style files.
Constrained Design System
Tailwind provides a consistent scale:
Spacing: 0, 0.5, 1, 1.5, 2, 2.5, 3, 4, 5, 6, 8, 10, 12, 16...
Colors: slate, gray, zinc, neutral, red, orange, yellow, green...
Sizes: xs, sm, md, lg, xl, 2xl, 3xl...
AI doesn't guess random values—it uses the system.
Component-Level Styling
No cascade conflicts:
// Each component is self-contained
<button className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">
Click me
</button>
Core Concepts
Utility Classes
Single-purpose classes that do one thing:
// Layout
<div className="flex items-center justify-between">
// Spacing
<div className="p-4 m-2 space-y-4">
// Typography
<h1 className="text-2xl font-bold text-gray-900">
// Colors
<div className="bg-blue-500 text-white border-gray-200">
// Sizing
<div className="w-full h-64 max-w-md min-h-screen">
The className Pattern
Combine utilities for complete styling:
<button className="
px-4 py-2 // Padding
bg-blue-500 // Background
text-white // Text color
font-medium // Font weight
rounded-lg // Border radius
hover:bg-blue-600 // Hover state
focus:outline-none // Remove outline
focus:ring-2 // Add ring on focus
focus:ring-blue-500 // Ring color
disabled:opacity-50 // Disabled state
">
Submit
</button>
Responsive Design
Mobile-first with breakpoint prefixes:
<div className="
w-full // Mobile: full width
md:w-1/2 // Medium screens: half width
lg:w-1/3 // Large screens: third width
">
Breakpoints:
sm:- 640px and upmd:- 768px and uplg:- 1024px and upxl:- 1280px and up2xl:- 1536px and up
State Variants
Style different states:
<input className="
border border-gray-300
hover:border-gray-400 // On hover
focus:border-blue-500 // On focus
focus:ring-2 // Focus ring
disabled:bg-gray-100 // When disabled
invalid:border-red-500 // Invalid input
"/>
Common Patterns
Flexbox Layout
// Horizontal centering
<div className="flex justify-center">
// Vertical centering
<div className="flex items-center">
// Both centered
<div className="flex items-center justify-center">
// Space between
<div className="flex justify-between">
// Gap between items
<div className="flex gap-4">
// Wrap items
<div className="flex flex-wrap">
// Column layout
<div className="flex flex-col">
Grid Layout
// Basic grid
<div className="grid grid-cols-3 gap-4">
// Responsive grid
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
// Span columns
<div className="col-span-2">
Card Component
<div className="bg-white rounded-lg shadow-md p-6">
<h2 className="text-xl font-semibold text-gray-900">
Card Title
</h2>
<p className="mt-2 text-gray-600">
Card description goes here.
</p>
</div>
Button Styles
// Primary
<button className="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600">
// Secondary
<button className="px-4 py-2 bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200">
// Outline
<button className="px-4 py-2 border border-gray-300 text-gray-700 rounded-lg hover:bg-gray-50">
// Danger
<button className="px-4 py-2 bg-red-500 text-white rounded-lg hover:bg-red-600">
Form Inputs
<input
type="text"
className="
w-full px-3 py-2
border border-gray-300 rounded-lg
focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent
placeholder-gray-400
"
placeholder="Enter your email"
/>
Reading AI-Generated Tailwind
Decode the Classes
// AI generates:
<div className="relative flex items-center justify-center min-h-screen bg-gradient-to-br from-blue-500 to-purple-600">
// Breaking it down:
// relative → position: relative
// flex → display: flex
// items-center → align-items: center
// justify-center → justify-content: center
// min-h-screen → min-height: 100vh
// bg-gradient-to-br → gradient background, bottom-right direction
// from-blue-500 → gradient start color
// to-purple-600 → gradient end color
Common Prefixes
p- padding
m- margin
w- width
h- height
bg- background
text- text (color or size)
font- font properties
border- borders
rounded- border radius
shadow- box shadow
Spacing Scale
0 → 0px
1 → 0.25rem (4px)
2 → 0.5rem (8px)
3 → 0.75rem (12px)
4 → 1rem (16px)
5 → 1.25rem (20px)
6 → 1.5rem (24px)
8 → 2rem (32px)
10 → 2.5rem (40px)
12 → 3rem (48px)
16 → 4rem (64px)
Color Scale
50 → lightest
100-400 → light shades
500 → base color
600-800 → dark shades
900 → darkest
950 → near black
Example: blue-500 is the standard blue, blue-300 is lighter, blue-700 is darker.
Modifying AI-Generated Styles
Adding Classes
// AI generates:
<button className="px-4 py-2 bg-blue-500 text-white rounded">
// You add hover effect:
<button className="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600 transition-colors">
Replacing Classes
// AI generates blue button:
<button className="bg-blue-500 hover:bg-blue-600">
// You want green:
<button className="bg-green-500 hover:bg-green-600">
Responsive Adjustments
// AI generates fixed width:
<div className="w-96">
// You make it responsive:
<div className="w-full md:w-96">
Setup Verification
Tailwind v4 (Current)
Tailwind v4 uses a CSS-first configuration model:
/* globals.css */
@import "tailwindcss";
/* Custom theme values */
@theme {
--color-brand: #3b82f6;
--font-display: "Inter", sans-serif;
}
No tailwind.config.js required for most projects. Content detection is automatic.
Tailwind v3 (Legacy)
If you're on an older project with Tailwind v3:
// tailwind.config.js
export default {
content: [
'./pages/**/*.{js,ts,jsx,tsx,mdx}',
'./components/**/*.{js,ts,jsx,tsx,mdx}',
'./app/**/*.{js,ts,jsx,tsx,mdx}',
],
theme: {
extend: {},
},
plugins: [],
}
/* globals.css - v3 syntax */
@tailwind base;
@tailwind components;
@tailwind utilities;
Note: Tailwind v4 is now the default for new projects. AI tools generate v4 syntax by default.
Common Mistakes
Forgetting Responsive Prefixes
// ❌ Fixed width on mobile
<div className="w-1/2">
// ✅ Full width on mobile, half on larger screens
<div className="w-full md:w-1/2">
Missing State Styles
// ❌ No hover/focus states
<button className="bg-blue-500 text-white">
// ✅ Interactive states included
<button className="bg-blue-500 text-white hover:bg-blue-600 focus:ring-2">
Conflicting Classes
// ❌ Both classes conflict
<div className="p-4 p-8"> // Which padding?
// ✅ Use one value or responsive
<div className="p-4 md:p-8">
Summary
- Tailwind uses utility classes for styling
- Mobile-first responsive design with
sm:,md:,lg:prefixes - State variants like
hover:,focus:,disabled: - Consistent scale for spacing, colors, and sizes
- AI prefers Tailwind because it's inline and self-documenting
Next Steps
Learn responsive design and dark mode in the next lesson.