Loading...
Loading...
Use when working with Tailwind CSS utility classes for layout, spacing, typography, colors, and visual effects. Covers utility-first CSS patterns and class composition.
npx skill4agent add thebushidocollective/han tailwind-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>blockinline-blockflexgridhiddenstaticrelativeabsolutefixedstickyflex-rowflex-coljustify-centeritems-centergap-4grid-cols-3grid-rows-2col-span-2row-span-1p-4px-2py-6pt-8pr-3pb-2pl-1m-4mx-automy-6-mt-4space-x-4space-y-2font-sansfont-seriffont-monotext-xstext-smtext-basetext-lgtext-xltext-2xltext-3xlfont-thinfont-normalfont-mediumfont-semiboldfont-boldtext-gray-900text-blue-500text-red-600text-lefttext-centertext-righttext-justifyleading-noneleading-tightleading-normalleading-relaxedbg-whitebg-gray-100bg-blue-500bg-gradient-to-r from-blue-500 to-purple-600opacity-0opacity-50opacity-100borderborder-2border-tborder-gray-300roundedrounded-lgrounded-fullrounded-noneshadow-smshadowshadow-mdshadow-lgshadow-xlring-2ring-blue-500ring-offset-2transitiontransition-allduration-300ease-in-outscale-110rotate-45translate-x-4skew-y-3blur-smbrightness-50contrast-125grayscale<!-- 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>sm:md:lg:xl:2xl:<!-- 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>dark:<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><!-- 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"><!-- 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">