Toolmingo
Guides10 min read

Tailwind CSS Cheat Sheet: Complete Class Reference

The definitive Tailwind CSS cheat sheet — every utility class category explained with examples, responsive breakpoints, dark mode, custom values, and the most common patterns.

Tailwind CSS is a utility-first framework: instead of writing custom CSS, you compose small, single-purpose classes directly in HTML. This cheat sheet covers every major utility category, responsive variants, dark mode, and the patterns you'll use every day.


Quick reference

Category Example classes
Layout flex grid block hidden
Sizing w-full h-screen w-64 max-w-lg
Spacing p-4 px-6 py-2 m-auto gap-4
Typography text-xl font-bold text-gray-700
Colors bg-blue-500 text-white border-gray-200
Flexbox flex items-center justify-between flex-col
Grid grid grid-cols-3 col-span-2 gap-6
Borders border border-2 rounded-lg rounded-full
Effects shadow-md opacity-75 blur-sm
Responsive md:flex lg:grid-cols-4
Dark mode dark:bg-gray-900 dark:text-white
State hover:bg-blue-600 focus:ring-2 active:scale-95

Installation

# Tailwind CSS v4 (recommended)
npm install tailwindcss @tailwindcss/vite
# or with PostCSS
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init
/* main CSS file */
@import "tailwindcss";

Responsive breakpoints

Tailwind is mobile-first — unprefixed classes apply to all screen sizes; prefixed classes apply from that breakpoint up.

Prefix Min-width Device
(none) 0px Mobile (default)
sm: 640px Small tablet
md: 768px Tablet
lg: 1024px Laptop
xl: 1280px Desktop
2xl: 1536px Large desktop
<!-- Hidden on mobile, flex on tablet+ -->
<div class="hidden md:flex">...</div>

<!-- 1 col on mobile, 3 cols on desktop -->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">...</div>

Layout

<!-- Display -->
<div class="block">Block</div>
<div class="inline-block">Inline block</div>
<div class="flex">Flex</div>
<div class="inline-flex">Inline flex</div>
<div class="grid">Grid</div>
<div class="hidden">Hidden (display:none)</div>

<!-- Position -->
<div class="static">Static</div>
<div class="relative">Relative</div>
<div class="absolute top-0 right-0">Absolute</div>
<div class="fixed bottom-4 right-4">Fixed</div>
<div class="sticky top-0">Sticky</div>

<!-- Overflow -->
<div class="overflow-hidden">No scroll</div>
<div class="overflow-auto">Scroll if needed</div>
<div class="overflow-x-auto overflow-y-hidden">Horizontal scroll</div>

<!-- Z-index -->
<div class="z-0">z-index: 0</div>
<div class="z-10">z-index: 10</div>
<div class="z-50">z-index: 50</div>

Sizing

Width

<!-- Fixed widths (4px scale: w-1 = 4px) -->
<div class="w-4">16px</div>
<div class="w-8">32px</div>
<div class="w-16">64px</div>
<div class="w-32">128px</div>
<div class="w-64">256px</div>

<!-- Percentage widths -->
<div class="w-1/2">50%</div>
<div class="w-1/3">33.33%</div>
<div class="w-2/3">66.66%</div>
<div class="w-full">100%</div>

<!-- Viewport and special widths -->
<div class="w-screen">100vw</div>
<div class="w-min">min-content</div>
<div class="w-max">max-content</div>
<div class="w-fit">fit-content</div>

<!-- Constraints -->
<div class="max-w-sm">max-width: 384px</div>
<div class="max-w-md">max-width: 448px</div>
<div class="max-w-lg">max-width: 512px</div>
<div class="max-w-xl">max-width: 576px</div>
<div class="max-w-2xl">max-width: 672px</div>
<div class="max-w-4xl">max-width: 896px</div>
<div class="max-w-screen-lg">max-width: 1024px</div>

Height

<div class="h-16">64px</div>
<div class="h-full">100%</div>
<div class="h-screen">100vh</div>
<div class="h-dvh">100dvh (dynamic viewport)</div>
<div class="min-h-screen">min-height: 100vh</div>

Spacing

Tailwind uses a 4px scalep-1 = 4px, p-4 = 16px, p-8 = 32px.

Padding

<div class="p-4">All sides: 16px</div>
<div class="px-6">Horizontal: 24px</div>
<div class="py-2">Vertical: 8px</div>
<div class="pt-4 pb-8">Top: 16px, Bottom: 32px</div>
<div class="pl-4 pr-6">Left: 16px, Right: 24px</div>

