Tailwind CSS Best Practices
Learn how to write clean, maintainable CSS with Tailwind and avoid common pitfalls.
Introduction to Tailwind CSS
Tailwind CSS is a utility-first CSS framework that has gained immense popularity due to its approach to styling. Instead of predefined components, it provides low-level utility classes that let you build completely custom designs without ever leaving your HTML.
Key Best Practices
1. Organize Your HTML Structure
When using Tailwind, your HTML can quickly become cluttered with utility classes. Keep your code clean by:
- Using consistent ordering of utility classes (layout, spacing, typography, etc.)
- Breaking components into smaller, reusable parts
- Using meaningful class names for your components
2. Leverage Tailwind’s Configuration
Tailwind’s configuration file (tailwind.config.js
) is powerful and should be utilized to:
- Define your brand colors, spacing scales, and font families
- Extend the default theme rather than overriding it
- Set up shortcuts for commonly used utility combinations
// tailwind.config.js
module.exports = {
theme: {
extend: {
colors: {
'brand-blue': '#1992d4',
'brand-red': '#e53e3e',
},
spacing: {
'72': '18rem',
'84': '21rem',
}
}
}
}
3. Use @apply for Repeating Patterns
For frequently used utility combinations, use the @apply
directive in your CSS:
/* Input.css */
.btn-primary {
@apply py-2 px-4 bg-blue-500 text-white font-semibold rounded-lg shadow-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75;
}
4. Responsive Design Approach
Tailwind’s responsive design system is based on a mobile-first approach:
- Start with mobile styles and add complexity for larger screens
- Use Tailwind’s responsive prefixes consistently (
sm:
,md:
,lg:
,xl:
) - Group responsive variants for the same property together
<div class="text-sm sm:text-base md:text-lg lg:text-xl">
Responsive text
</div>
5. Optimize for Production
Make sure to optimize your production builds:
- Use PurgeCSS (built into Tailwind) to remove unused styles
- Consider using JIT (Just-In-Time) mode for faster development
- Split your CSS into critical and non-critical paths when needed
Real-World Example
Here’s a practical example of a card component using Tailwind best practices:
<div class="max-w-md mx-auto bg-white rounded-xl shadow-md overflow-hidden md:max-w-2xl">
<div class="md:flex">
<div class="md:shrink-0">
<img class="h-48 w-full object-cover md:h-full md:w-48" src="image.jpg" alt="Modern building architecture">
</div>
<div class="p-8">
<div class="uppercase tracking-wide text-sm text-indigo-500 font-semibold">Company retreats</div>
<a href="#" class="block mt-1 text-lg leading-tight font-medium text-black hover:underline">Incredible accommodation for your team</a>
<p class="mt-2 text-slate-500">Looking to take your team away on a retreat to enjoy awesome food and take in some sunshine?</p>
</div>
</div>
</div>