Tailwind CSS: A Beginner's Guide to Utility-First Styling
Stop fighting with CSS and start building beautiful interfaces faster
Published on May 24, 2026 · 15 min read
Before We Begin: The Problem Tailwind Solves
I remember my first real CSS project. I spent hours crafting the perfect class names:
/* Am I doing this right? */
.article-card-wrapper-inner-container {
/* 20 minutes later... */
}
.article-card__title--large {
/* Did I use BEM correctly? */
}
.article-card .title .wrapper span {
/* Please don't break when I add one more div... */
}
Then came the panic when I changed one class and accidentally broke three other components. Sound familiar?
Tailwind CSS takes a different approach. Instead of writing custom CSS for every component, you use pre-built utility classes directly in your HTML.
What This Means for You
Traditional CSS:
.card {
background-color: white;
border-radius: 8px;
padding: 1.5rem;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.card-title {
font-size: 1.25rem;
font-weight: 600;
margin-bottom: 0.5rem;
}
Tailwind CSS:
<div class="bg-white rounded-lg p-6 shadow-md">
<h2 class="text-xl font-semibold mb-2">Hello World</h2>
</div>
No context switching between files. No naming things. No CSS breaking in unexpected ways.
What you'll learn:
- Core concepts explained simply
- The most common utility classes you'll actually use
- How to build responsive layouts without media queries
- Customizing Tailwind for your project
- Real examples you can copy and paste
Prerequisites:
- Basic HTML knowledge
- A text editor
- A browser
Time to complete: About 1-2 hours
Let's dive in.
Part 1: What Is Tailwind CSS? (The Mental Model)
Think of It Like LEGO Bricks
Traditional CSS is like sculpting clay. You start with nothing and shape everything manually. Powerful, but time-consuming and easy to mess up.
Tailwind is like LEGO. You have pre-built bricks (utility classes) that snap together. You don't need to craft each piece—just combine them to build what you want.
The Utility-First Philosophy
Instead of writing this:
.alert-success {
background-color: #10b981;
color: white;
padding: 1rem;
border-radius: 0.5rem;
font-weight: 600;
}
You write this:
<div class="bg-green-500 text-white p-4 rounded-lg font-bold">
Success! Your changes were saved.
</div>
Every class does one thing:
bg-green-500→ background colortext-white→ text colorp-4→ padding (1rem)rounded-lg→ border radiusfont-bold→ bold text
Benefits you'll feel immediately:
- No more naming things —
header-left-wrapper-inner? Never again - No more CSS conflicts — Classes are local by design
- No more switching files — HTML and styles in one place
- No more guessing sizes — Everything is consistent
- No more media query spaghetti — Responsive utilities built in
Part 2: Setting Up Tailwind
Let's get Tailwind running in a project. We'll use the CDN for learning, then set up a proper build.
Method 1: Quick Start with CDN (For Learning)
Create an HTML file and paste this:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My First Tailwind Page</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 p-8">
<div class="max-w-md mx-auto bg-white rounded-xl shadow-md p-6">
<h1 class="text-2xl font-bold text-gray-900 mb-4">
Hello Tailwind!
</h1>
<p class="text-gray-600">
This is my first Tailwind page. It's so easy!
</p>
</div>
</body>
</html>
Open this in your browser. You just built a styled card with zero CSS!
Method 2: Proper Setup with npm (For Real Projects)
# Create a project folder
mkdir my-tailwind-project
cd my-tailwind-project
# Initialize npm
npm init -y
# Install Tailwind
npm install -D tailwindcss
# Create Tailwind config file
npx tailwindcss init
Create src/input.css:
@tailwind base;
@tailwind components;
@tailwind utilities;
Update tailwind.config.js:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: {
extend: {},
},
plugins: [],
}
Add a build script to package.json:
"scripts": {
"build": "tailwindcss -i ./src/input.css -o ./dist/output.css --watch"
}
Run it:
npm run build
Now create src/index.html and link to your CSS:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My Tailwind Project</title>
<link href="/dist/output.css" rel="stylesheet">
</head>
<body class="bg-gray-100 p-8">
<h1 class="text-3xl font-bold text-blue-600">
It works!
</h1>
</body>
</html>
Part 3: The Most Common Utility Classes
Let's learn the classes you'll use 90% of the time. I've grouped them by what they do.
Layout and Spacing
| Class | What It Does | Example |
|---|---|---|
container | Centers content with max-width | <div class="container mx-auto"> |
mx-auto | Auto margins (centers horizontally) | <div class="mx-auto"> |
p-4 | Padding on all sides (1rem) | p-0, p-1, p-2, p-4, p-8 |
px-4 | Padding left+right | px-2, px-6 |
py-2 | Padding top+bottom | py-1, py-4 |
m-4 | Margin on all sides | Same scale as padding |
space-y-4 | Vertical spacing between children | <div class="space-y-4"> |
Spacing Scale:
0→ 0px1→ 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)20→ 5rem (80px)24→ 6rem (96px)32→ 8rem (128px)
Flexbox and Grid
| Class | What It Does |
|---|---|
flex | Display flex |
grid | Display grid |
flex-col | Column direction |
items-center | Align items center |
justify-between | Space between items |
gap-4 | Gap between grid/flex items |
grid-cols-3 | 3 equal columns |
Example:
<div class="grid grid-cols-3 gap-4">
<div class="bg-blue-200 p-4">Column 1</div>
<div class="bg-blue-200 p-4">Column 2</div>
<div class="bg-blue-200 p-4">Column 3</div>
</div>
<div class="flex justify-between items-center">
<h2 class="text-xl">Title</h2>
<button class="bg-blue-500 text-white px-4 py-2 rounded">Button</button>
</div>
Typography
| Class | What It Does |
|---|---|
text-sm | Small text |
text-base | Base text (default) |
text-lg | Large text |
text-xl, text-2xl...text-9xl | Increasing sizes |
font-normal | Normal weight |
font-medium | Medium weight |
font-semibold | Semi-bold |
font-bold | Bold |
text-center | Center align |
text-gray-600 | Gray text (various shades) |
leading-relaxed | Relaxed line height |
Example:
<h1 class="text-4xl font-bold text-gray-900 mb-2">
Big Title
</h1>
<p class="text-lg text-gray-600 leading-relaxed">
This is a paragraph with comfortable line height and nice gray color.
</p>
Colors
Tailwind uses a numbered scale from 50 to 900:
text-gray-50 → Lightest gray
text-gray-500 → Medium gray
text-gray-900 → Darkest gray
bg-blue-500 → Medium blue background
bg-red-100 → Very light red background
bg-green-600 → Darker green background
Common color names:
slate,gray,zinc,neutral,stone— Neutralsred,orange,amber,yellow— Warm colorsgreen,emerald,teal— Cool colorsblue,indigo,violet,purple— Blues/purplespink,rose— Pinks
Example with hover states:
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
Hover me
</button>
Borders and Shadows
| Class | What It Does |
|---|---|
rounded | Small border radius |
rounded-lg | Large border radius |
rounded-full | Circular (for avatars, pills) |
border | Add a border |
border-2 | 2px border |
border-gray-300 | Border color |
shadow-sm | Small shadow |
shadow-md | Medium shadow |
shadow-lg | Large shadow |
shadow-xl | Extra large shadow |
Example:
<div class="bg-white rounded-lg shadow-lg p-6 border border-gray-200">
<div class="flex items-center space-x-4">
<img src="avatar.jpg" class="w-12 h-12 rounded-full">
<div>
<h3 class="font-semibold">John Doe</h3>
<p class="text-gray-500">Developer</p>
</div>
</div>
</div>
Width and Height
| Class | What It Does |
|---|---|
w-full | Width 100% |
w-1/2 | Width 50% |
w-1/3 | Width 33.333% |
w-64 | Fixed width (16rem) |
h-full | Height 100% |
h-64 | Fixed height |
min-h-screen | Minimum height = viewport |
max-w-md | Max width medium |
max-w-2xl | Max width large |
Example:
<div class="min-h-screen bg-gray-100">
<div class="max-w-2xl mx-auto p-8">
<div class="w-1/2 bg-white p-4">
This takes half the container width
</div>
</div>
</div>
Part 4: Building Your First Components
Let's build real components step by step. Copy these and experiment!
Component 1: Profile Card
<div class="max-w-sm mx-auto bg-white rounded-xl shadow-lg overflow-hidden">
<!-- Cover image -->
<div class="h-32 bg-gradient-to-r from-blue-500 to-purple-600"></div>
<!-- Avatar -->
<div class="flex justify-center -mt-12">
<div class="w-24 h-24 rounded-full border-4 border-white overflow-hidden">
<img src="https://via.placeholder.com/96" alt="Avatar" class="w-full h-full object-cover">
</div>
</div>
<!-- Content -->
<div class="px-6 py-4 text-center">
<h2 class="text-xl font-bold text-gray-900">Sarah Johnson</h2>
<p class="text-gray-500">Product Designer</p>
<div class="flex justify-center space-x-4 mt-4">
<span class="text-sm text-gray-600">1.2k followers</span>
<span class="text-sm text-gray-600">320 following</span>
</div>
<button class="mt-6 bg-blue-500 text-white px-6 py-2 rounded-lg hover:bg-blue-600 transition">
Follow
</button>
</div>
</div>
Component 2: Pricing Card
<div class="max-w-sm mx-auto bg-white rounded-2xl shadow-xl overflow-hidden">
<!-- Header -->
<div class="bg-gradient-to-r from-purple-500 to-pink-500 px-6 py-8 text-white text-center">
<h3 class="text-2xl font-bold">Pro Plan</h3>
<p class="text-purple-100">For growing teams</p>
<div class="mt-4">
<span class="text-5xl font-bold">$29</span>
<span class="text-purple-200">/month</span>
</div>
</div>
<!-- Features -->
<div class="p-6">
<ul class="space-y-4">
<li class="flex items-center">
<svg class="w-5 h-5 text-green-500 mr-3" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"/>
</svg>
<span>Up to 10 team members</span>
</li>
<li class="flex items-center">
<svg class="w-5 h-5 text-green-500 mr-3" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"/>
</svg>
<span>100GB storage</span>
</li>
<li class="flex items-center">
<svg class="w-5 h-5 text-green-500 mr-3" fill="currentColor" viewBox="0 0 20 20">
<path fill-rule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clip-rule="evenodd"/>
</svg>
<span>Advanced analytics</span>
</li>
</ul>
<button class="w-full mt-6 bg-gradient-to-r from-purple-500 to-pink-500 text-white py-3 rounded-lg font-semibold hover:opacity-90 transition">
Get Started
</button>
</div>
</div>
Component 3: Navigation Bar
<nav class="bg-white shadow-lg">
<div class="max-w-6xl mx-auto px-4">
<div class="flex justify-between items-center h-16">
<!-- Logo -->
<div class="text-xl font-bold text-gray-800">
MyApp
</div>
<!-- Desktop Menu -->
<div class="hidden md:flex space-x-8">
<a href="#" class="text-gray-700 hover:text-blue-600 transition">Home</a>
<a href="#" class="text-gray-700 hover:text-blue-600 transition">Features</a>
<a href="#" class="text-gray-700 hover:text-blue-600 transition">Pricing</a>
<a href="#" class="text-gray-700 hover:text-blue-600 transition">About</a>
</div>
<!-- Buttons -->
<div class="hidden md:flex space-x-4">
<button class="px-4 py-2 text-gray-700 hover:text-blue-600 transition">
Login
</button>
<button class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition">
Sign Up
</button>
</div>
<!-- Mobile menu button -->
<button class="md:hidden text-gray-700">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/>
</svg>
</button>
</div>
</div>
</nav>
Part 5: Responsive Design – No Media Queries Needed
This is where Tailwind shines. Add responsive prefixes to any utility:
sm:→ Small screens (640px and up)md:→ Medium screens (768px and up)lg:→ Large screens (1024px and up)xl:→ Extra large (1280px and up)2xl:→ 2X large (1536px and up)
Example: Responsive Card Grid
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
<!-- On mobile: 1 column -->
<!-- On tablet: 2 columns -->
<!-- On desktop: 3 columns -->
<div class="bg-white p-4 rounded shadow">Card 1</div>
<div class="bg-white p-4 rounded shadow">Card 2</div>
<div class="bg-white p-4 rounded shadow">Card 3</div>
<div class="bg-white p-4 rounded shadow">Card 4</div>
<div class="bg-white p-4 rounded shadow">Card 5</div>
<div class="bg-white p-4 rounded shadow">Card 6</div>
</div>
Example: Responsive Typography
<h1 class="text-2xl md:text-4xl lg:text-6xl font-bold">
<!-- Mobile: 2xl size -->
<!-- Tablet: 4xl size -->
<!-- Desktop: 6xl size -->
Responsive Heading
</h1>
Example: Responsive Padding
<div class="p-4 md:p-8 lg:p-12">
<!-- Mobile: 1rem padding -->
<!-- Tablet: 2rem padding -->
<!-- Desktop: 3rem padding -->
Content with responsive spacing
</div>
Example: Hide/Show Elements
<!-- Hide on mobile, show on desktop -->
<div class="hidden md:block">
Desktop-only content
</div>
<!-- Show on mobile, hide on desktop -->
<div class="block md:hidden">
Mobile-only content
</div>
Part 6: Hover, Focus, and Other States
Tailwind makes interactive states easy with modifiers:
Common State Modifiers
<!-- Hover -->
<button class="bg-blue-500 hover:bg-blue-700 text-white">
Hover me
</button>
<!-- Focus -->
<input class="border focus:border-blue-500 focus:ring-2 focus:ring-blue-200 outline-none">
<!-- Active -->
<button class="active:bg-blue-800 transform active:scale-95">
Click me
</button>
<!-- Disabled -->
<button class="disabled:opacity-50 disabled:cursor-not-allowed" disabled>
Can't click
</button>
Group Hover (Parent-Child Interaction)
<div class="group relative w-64 h-64 bg-gray-200 rounded-lg overflow-hidden">
<img src="image.jpg" class="w-full h-full object-cover group-hover:scale-110 transition duration-300">
<div class="absolute inset-0 bg-black bg-opacity-50 opacity-0 group-hover:opacity-100 transition flex items-center justify-center">
<span class="text-white text-lg">View Details</span>
</div>
</div>
Dark Mode
Enable dark mode in tailwind.config.js:
module.exports = {
darkMode: 'class', // or 'media' for system preference
}
Then use dark: variants:
<div class="bg-white dark:bg-gray-800 text-gray-900 dark:text-white">
<h1 class="text-2xl">Auto-switches in dark mode</h1>
</div>
Part 7: Customizing Tailwind
The real power comes from customizing Tailwind for your project.
Step 1: Edit tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: {
extend: {
// Custom colors
colors: {
primary: {
50: '#eff6ff',
100: '#dbeafe',
200: '#bfdbfe',
300: '#93c5fd',
400: '#60a5fa',
500: '#3b82f6',
600: '#2563eb',
700: '#1d4ed8',
800: '#1e40af',
900: '#1e3a8a',
},
secondary: {
500: '#f59e0b',
}
},
// Custom spacing
spacing: {
'18': '4.5rem',
'88': '22rem',
'128': '32rem',
},
// Custom font sizes
fontSize: {
'xxs': '0.625rem',
},
// Custom animations
animation: {
'bounce-slow': 'bounce 2s infinite',
}
},
},
plugins: [],
}
Step 2: Use Your Custom Classes
<button class="bg-primary-500 hover:bg-primary-600 text-white px-4 py-2 rounded">
Custom Primary Button
</button>
<div class="mt-18 w-88">
Custom spacing in action
</div>
<div class="animate-bounce-slow">
Slow bounce animation
</div>
Part 8: Common Patterns and Examples
Pattern 1: Card Grid with Hover Effects
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6 p-6">
<!-- Repeat this card -->
<div class="bg-white rounded-lg shadow-md overflow-hidden hover:shadow-xl transition">
<img src="https://via.placeholder.com/400x200" class="w-full h-48 object-cover">
<div class="p-4">
<h3 class="font-semibold text-lg mb-2">Card Title</h3>
<p class="text-gray-600 text-sm mb-4">Description goes here</p>
<div class="flex justify-between items-center">
<span class="text-blue-600 font-bold">$19.99</span>
<button class="bg-blue-500 text-white px-3 py-1 rounded text-sm hover:bg-blue-600">
Buy Now
</button>
</div>
</div>
</div>
</div>
Pattern 2: Hero Section
<div class="bg-gradient-to-r from-blue-600 to-purple-600 text-white">
<div class="container mx-auto px-4 py-24 text-center">
<h1 class="text-5xl font-bold mb-6">
Welcome to Our Platform
</h1>
<p class="text-xl mb-8 max-w-2xl mx-auto opacity-90">
Build amazing things faster with our powerful tools and intuitive interface.
</p>
<div class="space-x-4">
<button class="bg-white text-blue-600 px-8 py-3 rounded-lg font-semibold hover:bg-gray-100 transition">
Get Started
</button>
<button class="border-2 border-white text-white px-8 py-3 rounded-lg font-semibold hover:bg-white hover:text-blue-600 transition">
Learn More
</button>
</div>
</div>
</div>
Pattern 3: Form with Validation States
<div class="max-w-md mx-auto bg-white p-8 rounded-lg shadow">
<h2 class="text-2xl font-bold mb-6">Sign In</h2>
<div class="mb-4">
<label class="block text-gray-700 text-sm font-bold mb-2" for="email">
Email
</label>
<input
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:border-blue-500 focus:ring-1 focus:ring-blue-500"
type="email"
id="email"
placeholder="you@example.com"
>
<p class="text-red-500 text-xs mt-1 hidden">Invalid email address</p>
</div>
<div class="mb-6">
<label class="block text-gray-700 text-sm font-bold mb-2" for="password">
Password
</label>
<input
class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:border-blue-500 focus:ring-1 focus:ring-blue-500"
type="password"
id="password"
placeholder="********"
>
</div>
<button class="w-full bg-blue-500 text-white font-bold py-3 px-4 rounded-lg hover:bg-blue-600 transition">
Sign In
</button>
</div>
Part 9: Tips and Tricks from Real Projects
Tip 1: Use @apply for Repeated Combinations
If you find yourself using the same classes repeatedly, create a custom class:
/* In your CSS file */
.btn-primary {
@apply bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded transition;
}
.card {
@apply bg-white rounded-lg shadow-md p-6;
}
Then use them:
<button class="btn-primary">Click me</button>
<div class="card">Content</div>
Tip 2: Use Arbitrary Values When Needed
Sometimes you need a specific value not in Tailwind's scale:
<!-- Use arbitrary values with square brackets -->
<div class="w-[317px]">
Exact width
</div>
<div class="bg-[#1da1f2]">
Twitter blue
</div>
<div class="top-[calc(100%-2rem)]">
Dynamic positioning
</div>
Tip 3: Order Your Classes Consistently
I organize classes in this order:
- Layout —
container,mx-auto,grid,flex - Spacing —
p-4,m-2,gap-4 - Sizing —
w-full,h-64,max-w-md - Typography —
text-lg,font-bold,text-center - Colors —
bg-white,text-gray-900 - Borders/Shadows —
rounded,border,shadow - Interactivity —
hover:,focus:,transition
<div class="
container mx-auto
p-6
max-w-4xl
text-lg font-bold text-center
bg-white
rounded-lg shadow
hover:shadow-lg transition
">
Content
</div>
Tip 4: Use VS Code Extensions
Install these for a better experience:
- Tailwind CSS IntelliSense — Autocomplete for classes
- Tailwind Fold — Collapse long class lists
- Headwind — Sort classes automatically
Part 10: Common Mistakes Beginners Make
Mistake 1: Not Using the Scale
<!-- ❌ Wrong -->
<div class="p-10 text-7xl">Too extreme</div>
<!-- ✅ Better -->
<div class="p-8 text-4xl">Still big but consistent</div>
Mistake 2: Forgetting Responsive Prefixes
<!-- ❌ Text too small on mobile -->
<h1 class="text-6xl">Heading</h1>
<!-- ✅ Scales down on mobile -->
<h1 class="text-3xl md:text-4xl lg:text-6xl">Heading</h1>
Mistake 3: Overusing Arbitrary Values
<!-- ❌ Losing consistency -->
<div class="w-[23.5rem] h-[187px] p-[1.2rem]">
<!-- ✅ Use Tailwind's scale -->
<div class="w-96 h-48 p-5">
Mistake 4: Not Using Container
<!-- ❌ Content stretches full width -->
<div class="px-4">
<div>Content</div>
</div>
<!-- ✅ Content stays centered with max-width -->
<div class="container mx-auto px-4">
<div>Content</div>
</div>
Mistake 5: Too Many Classes in One Element
<!-- ❌ Hard to read -->
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-lg shadow-md hover:shadow-lg transition duration-300 ease-in-out transform hover:-translate-y-1 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50 disabled:opacity-50 disabled:cursor-not-allowed">
Click me
</button>
<!-- ✅ Still many classes, but better organized -->
<button class="
bg-blue-500 hover:bg-blue-700
text-white font-bold
py-2 px-4
rounded-lg
shadow-md hover:shadow-lg
transition duration-300 ease-in-out
transform hover:-translate-y-1
focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50
disabled:opacity-50 disabled:cursor-not-allowed
">
Click me
</button>
Your Tailwind Beginner Checklist
Basic Classes
- Spacing —
p-4,m-2,space-y-4 - Layout —
flex,grid,container - Typography —
text-lg,font-bold,text-center - Colors —
bg-blue-500,text-gray-700 - Borders —
rounded,border,shadow
Responsive Design
- Mobile-first with
sm:,md:,lg: - Responsive grid with
grid-cols-1 md:grid-cols-2 - Responsive hiding with
hidden md:block
Interactivity
- Hover states —
hover:bg-blue-700 - Focus states —
focus:ring-2 - Transitions —
transition duration-300 - Group hover —
group-hover:scale-110
Project Setup
- CDN for quick testing
- npm build for real projects
- Custom config for branding
-
@applyfor repeated patterns
What's Next?
You've mastered the basics. Here's what to learn next:
- Tailwind UI — Pre-built component libraries
- Headless UI — Accessible components that work with Tailwind
- DaisyUI — Component library built on Tailwind
- Tailwind with React — Dynamic class generation
- Custom Plugins — Extend Tailwind's functionality
- PurgeCSS — Remove unused CSS (built into Tailwind)
Resources
- Tailwind Documentation — The official docs (they're excellent!)
- Tailwind Cheat Sheet — Quick reference
- Tailwind Play — Experiment in browser
- Tailwind UI — Professional components
- Tailwind Components — Community examples
Final Words of Encouragement
When I first saw Tailwind, I thought: "This looks messy. Why would I put all these classes in my HTML?"
Then I built one project with it. Then another. Now I can't go back.
Here's why:
I'm faster. I don't switch between files or invent class names. I just build.
I'm more consistent. The scale forces me to use consistent spacing and sizing.
I'm less afraid to change things. Nothing breaks unexpectedly. I can tweak any element without worrying about CSS side effects.
My CSS file doesn't grow. It stays tiny because I'm using utilities, not writing custom CSS.
Will you love Tailwind immediately? Maybe, maybe not. But give it one real project. Build something from scratch. Then decide.
I think you'll be surprised.
Enjoyed this tutorial? I write about CSS, Tailwind, and web development every week. Follow me on X @themarvelbiz. And if you build something cool with Tailwind, I'd love to see it!