Margin

<div class="m-4">All sides: 16px</div>
<div class="mx-auto">Horizontal center (auto)</div>
<div class="my-8">Vertical: 32px</div>
<div class="mt-4 mb-6">Top: 16px, Bottom: 24px</div>
<div class="-mt-2">Negative margin: -8px</div>

Gap (for flex/grid)

<div class="flex gap-4">Flex with 16px gap</div>
<div class="grid gap-6">Grid with 24px gap</div>
<div class="grid gap-x-4 gap-y-8">Column/row gaps separate</div>

Space between (flex children)

<div class="flex space-x-4">4 horizontal gap between children</div>
<div class="flex flex-col space-y-2">2 vertical gap between children</div>

Typography

Font size

Class Size Line height
text-xs 12px 16px
text-sm 14px 20px
text-base 16px 24px
text-lg 18px 28px
text-xl 20px 28px
text-2xl 24px 32px
text-3xl 30px 36px
text-4xl 36px 40px
text-5xl 48px 1
text-6xl 60px 1

Font weight

<span class="font-thin">font-weight: 100</span>
<span class="font-light">font-weight: 300</span>
<span class="font-normal">font-weight: 400</span>
<span class="font-medium">font-weight: 500</span>
<span class="font-semibold">font-weight: 600</span>
<span class="font-bold">font-weight: 700</span>
<span class="font-extrabold">font-weight: 800</span>
<span class="font-black">font-weight: 900</span>

Text alignment and decoration

<p class="text-left">Left aligned</p>
<p class="text-center">Centered</p>
<p class="text-right">Right aligned</p>
<p class="text-justify">Justified</p>

<span class="underline">Underline</span>
<span class="line-through">Strikethrough</span>
<span class="no-underline">No underline</span>

<span class="italic">Italic</span>
<span class="not-italic">Not italic</span>

<span class="uppercase">ALL CAPS</span>
<span class="lowercase">all lower</span>
<span class="capitalize">First Letter</span>

<span class="tracking-tight">Tight letter-spacing</span>
<span class="tracking-wide">Wide letter-spacing</span>

<span class="leading-tight">Tight line-height</span>
<span class="leading-relaxed">Relaxed line-height</span>

Text overflow

<p class="truncate">Single line, truncated with ellipsis...</p>
<p class="overflow-hidden line-clamp-3">Clamp to 3 lines max...</p>
<p class="whitespace-nowrap">No line wrapping</p>
<p class="break-words">Break long words</p>

Colors

Tailwind has a built-in palette with shades from 50 (lightest) to 950 (darkest).

Color names: slate, gray, zinc, neutral, stone, red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, fuchsia, pink, rose

<!-- Background -->
<div class="bg-blue-500">Blue background</div>
<div class="bg-gray-100">Light gray</div>
<div class="bg-transparent">Transparent</div>
<div class="bg-white">White</div>
<div class="bg-black">Black</div>

<!-- Text -->
<p class="text-blue-600">Blue text</p>
<p class="text-gray-700">Dark gray text</p>
<p class="text-white">White text</p>

<!-- Border -->
<div class="border border-gray-300">Gray border</div>
<div class="border-2 border-blue-500">Blue 2px border</div>

<!-- Opacity -->
<div class="bg-blue-500/50">50% opacity background</div>
<div class="text-black/70">70% opacity text</div>

Flexbox

<!-- Enable flex -->
<div class="flex">Flex row (default)</div>
<div class="flex flex-col">Flex column</div>
<div class="inline-flex">Inline flex</div>

<!-- Direction -->
<div class="flex flex-row">→ Left to right</div>
<div class="flex flex-row-reverse">← Right to left</div>
<div class="flex flex-col">↓ Top to bottom</div>
<div class="flex flex-col-reverse">↑ Bottom to top</div>

<!-- Justify content (main axis) -->
<div class="flex justify-start">|items   |</div>
<div class="flex justify-center">|  items  |</div>
<div class="flex justify-end">|   items|</div>
<div class="flex justify-between">|item item|</div>
<div class="flex justify-around">| item item |</div>
<div class="flex justify-evenly">|item  item|</div>

<!-- Align items (cross axis) -->
<div class="flex items-start">Top aligned</div>
<div class="flex items-center">Vertically centered</div>
<div class="flex items-end">Bottom aligned</div>
<div class="flex items-stretch">Stretch to fill (default)</div>
<div class="flex items-baseline">Text baseline aligned</div>

