Use when working with Tailwind CSS utility classes for layout, spacing, typography, colors, and visual effects. Covers utility-first CSS patterns and class composition.
Limited to specific tools
Additional assets for this skill
This skill is limited to using the following tools:
name: tailwind-utility-classes description: Use when working with Tailwind CSS utility classes for layout, spacing, typography, colors, and visual effects. Covers utility-first CSS patterns and class composition. allowed-tools:
Tailwind CSS is a utility-first CSS framework that provides low-level utility classes to build custom designs without leaving your HTML.
Instead of writing custom CSS, compose designs using pre-built utility classes:
<!-- Traditional CSS -->
<style>
.btn {
background-color: #3b82f6;
color: white;
padding: 0.5rem 1rem;
border-radius: 0.25rem;
}
</style>
<button class="btn">Click me</button>
<!-- Tailwind utility-first -->
<button class="bg-blue-500 text-white px-4 py-2 rounded">
Click me
</button>
block, inline-block, flex, grid, hiddenstatic, relative, absolute, fixed, stickyflex-row, flex-col, justify-center, items-center, gap-4grid-cols-3, grid-rows-2, col-span-2, row-span-1p-4, px-2, py-6, pt-8, pr-3, pb-2, pl-1m-4, mx-auto, my-6, -mt-4 (negative margins)space-x-4, space-y-2font-sans, font-serif, font-monotext-xs, text-sm, text-base, text-lg, text-xl, text-2xl, text-3xlfont-thin, font-normal, font-medium, font-semibold, font-boldtext-gray-900, text-blue-500, text-red-600text-left, text-center, text-right, text-justifyleading-none, leading-tight, leading-normal, leading-relaxedbg-white, bg-gray-100, bg-blue-500bg-gradient-to-r from-blue-500 to-purple-600opacity-0, opacity-50, opacity-100border, border-2, border-t, border-gray-300rounded, rounded-lg, rounded-full, rounded-noneshadow-sm, shadow, shadow-md, shadow-lg, shadow-xlring-2, ring-blue-500, ring-offset-2transition, transition-all, duration-300, ease-in-outscale-110, rotate-45, translate-x-4, skew-y-3blur-sm, brightness-50, contrast-125, grayscaleUse responsive prefixes for different screen sizes:
<!-- Mobile-first: stack vertically on small screens, horizontal on medium+ -->
<div class="flex flex-col md:flex-row gap-4">
<div class="w-full md:w-1/2">Column 1</div>
<div class="w-full md:w-1/2">Column 2</div>
</div>
<!-- Responsive text sizes -->
<h1 class="text-2xl md:text-4xl lg:text-6xl">
Responsive Heading
</h1>
Breakpoints:
sm: - 640pxmd: - 768pxlg: - 1024pxxl: - 1280px2xl: - 1536pxApply utilities based on state:
<!-- Hover, focus, active states -->
<button class="
bg-blue-500 hover:bg-blue-700
text-white
px-4 py-2 rounded
transition
focus:ring-2 focus:ring-blue-300
active:scale-95
">
Interactive Button
</button>
<!-- Group hover -->
<div class="group">
<img class="group-hover:scale-110 transition" src="..." />
<p class="text-gray-600 group-hover:text-blue-500">
Hover the parent
</p>
</div>
Use dark: prefix for dark mode styles:
<div class="
bg-white dark:bg-gray-800
text-gray-900 dark:text-white
border border-gray-200 dark:border-gray-700
">
Dark mode compatible content
</div>
Use square brackets for one-off custom values:
<!-- Custom spacing -->
<div class="mt-[17px] p-[13px]">
<!-- Custom colors -->
<div class="bg-[#1da1f2] text-[rgb(255,100,50)]">
<!-- Custom breakpoints -->
<div class="min-[890px]:flex">
Order classes logically for readability:
<!-- Layout → Spacing → Typography → Colors → Effects -->
<div class="
flex items-center justify-between
px-6 py-4
text-lg font-semibold
bg-white text-gray-900
shadow-md rounded-lg
hover:shadow-xl transition
">
<div class="
max-w-sm mx-auto
bg-white rounded-lg shadow-md overflow-hidden
hover:shadow-xl transition-shadow duration-300
">
<img
class="w-full h-48 object-cover"
src="/image.jpg"
alt="Card image"
/>
<div class="p-6">
<h2 class="text-2xl font-bold text-gray-900 mb-2">
Card Title
</h2>
<p class="text-gray-600 leading-relaxed mb-4">
Card description goes here with some helpful information.
</p>
<button class="
w-full
bg-blue-500 hover:bg-blue-600
text-white font-semibold
py-2 px-4 rounded
transition-colors
">
Learn More
</button>
</div>
</div>
<nav class="
bg-white shadow-lg
border-b border-gray-200
">
<div class="
max-w-7xl mx-auto
px-4 sm:px-6 lg:px-8
">
<div class="flex justify-between items-center h-16">
<!-- Logo -->
<div class="flex-shrink-0">
<h1 class="text-2xl font-bold text-blue-600">Logo</h1>
</div>
<!-- Desktop Navigation -->
<div class="hidden md:flex space-x-8">
<a href="#" class="
text-gray-700 hover:text-blue-600
px-3 py-2 rounded-md text-sm font-medium
transition-colors
">
Home
</a>
<a href="#" class="
text-gray-700 hover:text-blue-600
px-3 py-2 rounded-md text-sm font-medium
transition-colors
">
About
</a>
<a href="#" class="
text-gray-700 hover:text-blue-600
px-3 py-2 rounded-md text-sm font-medium
transition-colors
">
Contact
</a>
</div>
<!-- Mobile menu button -->
<div class="md:hidden">
<button class="
text-gray-700 hover:text-blue-600
p-2
">
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
</div>
</div>
</div>
</nav>
<div class="
grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3
gap-6
p-6
">
<div class="bg-white p-6 rounded-lg shadow">Item 1</div>
<div class="bg-white p-6 rounded-lg shadow">Item 2</div>
<div class="bg-white p-6 rounded-lg shadow">Item 3</div>
<div class="bg-white p-6 rounded-lg shadow col-span-1 md:col-span-2">
Wide Item
</div>
<div class="bg-white p-6 rounded-lg shadow">Item 5</div>
</div>
<!-- Flexbox centering -->
<div class="flex items-center justify-center min-h-screen">
<div>Centered content</div>
</div>
<!-- Grid centering -->
<div class="grid place-items-center min-h-screen">
<div>Centered content</div>
</div>
<!-- Absolute centering -->
<div class="relative h-screen">
<div class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
Centered content
</div>
</div>
<!-- Single line truncate -->
<p class="truncate">
This text will be truncated with an ellipsis if it's too long
</p>
<!-- Multi-line truncate -->
<p class="line-clamp-3">
This text will be truncated after 3 lines with an ellipsis
</p>
<!-- 16:9 aspect ratio -->
<div class="aspect-video bg-gray-200">
<iframe src="..." class="w-full h-full"></iframe>
</div>
<!-- Square aspect ratio -->
<div class="aspect-square bg-gray-200">
<img src="..." class="w-full h-full object-cover" />
</div>
<!-- Bad: Mixing inline styles with Tailwind -->
<div class="p-4" style="margin-top: 20px;">
Content
</div>
<!-- Good: Use Tailwind utilities -->
<div class="p-4 mt-5">
Content
</div>
<!-- Bad: Extra wrapper for centering -->
<div class="flex justify-center">
<div class="text-center">
<h1>Title</h1>
</div>
</div>
<!-- Good: Direct styling -->
<h1 class="text-center">Title</h1>
<!-- Bad: Too many custom values -->
<div class="mt-[17px] mb-[23px] pt-[11px] pb-[19px]">
<!-- Good: Use standard spacing scale -->
<div class="my-6 py-3">
<!-- Bad: Desktop-first approach -->
<div class="w-1/2 sm:w-full">
<!-- Good: Mobile-first approach -->
<div class="w-full sm:w-1/2">