Tailwind Standards
Core Rules
- •ALWAYS inline utility classes — NEVER extract to constants or CSS files
- •Custom CSS is FORBIDDEN — only exceptions: complex animations, pseudo-selectors Tailwind can't handle
- •
cvais the ONLY abstraction allowed for class variants - •
cn()(clsx + twMerge) is MANDATORY when available — NEVER template literals for classes
Class Organization (single line per breakpoint)
code
base dark:dark-variant sm:responsive md:responsive lg:responsive hover:interactive focus:interactive
- •
dark:variants WITH the base state on the same element - •One line per responsive breakpoint when it gets long
- •Group: layout > sizing > spacing > typography > colors > effects
Forbidden Patterns
- •String concatenation for classes:
`text-${size}`— use a map or cva - •Extracting classes to JS constants (except cva)
- •
@applyin CSS files — defeats the purpose of utility-first - •Inline
style={}attributes — use Tailwind utilities instead - •Over-segmented class strings across multiple variables
Spacing & Sizing
- •Use Tailwind scale values — NEVER arbitrary values unless design-system aligned
- •Consistent spacing: pick a scale and stick to it (4px base:
p-1,p-2,p-4,p-8) - •
size-*shorthand over separatew-*+h-*when both are identical