<!-- Wrap -->
<div class="flex flex-wrap">Wraps to next line</div>
<div class="flex flex-nowrap">No wrapping (default)</div>

<!-- Flex item growth -->
<div class="flex">
  <div class="flex-1">Grows equally</div>
  <div class="flex-none w-32">Fixed width</div>
  <div class="flex-auto">Auto sizing</div>
</div>

<!-- Align self (individual item) -->
<div class="self-start">Top</div>
<div class="self-center">Middle</div>
<div class="self-end">Bottom</div>

Grid

<!-- Define columns -->
<div class="grid grid-cols-1">1 column</div>
<div class="grid grid-cols-2">2 equal columns</div>
<div class="grid grid-cols-3">3 equal columns</div>
<div class="grid grid-cols-12">12 column grid</div>

<!-- Column spanning -->
<div class="grid grid-cols-12">
  <div class="col-span-8">Main content (8/12)</div>
  <div class="col-span-4">Sidebar (4/12)</div>
</div>

<!-- Start/end positions -->
<div class="col-start-2 col-end-5">Columns 2–4</div>
<div class="col-start-1 col-span-2">Start at 1, span 2</div>

<!-- Row spanning -->
<div class="row-span-2">Spans 2 rows</div>

<!-- Auto columns -->
<div class="grid grid-cols-[repeat(auto-fill,minmax(200px,1fr))]">
  Responsive auto-fill grid
</div>

<!-- Gap -->
<div class="grid grid-cols-3 gap-4">Uniform gap</div>
<div class="grid grid-cols-3 gap-x-6 gap-y-4">Separate gaps</div>

<!-- Align items in grid -->
<div class="grid items-center justify-items-center">
  Centered in both axes
</div>
<div class="grid place-items-center">Shorthand for above</div>

Borders

<!-- Border width -->
<div class="border">1px border</div>
<div class="border-2">2px border</div>
<div class="border-4">4px border</div>
<div class="border-0">No border</div>
<div class="border-t-2">Top only</div>
<div class="border-b border-l">Bottom + Left</div>

<!-- Border color -->
<div class="border border-gray-300">Gray border</div>
<div class="border border-blue-500">Blue border</div>
<div class="border border-transparent">Transparent</div>

<!-- Border style -->
<div class="border border-solid">Solid</div>
<div class="border border-dashed">Dashed</div>
<div class="border border-dotted">Dotted</div>

<!-- Border radius -->
<div class="rounded-none">No radius (0px)</div>
<div class="rounded-sm">2px</div>
<div class="rounded">4px</div>
<div class="rounded-md">6px</div>
<div class="rounded-lg">8px</div>
<div class="rounded-xl">12px</div>
<div class="rounded-2xl">16px</div>
<div class="rounded-3xl">24px</div>
<div class="rounded-full">9999px (pill/circle)</div>
<div class="rounded-t-lg">Top corners only</div>
<div class="rounded-tl-xl">Top-left corner only</div>

Shadows and effects

<!-- Box shadow -->
<div class="shadow-none">No shadow</div>
<div class="shadow-sm">Small shadow</div>
<div class="shadow">Default shadow</div>
<div class="shadow-md">Medium shadow</div>
<div class="shadow-lg">Large shadow</div>
<div class="shadow-xl">Extra large shadow</div>
<div class="shadow-2xl">Massive shadow</div>
<div class="shadow-inner">Inner shadow</div>

<!-- Opacity -->
<div class="opacity-0">Invisible</div>
<div class="opacity-25">25%</div>
<div class="opacity-50">50%</div>
<div class="opacity-75">75%</div>
<div class="opacity-100">Fully visible</div>

<!-- Blur -->
<div class="blur-none">No blur</div>
<div class="blur-sm">4px blur</div>
<div class="blur">8px blur</div>
<div class="blur-lg">16px blur</div>
<div class="blur-xl">24px blur</div>

<!-- Background blur -->
<div class="backdrop-blur-sm">Background blur (glass effect)</div>
<div class="backdrop-blur-lg">Stronger glass effect</div>

Transforms and transitions

<!-- Scale -->
<div class="scale-50">Scale to 50%</div>
<div class="scale-100">Normal size</div>
<div class="scale-110">110%</div>
<div class="hover:scale-105">Scale on hover</div>

