Tailwind CSS Utility Classes
This guide covers the comprehensive utility class system in Tailwind CSS, including layout, spacing, typography, colors, and responsive design utilities.
Table of Contents
Layout Utilities
Display
<!-- Display types -->
<div class="block">Block element</div>
<div class="inline">Inline element</div>
<div class="inline-block">Inline-block element</div>
<div class="flex">Flexbox container</div>
<div class="inline-flex">Inline flexbox container</div>
<div class="grid">CSS Grid container</div>
<div class="inline-grid">Inline grid container</div>
<div class="hidden">Hidden element</div>
Positioning
<!-- Position -->
<div class="static">Static positioning</div>
<div class="relative">Relative positioning</div>
<div class="absolute">Absolute positioning</div>
<div class="fixed">Fixed positioning</div>
<div class="sticky">Sticky positioning</div>
<!-- Top, Right, Bottom, Left -->
<div class="top-0">Top: 0</div>
<div class="right-0">Right: 0</div>
<div class="bottom-0">Bottom: 0</div>
<div class="left-0">Left: 0</div>
<!-- Z-index -->
<div class="z-0">Z-index: 0</div>
<div class="z-10">Z-index: 10</div>
<div class="z-20">Z-index: 20</div>
<div class="z-30">Z-index: 30</div>
<div class="z-40">Z-index: 40</div>
<div class="z-50">Z-index: 50</div>
<div class="z-auto">Z-index: auto</div>
Flexbox
<!-- Flex direction -->
<div class="flex flex-row">Horizontal flex</div>
<div class="flex flex-row-reverse">Reverse horizontal flex</div>
<div class="flex flex-col">Vertical flex</div>
<div class="flex flex-col-reverse">Reverse vertical flex</div>
<!-- Flex wrap -->
<div class="flex flex-wrap">Wrap flex items</div>
<div class="flex flex-wrap-reverse">Reverse wrap flex items</div>
<div class="flex flex-nowrap">No wrap flex items</div>
<!-- Flex grow/shrink -->
<div class="flex-1">Flex: 1 1 0%</div>
<div class="flex-auto">Flex: 1 1 auto</div>
<div class="flex-initial">Flex: 0 1 auto</div>
<div class="flex-none">Flex: none</div>
<!-- Justify content -->
<div class="flex justify-start">Justify start</div>
<div class="flex justify-end">Justify end</div>
<div class="flex justify-center">Justify center</div>
<div class="flex justify-between">Justify between</div>
<div class="flex justify-around">Justify around</div>
<div class="flex justify-evenly">Justify evenly</div>
<!-- Align items -->
<div class="flex items-start">Align items start</div>
<div class="flex items-end">Align items end</div>
<div class="flex items-center">Align items center</div>
<div class="flex items-baseline">Align items baseline</div>
<div class="flex items-stretch">Align items stretch</div>
<!-- Align self -->
<div class="self-auto">Align self auto</div>
<div class="self-start">Align self start</div>
<div class="self-end">Align self end</div>
<div class="self-center">Align self center</div>
<div class="self-stretch">Align self stretch</div>
Grid
<!-- Grid template columns -->
<div class="grid grid-cols-1">1 column</div>
<div class="grid grid-cols-2">2 columns</div>
<div class="grid grid-cols-3">3 columns</div>
<div class="grid grid-cols-4">4 columns</div>
<div class="grid grid-cols-5">5 columns</div>
<div class="grid grid-cols-6">6 columns</div>
<div class="grid grid-cols-12">12 columns</div>
<div class="grid grid-cols-none">No columns</div>
<!-- Grid template rows -->
<div class="grid grid-rows-1">1 row</div>
<div class="grid grid-rows-2">2 rows</div>
<div class="grid grid-rows-3">3 rows</div>
<div class="grid grid-rows-4">4 rows</div>
<div class="grid grid-rows-5">5 rows</div>
<div class="grid grid-rows-6">6 rows</div>
<div class="grid grid-rows-none">No rows</div>
<!-- Gap -->
<div class="grid gap-1">Gap 1</div>
<div class="grid gap-2">Gap 2</div>
<div class="grid gap-4">Gap 4</div>
<div class="grid gap-8">Gap 8</div>
<div class="grid gap-x-4">Horizontal gap 4</div>
<div class="grid gap-y-4">Vertical gap 4</div>
Sizing
<!-- Width -->
<div class="w-0">Width: 0</div>
<div class="w-px">Width: 1px</div>
<div class="w-0.5">Width: 0.125rem</div>
<div class="w-1">Width: 0.25rem</div>
<div class="w-2">Width: 0.5rem</div>
<div class="w-4">Width: 1rem</div>
<div class="w-8">Width: 2rem</div>
<div class="w-16">Width: 4rem</div>
<div class="w-32">Width: 8rem</div>
<div class="w-64">Width: 16rem</div>
<div class="w-auto">Width: auto</div>
<div class="w-full">Width: 100%</div>
<div class="w-screen">Width: 100vw</div>
<div class="w-min">Width: min-content</div>
<div class="w-max">Width: max-content</div>
<div class="w-fit">Width: fit-content</div>
<!-- Height -->
<div class="h-0">Height: 0</div>
<div class="h-px">Height: 1px</div>
<div class="h-0.5">Height: 0.125rem</div>
<div class="h-1">Height: 0.25rem</div>
<div class="h-2">Height: 0.5rem</div>
<div class="h-4">Height: 1rem</div>
<div class="h-8">Height: 2rem</div>
<div class="h-16">Height: 4rem</div>
<div class="h-32">Height: 8rem</div>
<div class="h-64">Height: 16rem</div>
<div class="h-auto">Height: auto</div>
<div class="h-full">Height: 100%</div>
<div class="h-screen">Height: 100vh</div>
<div class="h-min">Height: min-content</div>
<div class="h-max">Height: max-content</div>
<div class="h-fit">Height: fit-content</div>
Spacing Utilities
Margin
<!-- All sides -->
<div class="m-0">Margin: 0</div>
<div class="m-px">Margin: 1px</div>
<div class="m-0.5">Margin: 0.125rem</div>
<div class="m-1">Margin: 0.25rem</div>
<div class="m-2">Margin: 0.5rem</div>
<div class="m-4">Margin: 1rem</div>
<div class="m-8">Margin: 2rem</div>
<div class="m-16">Margin: 4rem</div>
<div class="m-auto">Margin: auto</div>
<!-- Horizontal and vertical -->
<div class="mx-4">Horizontal margin: 1rem</div>
<div class="my-4">Vertical margin: 1rem</div>
<!-- Individual sides -->
<div class="mt-4">Top margin: 1rem</div>
<div class="mr-4">Right margin: 1rem</div>
<div class="mb-4">Bottom margin: 1rem</div>
<div class="ml-4">Left margin: 1rem</div>
Padding
<!-- All sides -->
<div class="p-0">Padding: 0</div>
<div class="p-px">Padding: 1px</div>
<div class="p-0.5">Padding: 0.125rem</div>
<div class="p-1">Padding: 0.25rem</div>
<div class="p-2">Padding: 0.5rem</div>
<div class="p-4">Padding: 1rem</div>
<div class="p-8">Padding: 2rem</div>
<div class="p-16">Padding: 4rem</div>
<!-- Horizontal and vertical -->
<div class="px-4">Horizontal padding: 1rem</div>
<div class="py-4">Vertical padding: 1rem</div>
<!-- Individual sides -->
<div class="pt-4">Top padding: 1rem</div>
<div class="pr-4">Right padding: 1rem</div>
<div class="pb-4">Bottom padding: 1rem</div>
<div class="pl-4">Left padding: 1rem</div>
Typography Utilities
Font Family
<p class="font-sans">Sans-serif font</p>
<p class="font-serif">Serif font</p>
<p class="font-mono">Monospace font</p>
Font Size
<p class="text-xs">Extra small text (0.75rem)</p>
<p class="text-sm">Small text (0.875rem)</p>
<p class="text-base">Base text (1rem)</p>
<p class="text-lg">Large text (1.125rem)</p>
<p class="text-xl">Extra large text (1.25rem)</p>
<p class="text-2xl">2XL text (1.5rem)</p>
<p class="text-3xl">3XL text (1.875rem)</p>
<p class="text-4xl">4XL text (2.25rem)</p>
<p class="text-5xl">5XL text (3rem)</p>
<p class="text-6xl">6XL text (3.75rem)</p>
<p class="text-7xl">7XL text (4.5rem)</p>
<p class="text-8xl">8XL text (6rem)</p>
<p class="text-9xl">9XL text (8rem)</p>
Font Weight
<p class="font-thin">Thin font weight (100)</p>
<p class="font-extralight">Extra light font weight (200)</p>
<p class="font-light">Light font weight (300)</p>
<p class="font-normal">Normal font weight (400)</p>
<p class="font-medium">Medium font weight (500)</p>
<p class="font-semibold">Semi-bold font weight (600)</p>
<p class="font-bold">Bold font weight (700)</p>
<p class="font-extrabold">Extra bold font weight (800)</p>
<p class="font-black">Black font weight (900)</p>
Text Alignment
<p class="text-left">Left aligned text</p>
<p class="text-center">Center aligned text</p>
<p class="text-right">Right aligned text</p>
<p class="text-justify">Justified text</p>
Text Decoration
<p class="underline">Underlined text</p>
<p class="line-through">Strikethrough text</p>
<p class="no-underline">No underline</p>
Text Transform
<p class="uppercase">Uppercase text</p>
<p class="lowercase">Lowercase text</p>
<p class="capitalize">Capitalized text</p>
<p class="normal-case">Normal case text</p>
Line Height
<p class="leading-none">Line height: 1</p>
<p class="leading-tight">Line height: 1.25</p>
<p class="leading-snug">Line height: 1.375</p>
<p class="leading-normal">Line height: 1.5</p>
<p class="leading-relaxed">Line height: 1.625</p>
<p class="leading-loose">Line height: 2</p>
Color Utilities
Background Colors
<!-- Gray scale -->
<div class="bg-gray-50">Light gray background</div>
<div class="bg-gray-100">Gray 100 background</div>
<div class="bg-gray-200">Gray 200 background</div>
<div class="bg-gray-300">Gray 300 background</div>
<div class="bg-gray-400">Gray 400 background</div>
<div class="bg-gray-500">Gray 500 background</div>
<div class="bg-gray-600">Gray 600 background</div>
<div class="bg-gray-700">Gray 700 background</div>
<div class="bg-gray-800">Gray 800 background</div>
<div class="bg-gray-900">Dark gray background</div>
<!-- Primary colors -->
<div class="bg-red-500">Red background</div>
<div class="bg-blue-500">Blue background</div>
<div class="bg-green-500">Green background</div>
<div class="bg-yellow-500">Yellow background</div>
<div class="bg-purple-500">Purple background</div>
<div class="bg-pink-500">Pink background</div>
<div class="bg-indigo-500">Indigo background</div>
<div class="bg-teal-500">Teal background</div>
<!-- Special colors -->
<div class="bg-transparent">Transparent background</div>
<div class="bg-current">Current color background</div>
<div class="bg-black">Black background</div>
<div class="bg-white">White background</div>
Text Colors
<!-- Gray scale -->
<p class="text-gray-50">Light gray text</p>
<p class="text-gray-100">Gray 100 text</p>
<p class="text-gray-200">Gray 200 text</p>
<p class="text-gray-300">Gray 300 text</p>
<p class="text-gray-400">Gray 400 text</p>
<p class="text-gray-500">Gray 500 text</p>
<p class="text-gray-600">Gray 600 text</p>
<p class="text-gray-700">Gray 700 text</p>
<p class="text-gray-800">Gray 800 text</p>
<p class="text-gray-900">Dark gray text</p>
<!-- Primary colors -->
<p class="text-red-500">Red text</p>
<p class="text-blue-500">Blue text</p>
<p class="text-green-500">Green text</p>
<p class="text-yellow-500">Yellow text</p>
<p class="text-purple-500">Purple text</p>
<p class="text-pink-500">Pink text</p>
<p class="text-indigo-500">Indigo text</p>
<p class="text-teal-500">Teal text</p>
<!-- Special colors -->
<p class="text-transparent">Transparent text</p>
<p class="text-current">Current color text</p>
<p class="text-black">Black text</p>
<p class="text-white">White text</p>
Border Colors
<div class="border border-gray-200">Gray border</div>
<div class="border border-red-500">Red border</div>
<div class="border border-blue-500">Blue border</div>
<div class="border border-green-500">Green border</div>
<div class="border border-yellow-500">Yellow border</div>
<div class="border border-purple-500">Purple border</div>
<div class="border border-pink-500">Pink border</div>
<div class="border border-indigo-500">Indigo border</div>
<div class="border border-teal-500">Teal border</div>
Responsive Utilities
Responsive Prefixes
<!-- Responsive breakpoints -->
<div class="w-full md:w-1/2 lg:w-1/3">
Responsive width
</div>
<div class="text-sm md:text-base lg:text-lg">
Responsive text size
</div>
<div class="p-4 md:p-8 lg:p-12">
Responsive padding
</div>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3">
Responsive grid
</div>
<div class="flex flex-col md:flex-row">
Responsive flex direction
</div>
Breakpoint Examples
<!-- Mobile first approach -->
<div class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 xl:w-1/6">
<!-- xs: full width -->
<!-- sm: half width -->
<!-- md: one-third width -->
<!-- lg: one-quarter width -->
<!-- xl: one-sixth width -->
</div>
<!-- Responsive typography -->
<h1 class="text-2xl sm:text-3xl md:text-4xl lg:text-5xl xl:text-6xl">
Responsive heading
</h1>
<!-- Responsive spacing -->
<div class="p-4 sm:p-6 md:p-8 lg:p-10 xl:p-12">
Responsive padding
</div>
State Utilities
Hover States
<button class="bg-blue-500 hover:bg-blue-700">
Hover button
</button>
<div class="bg-gray-100 hover:bg-gray-200">
Hover div
</div>
<a class="text-blue-500 hover:text-blue-700 hover:underline">
Hover link
</a>
Focus States
<input class="border border-gray-300 focus:border-blue-500 focus:ring-2 focus:ring-blue-200">
Focus input
</input>
<button class="bg-blue-500 focus:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-300">
Focus button
</button>
Active States
<button class="bg-blue-500 active:bg-blue-800">
Active button
</button>
Disabled States
<button class="bg-gray-300 text-gray-500 cursor-not-allowed" disabled>
Disabled button
</button>
Custom Utilities
Arbitrary Values
<!-- Custom dimensions -->
<div class="w-[200px] h-[300px]">
Custom width and height
</div>
<!-- Custom colors -->
<div class="bg-[#ff6b6b] text-[#ffffff]">
Custom colors
</div>
<!-- Custom spacing -->
<div class="p-[1.5rem] m-[2rem]">
Custom padding and margin
</div>
<!-- Custom font size -->
<p class="text-[18px] leading-[1.8]">
Custom font size and line height
</p>
@apply Directive
/* Custom component classes */
.btn-primary {
@apply bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded;
}
.card {
@apply bg-white rounded-lg shadow-md p-6;
}
.input-field {
@apply border border-gray-300 rounded px-3 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent;
}
Best Practices
1. Use Semantic Class Names
<!-- Good: Group related utilities -->
<div class="flex items-center justify-between p-4 bg-white rounded-lg shadow-md">
<h2 class="text-xl font-semibold text-gray-900">Title</h2>
<button class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">
Action
</button>
</div>
<!-- Better: Extract to component classes -->
<style>
.card-header {
@apply flex items-center justify-between p-4 bg-white rounded-lg shadow-md;
}
.card-title {
@apply text-xl font-semibold text-gray-900;
}
.btn-primary {
@apply px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600;
}
</style>
2. Responsive Design Patterns
<!-- Mobile-first responsive design -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4">
<!-- Grid items -->
</div>
<!-- Responsive typography -->
<h1 class="text-2xl sm:text-3xl md:text-4xl lg:text-5xl">
Responsive heading
</h1>
3. Consistent Spacing
<!-- Use consistent spacing scale -->
<div class="space-y-4">
<div class="p-4">Item 1</div>
<div class="p-4">Item 2</div>
<div class="p-4">Item 3</div>
</div>
<!-- Use gap for flexbox/grid -->
<div class="flex gap-4">
<div>Item 1</div>
<div>Item 2</div>
</div>
4. Dark Mode Support
<!-- Dark mode classes -->
<div class="bg-white dark:bg-gray-900 text-gray-900 dark:text-white">
Dark mode content
</div>
<!-- Enable dark mode in config -->
<div class="dark">
<div class="bg-white dark:bg-gray-900">
Dark mode enabled
</div>
</div>
Common Interview Questions
Q: What is the utility-first approach in Tailwind CSS?
- Using small, single-purpose utility classes instead of writing custom CSS
Q: How does Tailwind handle responsive design?
- Mobile-first approach with responsive prefixes (sm:, md:, lg:, xl:, 2xl:)
Q: How do you customize Tailwind CSS?
- Through the tailwind.config.js file, extending theme values, and using @apply directive
Q: What are the performance benefits of Tailwind?
- PurgeCSS removes unused CSS, resulting in smaller bundle sizes in production
Q: How do you handle component reusability in Tailwind?
- Using @apply directive to create component classes or extracting common patterns
Q: What’s the difference between Tailwind and traditional CSS frameworks?
- Tailwind provides utility classes instead of pre-built components, offering more flexibility
Summary
- Tailwind CSS provides a comprehensive utility class system
- Layout utilities include display, positioning, flexbox, and grid
- Spacing utilities use a consistent scale (0.25rem increments)
- Typography utilities cover font family, size, weight, and alignment
- Color utilities include grayscale and primary color palettes
- Responsive utilities use mobile-first breakpoints
- State utilities handle hover, focus, active, and disabled states
- Custom utilities allow for arbitrary values and component extraction
- Best practices ensure maintainable and consistent code
Interview angle
- “How do you handle responsive and state variants?” - prefixes composed onto the utility:
md:flex,hover:bg-blue-600,dark:text-white, andgroup-hover:/peer-checked:for parent- and sibling-driven state. Breakpoints are mobile-first, so an unprefixed utility applies at every size. - “How do you apply a value the scale does not have?” - arbitrary values in square brackets,
w-[137px]. Useful as an escape hatch; frequent use means the design tokens and the design are out of sync. - “How do you merge conditional classes safely?” -
clsxfor conditionals plustailwind-mergeto resolve conflicts, since two competing utilities are decided by stylesheet order rather than by which one you passed last. This pairing is whatcn()helpers wrap. - “How do you keep long class lists readable?” - the Prettier plugin to sort them deterministically, and component extraction for anything repeated. Sorted classes also make diffs meaningful.