If you’ve ever felt the specific kind of burnout that comes from Alt-Tabbing between an HTML file and a 2,000-line stylesheet, you understand why utility-first frameworks took over the web. And now, Tailwind v4 has arrived to shake things up all over again.
In my years of building UIs, I haven't seen a workflow shift quite like the one Tailwind introduced. It turned CSS from a game of "naming things is hard" (looking at you, BEM) into a rapid, almost intuitive design flow. With version 4, the framework feels faster, lighter, and honestly, a lot less fussy to configure.
Whether you are brand new to this world or migrating from version 3, this Tailwind v4 cheat sheet is designed to be your daily companion. We aren't just going to list classes here; I want to help you understand the logic so you can stop guessing and start shipping.
Let's dive into the essential utilities, the new configuration style, and the practical snippets you’ll actually use.
Introduction to Tailwind CSS v4
So, what is the actual big deal with Tailwind CSS v4?
If you are a beginner, think of Tailwind as a giant bucket of Lego bricks. Instead of molding your own plastic (writing custom CSS rules like .my-button { padding: 10px; }), you get pre-made bricks (classes like p-4, bg-blue-500, rounded) that you snap together right inside your HTML.
Version 4 is a massive evolution. It’s built on a brand-new engine nicknamed "Oxide" that is written in Rust. What does that mean for you? It means it is blazing fast. I remember waiting a few seconds for styles to compile in older, massive projects; with v4, it feels instant.
The other major shift is towards a "CSS-first" configuration. In previous versions, you often had to wrestle with a tailwind.config.js JavaScript file just to add a custom color. In v4, much of that power has moved directly into your CSS file using standard CSS variables. It feels much more native to the web platform.
This cheat sheet covers the core concepts you need to survive and thrive in this new ecosystem.
Getting Started: Installation & Configuration
Getting Tailwind v4 up and running is simpler than ever. Because the engine is smarter, there is way less boilerplate code required to start a project.
The New Installation Flow
In the past, you had to generate config files and set up complex build steps. Now, if you are using a modern tool like Vite, it’s incredibly streamlined.
Here is the quickest way to get a project running:
npm install tailwindcss@next @tailwindcss/vite
After installing, you hook it up in your vite.config.ts:
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [
tailwindcss(),
],
})
The CSS Entry Point
This is where things look different. Instead of extensive JavaScript configuration, you simply import Tailwind in your main CSS file.
@import "tailwindcss";
That’s it. Seriously. This single line pulls in all the defaults. If you want to customize things (which we will cover later), you do it right there in the CSS.
Core Utilities: Layout, Flexbox, Grid
The bread and butter of any website is its layout. How do you position elements? How do they behave when the screen shrinks? This is where Tailwind shines brightest.
The Display Property
Controlling how an element behaves in the document flow is step one.
| Class | CSS Property | Description |
|---|---|---|
block |
display: block; |
Takes up the full width available. |
inline |
display: inline; |
Sits inline with text. |
inline-block |
display: inline-block; |
Inline, but you can set width/height. |
flex |
display: flex; |
Enables Flexbox layout. |
grid |
display: grid; |
Enables CSS Grid layout. |
hidden |
display: none; |
Removes the element from the DOM visually. |
Flexbox Essentials
Flexbox is your best friend for aligning items in a single row or column. If you are struggling to decide between layout models, we have a deep dive on CSS Layouts: When to Use Flexbox vs Grid that breaks down the decision-making process.
Here are the absolute must-know Flexbox classes:
Direction & Wrapping:
flex-row: Arranges items side-by-side (default).flex-col: Stacks items vertically.flex-wrap: Allows items to wrap to the next line if they run out of space.
Alignment (Main Axis):
Use justify-* to control alignment along the direction of the flex container.
<!-- Centers items horizontally -->
<div class="flex justify-center">
<div class="p-4 bg-red-200">01</div>
<div class="p-4 bg-red-200">02</div>
</div>
<!-- Spreads items out to edges -->
<div class="flex justify-between">
<div class="p-4 bg-red-200">01</div>
<div class="p-4 bg-red-200">02</div>
</div>
Alignment (Cross Axis):
Use items-* to control alignment perpendicular to the direction.
items-center: Centers items vertically (in a row).items-start: Aligns to the top.items-stretch: Stretches items to fill the container height.
Grid Essentials
CSS Grid is for two-dimensional layouts (rows AND columns).
grid-cols-1: 1 column.grid-cols-3: 3 equal columns.gap-4: Adds spacing between grid cells (works in Flexbox too!).
<!-- A simple 3-column grid -->
<div class="grid grid-cols-3 gap-4">
<div class="bg-blue-100">1</div>
<div class="bg-blue-100">2</div>
<div class="bg-blue-100">3</div>
</div>
Styling Essentials: Colors, Typography, Spacing
Once your layout is solid, you need to make it look good. Tailwind provides a massive palette of defaults that look great out of the box.
Colors
Tailwind colors follow a naming convention: {property}-{color}-{shade}.
The shades range from 50 (lightest) to 950 (darkest).
- Text Color:
text-blue-500,text-slate-900,text-white - Background:
bg-emerald-100,bg-gray-800,bg-transparent
Pro Tip: In v4, colors define their values using modern CSS color functions, making them easier to mix and match with opacity modifiers like bg-blue-500/50 (50% opacity).
Typography
Handling text is a huge part of web development.
Font Size:
text-xs: Extra small (0.75rem)text-sm: Small (0.875rem)text-base: Standard body text (1rem)text-lg: Large (1.125rem)text-xltotext-9xl: Headings and display text.
Font Weight:
font-light(300)font-normal(400)font-medium(500)font-semibold(600)font-bold(700)
Text Alignment:
text-left,text-center,text-right,text-justify
Spacing (Padding & Margin)
Tailwind’s spacing scale is one of its best features. It typically increments by 0.25rem (4px) per unit.
1= 0.25rem (4px)4= 1rem (16px)8= 2rem (32px)
Padding (Inside the box):
p-4: Padding on all sides.px-4: Padding on Left and Right.py-4: Padding on Top and Bottom.pt-4,pr-4,pb-4,pl-4: Individual sides.
Margin (Outside the box):
m-4: Margin on all sides.mx-auto: Centers a block element horizontally (crucial for containers!).my-4: Vertical margin.
<div class="m-8 p-6 bg-white rounded-lg">
<h2 class="text-xl font-bold mb-4">Card Title</h2>
<p class="text-gray-600">Some content inside the card with nice spacing.</p>
</div>
Visual Effects: Borders, Shadows, Transforms
Visual flair separates a bare-bones prototype from a polished product.
Borders
- Width:
border,border-2,border-4 - Color:
border-gray-200,border-red-500 - Radius:
rounded(small),rounded-md(medium),rounded-lg(large),rounded-full(circle).
Box Shadows
Shadows give depth to your design.
shadow-sm: Subtle shadow.shadow: Default shadow.shadow-lg: Large, floating effect.shadow-none: Removes shadow.
Transforms
In v4, transforms work seamlessly without needing specific "transform" enabling classes.
scale-105: Increases size by 5%.rotate-45: Rotates 45 degrees.translate-x-4: Moves element right.
<button class="bg-blue-500 hover:scale-105 transition-transform duration-200 ...">
Hover Me
</button>
Interactivity: Hover, Focus, States
Static pages are boring. Tailwind makes handling states incredibly easy using modifiers. You just add the state name followed by a colon before the class.
Common States
- Hover:
hover:bg-blue-600(Changes background on mouse over). - Focus:
focus:ring-2(Adds a ring when an input is clicked/selected). - Active:
active:bg-blue-700(When clicked/pressed). - Disabled:
disabled:opacity-50(When an input is disabled).
Group Hover
Sometimes you want to change the styling of a child element when the parent is hovered. This is where group comes in.
- Add the
groupclass to the parent container. - Add
group-hover:{utility}to the child.
<div class="group p-4 border hover:bg-gray-50 bg-white cursor-pointer">
<h3 class="text-lg font-bold group-hover:text-blue-500">
Hover the card, watch me turn blue!
</h3>
<p class="text-gray-500">Subtitle text here.</p>
</div>
This pattern is essential for cards and list items.
Responsive Design: Breakpoints & Variants
Building mobile-first is the standard today. Tailwind enforces this by using "min-width" breakpoints. This means a class applies to that screen size and everything larger, unless overridden.
If you are just starting out with layouts across devices, you might want to read our guide on the Principles of Responsive Web Design to understand the strategy before the code.
Breakpoint Prefixes
| Prefix | Minimum Width | Description |
|---|---|---|
| (none) | 0px | Mobile (default) |
sm: |
640px | Small tablets / Landscape phones |
md: |
768px | Tablets (iPad portrait) |
lg: |
1024px | Small Laptops / Landscape tablets |
xl: |
1280px | Desktops |
2xl: |
1536px | Large Desktops |
How to Write Mobile-First
Start by writing the class for mobile. Then, add prefixes for larger screens.
<!--
Mobile: 1 column, red background
Tablet (md): 2 columns, blue background
Desktop (lg): 3 columns, green background
-->
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 bg-red-500 md:bg-blue-500 lg:bg-green-500">
<!-- grid items... -->
</div>
Common Mistake: Don't write sm:hidden md:block lg:block. Just write sm:hidden md:block. The md:block will naturally carry over to lg and xl unless you stop it.
New Features & Changes in Tailwind v4
Tailwind v4 isn't just a speed upgrade; it changes how we think about the framework.
1. Dynamic Values (The "Just-in-Time" Evolution)
While JIT existed in v3, v4 doubles down on it. You can use arbitrary values almost anywhere without configuration.
h-[123px]bg-[#bada55]grid-cols-[200px_minmax(900px,_1fr)_100px]
2. Zero-Configuration Variables
In v4, you don't need to edit a JS file to add a brand color. You can define it in your CSS using standard CSS variables, and Tailwind will automatically pick it up as a utility.
@import "tailwindcss";
@theme {
--color-brand: #ff5733;
--font-display: "Oswald", sans-serif;
}
Now, text-brand and font-display are available instantly in your HTML. This is a massive workflow improvement.
3. container Query Support
Container queries allow elements to style themselves based on their parent's width, not the window's width. This has historically been tricky, but v4 aims to make @container directives first-class citizens alongside media queries.
Customization & Extending Tailwind
As mentioned, customization in v4 is primarily CSS-based.
Adding Custom Fonts
Suppose you want to use a Google Font.
- Import the font in your CSS or HTML.
- Map it in the
@themeblock.
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap');
@import "tailwindcss";
@theme {
--font-sans: "Inter", system-ui, sans-serif;
}
Now, font-sans applies Inter automatically.
Extending the Spacing Scale
If you need a very specific spacing value globally:
@theme {
--spacing-128: 32rem;
}
Now p-128, m-128, h-128 are all valid classes.
Quick Reference: Common Class Combinations
Memorizing individual classes is easy; knowing how to combine them is the art. Here are a few "recipes" I use in almost every project.
The "Perfect" Button
A button that looks clickable, has nice padding, and gentle transitions.
<button class="bg-blue-600 text-white px-6 py-2 rounded-lg font-medium
hover:bg-blue-700 active:bg-blue-800
transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2">
Click Me
</button>
The Centering Trick (Absolute)
If you need to dead-center something inside a relative container.
<div class="relative h-64 bg-gray-100">
<div class="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2">
I am centered!
</div>
</div>
Note: In modern CSS, flex and items-center justify-center is usually better, but this absolute trick is still handy for overlays.
The Card Component
A standard card with an image, title, and description.
<div class="max-w-sm rounded overflow-hidden shadow-lg bg-white">
<img class="w-full h-48 object-cover" src="/image.jpg" alt="Sunset">
<div class="px-6 py-4">
<div class="font-bold text-xl mb-2">The Coldest Sunset</div>
<p class="text-gray-700 text-base">
Sunset look so beautifully in that view.
</p>
</div>
</div>
Tips for Efficient Workflow
Writing utility classes can clutter your HTML. Here is how to keep your sanity.
1. Use VS Code Extensions
You absolutely need the official Tailwind CSS IntelliSense extension. It provides autocomplete, syntax highlighting, and shows you exactly what CSS is being generated when you hover over a class.
2. Class Sorting
Install the Prettier plugin for Tailwind CSS. It automatically sorts your classes in a recommended order (layout -> box model -> typography -> visual). This ensures your team always writes classes in the same order, reducing merge conflicts and cognitive load.
npm install -D prettier prettier-plugin-tailwindcss
3. Don't Over-Abstract
A common mistake beginners make is using @apply to recreate traditional CSS classes (e.g., .btn { @apply px-4 py-2 ...}). Try to resist this. The beauty of Tailwind is having the styles in the template. Only abstract when you have a repeating component used in many places, and even then, prefer using a component framework (like React or Vue) to handle the reuse rather than CSS abstraction.
Conclusion
Tailwind v4 is a testament to how far web development has come. It removes the friction between "designing" and "coding." You aren't context-switching between files; you are just molding the UI directly in the markup.
It might feel messy at first to see so many classes in your HTML. I felt the same way. But give it two weeks. Once your muscle memory kicks in, you’ll realize you are building layouts faster than you ever thought possible.
Keep this cheat sheet bookmarked. Use the search function (Ctrl+F or Cmd+F) to find the class you need, and happy coding!
Frequently Asked Questions
What is the difference between Tailwind v3 and v4? Tailwind v4 uses a new engine (Oxide) built in Rust, which makes it significantly faster. It also removes the dependency on a JavaScript configuration file (
tailwind.config.js) for most use cases, opting instead for a CSS-first configuration approach using@theme.
Can I use Tailwind v4 with standard HTML and CSS without a build step? While Tailwind is designed to be post-processed for optimal performance (purging unused styles), v4 is pushing for better integration with modern web standards. However, for production, you should always use a build tool (like Vite or the Tailwind CLI) to ensure your CSS file is as small as possible.
How do I handle hover states on mobile? Hover states generally don't work well on touch devices because there is no mouse cursor. Tailwind handles this gracefully; hover styles simply won't trigger on a tap in most cases. However, you should ensure your UI is usable without hover interactions (e.g., don't hide essential buttons behind a hover).
Is it bad practice to have long strings of classes in HTML? It is a trade-off. "Ugly" HTML is the price you pay for cleaner CSS, zero style conflicts, and safer deletion of code (you know exactly what deleting a class affects). If the strings get too long, consider breaking your UI into smaller, reusable components (like a
<Button />component in React) rather than creating CSS classes.
How do I center a div in Tailwind? The most modern way is using Flexbox or Grid. Add
flex items-center justify-center h-screento the parent container to center the child vertically and horizontally within the full screen height.