<!-- Rotate -->
<div class="rotate-0">0°</div>
<div class="rotate-45">45°</div>
<div class="rotate-90">90°</div>
<div class="rotate-180">180°</div>
<div class="-rotate-45">-45°</div>

<!-- Translate -->
<div class="translate-x-4">Move right 16px</div>
<div class="-translate-x-2">Move left 8px</div>
<div class="translate-y-8">Move down 32px</div>

<!-- Transition -->
<div class="transition">Default transition (all, 150ms ease)</div>
<div class="transition-colors">Only colors transition</div>
<div class="transition-opacity">Only opacity</div>
<div class="transition-transform">Only transforms</div>
<div class="duration-300">300ms duration</div>
<div class="duration-500">500ms duration</div>
<div class="ease-in-out">Ease in-out timing</div>
<div class="delay-150">150ms delay</div>

Dark mode

Tailwind supports dark mode via the dark: variant. By default it uses the OS prefers-color-scheme. You can also set darkMode: 'class' in tailwind.config.js to toggle via a class on <html>.

<!-- Automatic (OS preference) -->
<div class="bg-white dark:bg-gray-900">
  <p class="text-gray-900 dark:text-white">Text</p>
  <button class="bg-blue-500 dark:bg-blue-400">Button</button>
</div>
// tailwind.config.js — class-based dark mode
module.exports = {
  darkMode: 'class',
}
// Toggle dark mode with JS
document.documentElement.classList.toggle('dark')

State variants

<!-- Hover -->
<button class="bg-blue-500 hover:bg-blue-600">Hover darkens</button>

<!-- Focus -->
<input class="outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />

<!-- Active (click) -->
<button class="active:scale-95 active:opacity-80">Press effect</button>

<!-- Disabled -->
<button class="disabled:opacity-50 disabled:cursor-not-allowed" disabled>Disabled</button>

<!-- Checked (checkboxes, radios) -->
<input type="checkbox" class="checked:bg-blue-500" />

<!-- Group hover (parent triggers child) -->
<div class="group hover:bg-gray-100">
  <span class="text-gray-600 group-hover:text-blue-600">Changes on parent hover</span>
</div>

<!-- Peer (sibling triggers sibling) -->
<input type="checkbox" class="peer" id="toggle" />
<label for="toggle" class="peer-checked:text-blue-600">Checked state</label>

<!-- First / Last / Odd / Even -->
<ul>
  <li class="first:pt-0 last:pb-0 odd:bg-gray-50 even:bg-white">Item</li>
</ul>

<!-- Empty state -->
<div class="empty:hidden">Hidden when empty</div>

<!-- Placeholder -->
<input class="placeholder:text-gray-400 placeholder:italic" placeholder="Type here..." />

Arbitrary values

Tailwind lets you use any value with square bracket syntax:

<!-- Custom width -->
<div class="w-[250px]">250px wide</div>

<!-- Custom color (hex) -->
<div class="bg-[#1a1a2e]">Custom hex color</div>
<p class="text-[#ff6b6b]">Custom text color</p>

<!-- Custom font size -->
<p class="text-[17px]">Custom font size</p>

<!-- Custom spacing -->
<div class="mt-[72px]">Custom top margin</div>

<!-- CSS variable -->
<div class="bg-[var(--brand-color)]">Brand color from CSS var</div>

<!-- Grid template -->
<div class="grid grid-cols-[2fr_1fr_1fr]">Custom column template</div>

<!-- Arbitrary property (v3.3+) -->
<div class="[content:'hello']">Arbitrary CSS property</div>

Common patterns

Card component

<div class="bg-white rounded-xl shadow-md overflow-hidden max-w-sm hover:shadow-lg transition-shadow">
  <img class="w-full h-48 object-cover" src="..." alt="..." />
  <div class="p-6">
    <h3 class="text-lg font-semibold text-gray-900">Card title</h3>
    <p class="mt-2 text-gray-600 text-sm line-clamp-3">Description text...</p>
    <button class="mt-4 w-full bg-blue-500 hover:bg-blue-600 text-white font-medium py-2 px-4 rounded-lg transition-colors">
      Read more
    </button>
  </div>
</div>

Navbar

