tailwind-css
npx skills add https://github.com/paulrberg/dot-agents --skill tailwind-css
Agent 安装分布
Skill 文档
Tailwind CSS v4
Expert guidance for Tailwind CSS v4, CSS-first configuration, modern utility patterns, and type-safe component styling with tailwind-variants.
CSS-First Configuration
Tailwind CSS v4 eliminates tailwind.config.ts in favor of CSS-only configuration. All configuration lives in CSS files using special directives.
Core Directives:
@import "tailwindcss"– Entry point that loads Tailwind@theme { }– Define or extend design tokens@theme static { }– Define tokens that should not generate utilities@utility– Create custom utilities@custom-variant– Define custom variants
Minimal Example:
@import "tailwindcss";
@theme {
--color-brand: oklch(0.72 0.11 178);
--font-display: "Inter", sans-serif;
--spacing-edge: 1.5rem;
}
All theme tokens defined with @theme automatically become available as utility classes. For example, --color-brand can be used as bg-brand, text-brand, border-brand, etc.
ESLint Integration
Use eslint-plugin-better-tailwindcss for Tailwind CSS v4 class validation and style enforcement.
Correctness Rules (errors):
no-conflicting-classes– Detect classes that override each otherno-unknown-classes– Flag classes not registered with Tailwind
Stylistic Rules (warnings):
enforce-canonical-classes– Use standard v4 class namesenforce-shorthand-classes– Use abbreviated class versionsno-deprecated-classes– Remove outdated class namesno-duplicate-classes– Eliminate redundant declarationsno-unnecessary-whitespace– Clean up extra spacing
Examples:
// â Bad: separate padding
<div className="px-6 py-6">
// â
Good: shorthand
<div className="p-6">
// â Bad: separate width/height
<div className="w-6 h-6">
// â
Good: size utility
<div className="size-6">
Run the project’s ESLint check after modifying Tailwind classes to validate all changes across the codebase.
Coding Preferences
Layout and Spacing
Use gap for flex/grid spacing, not space-x/space-y:
The gap utilities handle wrapping correctly, while space-* utilities break when flex/grid items wrap to multiple lines.
// â
Good: gap handles wrapping
<div className="flex gap-4">
// â Bad: breaks when items wrap
<div className="flex space-x-4">
Prefer size-* over separate w-*/h-* for equal dimensions:
// â
Good: concise
<div className="size-16">
// â Bad: redundant
<div className="w-16 h-16">
Always use min-h-dvh instead of min-h-screen:
Dynamic viewport height (dvh) accounts for mobile browser chrome, while vh units ignore it and cause layout issues on mobile Safari.
// â
Good: works on mobile Safari
<main className="min-h-dvh">
// â Bad: buggy on mobile Safari
<main className="min-h-screen">
Prefer top/left margins over bottom/right:
Consistent directionality improves layout predictability.
// â
Good: top margin
<div className="mt-4">
// â Avoid: bottom margin (unless needed)
<div className="mb-4">
Use padding on parent containers instead of bottom margins on last child:
Padding provides consistent spacing without needing :last-child selectors.
// â
Good: padding on parent
<section className="pb-8">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</section>
// â Avoid: margin on children
<section>
<div className="mb-4">Item 1</div>
<div className="mb-4">Item 2</div>
<div>Item 3</div>
</section>
For max-widths, prefer container scale over pixel values:
// â
Good: semantic container size
<div className="max-w-2xl">
// â Avoid: arbitrary pixel value
<div className="max-w-[672px]">
Typography
Avoid leading-* classes; use line height modifiers:
Tailwind v4 supports inline line height modifiers with the text-{size}/{leading} syntax.
// â
Good: combined size and line height
<p className="text-base/7">
// â Bad: separate utilities
<p className="text-base leading-7">
Font Size Reference:
| Class | Size |
|---|---|
text-xs |
12px |
text-sm |
14px |
text-base |
16px |
text-lg |
18px |
text-xl |
20px |
Colors and Opacity
Use opacity modifier syntax, not separate opacity utilities:
All *-opacity-* utilities were removed in Tailwind v4. Use the modifier syntax instead.
// â
Good: opacity modifier
<div className="bg-red-500/60">
// â Bad: removed in v4
<div className="bg-red-500 bg-opacity-60">
Prefer design tokens over arbitrary hex values:
Check the project’s @theme configuration before using arbitrary color values.
// â
Good: theme token
<div className="bg-brand">
// â Avoid: arbitrary hex (check theme first)
<div className="bg-[#4f46e5]">
Border Radius
Tailwind v4 renamed border radius utilities:
| v3 | v4 (equivalent) | Size |
|---|---|---|
rounded-sm |
rounded-xs |
2px |
rounded |
rounded-sm |
4px |
rounded-md |
rounded |
6px |
rounded-lg |
rounded-md |
8px |
Use the v4 names when writing new code.
Gradients
Tailwind v4 renamed gradient utilities and added new gradient types.
Use bg-linear-*, not bg-gradient-*:
// â
Good: v4 syntax
<div className="bg-linear-to-r from-blue-500 to-purple-500">
// â Bad: removed in v4
<div className="bg-gradient-to-r from-blue-500 to-purple-500">
New gradient types:
bg-radial– Radial gradientsbg-conic– Conic gradients
Example:
<div className="bg-radial from-blue-500 to-purple-500">
<div className="bg-conic from-red-500 via-yellow-500 to-green-500">
Arbitrary Values
Always prefer Tailwind’s predefined scale:
Check the project’s @theme configuration for available tokens before using arbitrary values.
// â
Good: predefined scale
<div className="ml-4">
// â Avoid: arbitrary pixel value
<div className="ml-[16px]">
General rule: Prefer sizing scale over pixel values. Three similar lines of code is better than a premature abstraction.
Class Merging
The common pattern is a cn utility combining clsx + tailwind-merge.
Use cn for:
- Static constants:
const CARD_BASE = cn("fixed classes") - Conditional classes:
cn("base", condition && "conditional") - Dynamic merging:
cn(baseClasses, className) - Conflict resolution:
cn("p-4", "p-6")â"p-6"
Do NOT use cn for:
- Static strings in
classNameattributes:className="fixed classes"
Examples:
// â
Good: static string in className
<button className="rounded-lg px-4 py-2 font-medium bg-blue-600">
// â
Good: static constant with cn
const CARD_BASE = cn("rounded-lg border border-gray-300 p-4");
<div className={CARD_BASE} />
// â
Good: conditional with cn
<button className={cn(
"rounded-lg px-4 py-2 font-medium",
isActive ? "bg-blue-600" : "bg-gray-700",
disabled && "opacity-50"
)} />
// â Bad: unnecessary cn for static className attribute
<button className={cn("rounded-lg px-4 py-2 font-medium")} />
Image Sizing
Use Tailwind size classes instead of pixel values for Image components.
// â
Good: Tailwind units
<Image src={src} alt={alt} className="size-16" />
<Image src={src} alt={alt} className="w-24 h-auto" />
// â Bad: pixel values
<Image src={src} alt={alt} width={64} height={64} />
Z-Index
Define z-index values as CSS custom properties in @theme, then reference them with the z-(--z-*) syntax.
Never use arbitrary z-index numbers:
// â
Good: theme z-index value
<div className="z-(--z-modal)">
<div className="z-(--z-sticky)">
// â Bad: arbitrary z-index numbers
<div className="z-[100]">
<div className="z-[9999]">
Define z-index tokens in CSS:
@theme {
--z-base: 0;
--z-sticky: 10;
--z-modal: 100;
--z-tooltip: 1000;
}
Dark Mode
Use the plain dark: variant for dark mode styles.
Pattern:
Write light mode styles first, then add dark mode overrides.
// â
Good: light mode first, then dark override
<div className="bg-white text-gray-900 dark:bg-gray-900 dark:text-white">
// â Avoid: dark mode first (less readable)
<div className="dark:bg-gray-900 dark:text-white bg-white text-gray-900">
CSS Modules
Use CSS Modules only as a last resort for complex CSS that cannot be easily written with Tailwind classes.
All .module.css files must include @reference "#tailwind"; at the top to enable Tailwind utilities and theme tokens inside the module.
Example:
/* component.module.css */
@reference "#tailwind";
.component {
/* Complex CSS that can't be expressed with Tailwind utilities */
/* Can still use Tailwind utilities and theme tokens */
}
Common Tasks
Adding a Component with Variants
- Read
references/tailwind-variants.mdfor patterns - Check the project’s
@themeconfiguration for available tokens - Use
tv()fromtailwind-variantsfor type-safe variants
Example:
import { tv } from "tailwind-variants";
const button = tv({
base: "rounded-lg px-4 py-2 font-medium",
variants: {
color: {
primary: "bg-blue-600 text-white",
secondary: "bg-gray-600 text-white",
},
size: {
sm: "text-sm",
md: "text-base",
lg: "text-lg",
},
},
});
Debugging Styles
- Check
references/tailwind-v4-rules.mdfor breaking changes - Verify gradient syntax (
bg-linear-*, notbg-gradient-*) - Verify CSS variable syntax (
bg-my-color, notbg-[--var-my-color]) - Check if arbitrary value exists in the project’s
@themeconfiguration
Working with Colors
- Check the project’s
@themeconfiguration first to see available colors - Use semantic color names when available
- Use opacity modifiers for transparency (
/20,/50, etc.) - Avoid arbitrary colors unless absolutely necessary
Example:
// â
Good: theme token with opacity
<div className="bg-brand/20 text-brand">
// â Avoid: arbitrary hex
<div className="bg-[#4f46e5]/20 text-[#4f46e5]">
Adding Animations
- Read
references/tw-animate-css.mdfor available animations - Combine a base class (
animate-inoranimate-out) with effect classes - Note decimal spacing gotcha: use
[0.625rem]syntax, not2.5
Example:
// Enter: fade + slide up
<div className="fade-in slide-in-from-bottom-4 duration-300 animate-in">
// Exit: fade + slide down
<div className="fade-out slide-out-to-bottom-4 duration-200 animate-out">
Quick Reference Table
| Aspect | Pattern |
|---|---|
| Configuration | CSS-only: @theme, @utility, @custom-variant |
| Gradients | bg-linear-*, bg-radial, bg-conic |
| Opacity | Modifier syntax: bg-black/50 |
| Line Height | Modifier syntax: text-base/7 |
| Font Features | font-features-zero, font-features-ss01, etc. |
| CSS Variables | bg-my-color (auto-created from @theme) |
| CSS Modules | @reference "#tailwind"; at top |
| Class Merging | cn() for conditionals; plain string for static |
| Viewport | min-h-dvh (not min-h-screen) |
| Component Variants | references/tailwind-variants.md |
| Animations | references/tw-animate-css.md |
| V4 Rules | references/tailwind-v4-rules.md |
Reference Documentation
- Tailwind v4 Rules & Best Practices:
references/tailwind-v4-rules.mdâ Breaking changes, removed/renamed utilities, layout rules, typography, gradients, CSS variables, new v4 features, common pitfalls - tailwind-variants Patterns:
references/tailwind-variants.mdâ Component variants, slots API, composition, TypeScript integration, responsive variants - tw-animate-css Reference:
references/tw-animate-css.mdâ Enter/exit animations, slide/fade/zoom utilities, spacing gotchas