<nav class="sticky top-0 z-50 bg-white/80 backdrop-blur-md border-b border-gray-200">
  <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
    <div class="flex items-center justify-between h-16">
      <span class="text-xl font-bold text-gray-900">Logo</span>
      <div class="hidden md:flex items-center gap-8">
        <a class="text-gray-600 hover:text-gray-900 transition-colors" href="#">Home</a>
        <a class="text-gray-600 hover:text-gray-900 transition-colors" href="#">About</a>
        <button class="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-lg transition-colors">
          Get started
        </button>
      </div>
    </div>
  </div>
</nav>

Centered hero

<section class="min-h-screen flex flex-col items-center justify-center text-center px-4">
  <h1 class="text-4xl md:text-6xl font-bold text-gray-900 max-w-3xl">
    Build fast, ship faster
  </h1>
  <p class="mt-6 text-lg text-gray-600 max-w-xl">
    Your compelling tagline here.
  </p>
  <div class="mt-8 flex flex-col sm:flex-row gap-4">
    <button class="bg-blue-500 hover:bg-blue-600 text-white font-semibold px-8 py-3 rounded-xl transition-colors">
      Get started
    </button>
    <button class="border border-gray-300 hover:border-gray-400 text-gray-700 font-semibold px-8 py-3 rounded-xl transition-colors">
      Learn more
    </button>
  </div>
</section>

Responsive grid

<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6">
  <div class="bg-white rounded-lg p-4 shadow-sm border border-gray-100">Item</div>
  <!-- repeat... -->
</div>

Glass morphism

<div class="bg-white/10 backdrop-blur-lg border border-white/20 rounded-2xl p-6 shadow-xl">
  Glass effect card
</div>

6 common mistakes

1. Forgetting mobile-first order Tailwind breakpoints work upward. md:hidden means "hidden on md and above", not "hidden below md".

<!-- Wrong: tries to hide on mobile -->
<div class="hidden sm:block">...</div> <!-- hidden on xs, visible on sm+ ✓ -->

<!-- Right way to show on mobile, hide on desktop -->
<div class="block lg:hidden">Mobile only</div>

2. Using space-x and gap together space-x-4 adds margin to children; gap-4 is for flex/grid. Don't mix them.

3. Forgetting overflow-hidden on rounded containers

<!-- Image bleeds out of rounded card without overflow-hidden -->
<div class="rounded-xl overflow-hidden">
  <img src="..." />
</div>

4. Applying max-w without mx-auto max-w-xl only limits width — the element stays left-aligned unless you add mx-auto.

5. flex-1 vs w-full Inside a flex container, flex-1 fills remaining space. w-full sets 100% width which may cause overflow if siblings exist.

6. Dark mode class not on <html> When using darkMode: 'class', the dark class must be on <html>, not <body>.

<html class="dark">...</html>   <!-- ✓ -->
<body class="dark">...</body>   <!-- ✗ doesn't work -->

6 frequently asked questions

Q: How do I add a custom color to my Tailwind project? In tailwind.config.js (v3) or via CSS variables (v4):

// v3
module.exports = {
  theme: {
    extend: {
      colors: {
        brand: '#1a1a2e',
      }
    }
  }
}
// Now use: bg-brand, text-brand, border-brand

Q: How do I apply Tailwind classes conditionally in React/Vue? Use a library like clsx or classnames:

import clsx from 'clsx';
<div className={clsx('rounded-lg p-4', isActive && 'bg-blue-500', isDisabled && 'opacity-50')} />

Q: Can I use Tailwind with CSS modules or SCSS? Yes. Use @apply in CSS files to compose utilities:

.btn-primary {
  @apply bg-blue-500 hover:bg-blue-600 text-white font-semibold px-4 py-2 rounded-lg transition-colors;
}

Use @apply sparingly — if overused, you lose Tailwind's purging benefits.

Q: How does Tailwind's PurgeCSS/tree-shaking work? Tailwind v3+ uses JIT (Just-in-Time) compilation — it scans your template files and generates only the CSS classes you actually use. No unused CSS ships. Configure content in tailwind.config.js:

content: ["./src/**/*.{js,ts,jsx,tsx,html}"]

Q: What is the difference between w-full and w-screen?

  • w-full = 100% of the parent container
  • w-screen = 100vw (full viewport width, including scrollbar)

Q: When should I extract a component vs use Tailwind classes inline? When you copy-paste the same combination of 5+ classes more than twice, extract it into a component (React/Vue component, Blade component, etc.). Don't extract for single-use patterns — the duplication is intentional in utility-first CSS.

Related tools

Keep reading

All Toolmingotools are free & run in your browser

No sign-up, no upload, no watermark. Your files never leave your device.

Browse all tools