
Description
Semantic spacing system for Tailwind CSS v4 using block (32px) and tab (4px) units. Use when building UIs with consistent spacing, dashboards, admin panels, design tools, or any interface requiring a harmonious spacing system. Provides patterns for buttons, inputs, cards, toolbars, panels, and layouts.
SKILL.md
TW-Blocks Design System
Core Principles
TW-Blocks provides semantic spacing using two fundamental units:
- Block (2rem / 32px): Component sizes - buttons, inputs, headers, toolbars, avatars
- Tab (0.25rem / 4px): Padding, margins, gaps - spacing between and within elements
The 4:1 Ratio: 4 tabs = 1 block. This creates predictable, harmonious layouts.
1 block = 32px = 4 tabs
████████ ████████ ████████ ████████
tab-1 tab-2 tab-3 tab-4
4px 8px 12px 16px
Installation & Setup
pnpm add tw-blocks
/* app/globals.css */
@import "tailwindcss";
@import "tw-blocks";
Class Reference
Tab Spacing Scale (17 values)
| Class suffix | Value | Pixels |
|---|---|---|
tab-0 | 0 | 0px |
tab-0.5 | 0.5 × tab | 2px |
tab-1 | 1 × tab | 4px |
tab-1.5 | 1.5 × tab | 6px |
tab-2 | 2 × tab | 8px |
tab-2.5 | 2.5 × tab | 10px |
tab-3 | 3 × tab | 12px |
tab-4 | 4 × tab | 16px |
tab-5 | 5 × tab | 20px |
tab-6 | 6 × tab | 24px |
tab-8 | 8 × tab | 32px |
tab-10 | 10 × tab | 40px |
tab-12 | 12 × tab | 48px |
tab-16 | 16 × tab | 64px |
tab-20 | 20 × tab | 80px |
tab-24 | 24 × tab | 96px |
tab-32 | 32 × tab | 128px |
Block Spacing Scale (14 values)
| Class suffix | Value | Pixels |
|---|---|---|
block-0 | 0 | 0px |
block-0.5 | 0.5 × block | 16px |
block-1 | 1 × block | 32px |
block-1.5 | 1.5 × block | 48px |
block-2 | 2 × block | 64px |
block-2.5 | 2.5 × block | 80px |
block-3 | 3 × block | 96px |
block-4 | 4 × block | 128px |
block-5 | 5 × block | 160px |
block-6 | 6 × block | 192px |
block-8 | 8 × block | 256px |
block-10 | 10 × block | 320px |
block-12 | 12 × block | 384px |
block-16 | 16 × block | 512px |
Border Radius Values
| Class | Value | Pixels |
|---|---|---|
rounded-tab-1 | 1 × tab | 4px |
rounded-tab-2 | 2 × tab | 8px |
rounded-tab-3 | 3 × tab | 12px |
rounded-tab-4 | 4 × tab | 16px |
rounded-block-0.5 | 0.5 × block | 16px |
rounded-block-1 | 1 × block | 32px (fully round) |
Supported Tailwind Utilities
All standard Tailwind spacing utilities work with block/tab:
- Padding:
p-tab-4,px-tab-3,py-tab-2,p-block-1 - Margin:
m-tab-4,mx-tab-3,my-tab-2,m-block-1 - Gap:
gap-tab-4,gap-x-tab-3,gap-block-1 - Width/Height:
w-block-2,h-block-1,size-block-1 - Inset:
top-tab-2,left-tab-4,inset-block-1 - Space:
space-x-tab-2,space-y-tab-4
Quick Patterns
Button
<button class="h-block-1 px-tab-4 rounded-tab-2 bg-blue-500 text-white">Click me</button>
Small Button
<button class="h-tab-6 px-tab-3 rounded-tab-1.5 text-sm">Small</button>
Icon Button
<button class="size-block-1 flex items-center justify-center rounded-tab-2">
<svg class="w-tab-4 h-tab-4" />
</button>
Input Field
<input type="text" class="h-block-1 px-tab-3 rounded-tab-2 border border-gray-300" />
Card
<div class="p-tab-4 rounded-block-0.5 bg-white shadow-sm border">
<h3 class="text-lg font-semibold">Title</h3>
<p class="mt-tab-2 text-gray-600">Description</p>
</div>
Best Practices
Component Height Guidelines
| Component | Height | Class |
|---|---|---|
| Standard button | 32px | h-block-1 |
| Small button | 24px | h-tab-6 |
| Large button | 48px | h-block-1.5 |
| Input field | 32px | h-block-1 |
| Small input | 24px | h-tab-6 |
| Toolbar | 48px | h-block-1.5 |
| Header (main) | 64px | h-block-2 |
| Status bar | 24px | h-tab-6 |
| Avatar (small) | 32px | size-block-1 |
| Avatar (large) | 48px | size-block-1.5 |
Horizontal Padding Standards
| Container | Padding |
|---|---|
| Page content | px-tab-6 |
| Card | p-tab-4 |
| Button | px-tab-4 |
| Input | px-tab-3 |
| Panel section | p-tab-2 or p-tab-3 |
| Header | px-tab-4 |
Border Radius Guidelines
| Element | Radius |
|---|---|
| Button | rounded-tab-2 (8px) |
| Card | rounded-block-0.5 (16px) |
| Input | rounded-tab-2 (8px) |
| Small badge | rounded-tab-1 (4px) |
| Avatar | rounded-full |
UI Density Patterns
Compact UI (Code editors, IDEs, tools):
- Toolbar:
h-block-1(32px) - List items:
h-tab-5orh-tab-6(20-24px) - Padding:
p-tab-2,px-tab-3 - Gaps:
gap-tab-1,gap-tab-2
Normal UI (Dashboards, apps):
- Header:
h-block-2(64px) - Buttons:
h-block-1(32px) - Cards:
p-tab-4orp-tab-6 - Gaps:
gap-tab-4,gap-tab-6
Spacious UI (Marketing, content):
- Headers:
h-block-2.5orh-block-3 - Cards:
p-tab-8,p-tab-12 - Gaps:
gap-tab-8,gap-tab-12
Combining with Standard Tailwind
TW-Blocks focuses on spacing and sizing. Use standard Tailwind for everything else:
✅ Use Standard Tailwind For:
- Colors:
bg-blue-500,text-gray-700,border-gray-200 - Typography:
text-sm,font-bold - Flexbox/Grid:
flex,grid,items-center - Borders:
border,border-t - Effects:
shadow-md,hover:bg-gray-100
❌ Avoid Standard Tailwind For:
- Spacing: Use
p-tab-4notp-4 - Component sizing: Use
h-block-1noth-8 - Block-aligned radius: Use
rounded-tab-2notrounded-md
Detailed Patterns
For complete component patterns, see references/patterns.md:
- Dashboard layouts (sidebar, stat cards)
- Toolbars & headers (dashboard, design tool, status bar)
- Panels & sidebars (tool palette, property panels, layers)
- Forms & inputs (buttons, inputs, cards)
- Tables & lists (dense lists, email lists)
- Status indicators (badges, progress bars, selected states)
- Chat & messages (chat bubbles, message lists)
- Charts & data viz (containers, recommended heights)
- Timeline & animation panels
- Code editor interface (full IDE layout)
Read patterns.md when you need specific implementation examples.
Common Mistakes to Avoid
❌ Don't mix spacing systems
<!-- Bad -->
<div class="p-4 mt-tab-2 mb-8">
<!-- Good -->
<div class="p-tab-4 mt-tab-2 mb-tab-8">
❌ Don't use blocks for small padding
<!-- Bad -->
<button class="p-block-1">
<!-- Good -->
<button class="px-tab-4 py-tab-2">
❌ Don't use tabs for component sizing
<!-- Bad -->
<button class="h-tab-8">
<!-- Good -->
<button class="h-block-1">
✅ Do use fractional values
<div class="p-tab-1.5"> <!-- 6px -->
<div class="h-block-1.5"> <!-- 48px -->
<div class="gap-tab-2.5"> <!-- 10px -->
Debugging Tips
Inspect CSS Variables
getComputedStyle(document.documentElement).getPropertyValue('--spacing-block') // "2rem"
getComputedStyle(document.documentElement).getPropertyValue('--spacing-tab') // "0.25rem"
Test with Visible Borders
<div class="p-tab-4 border-2 border-red-500">
<div class="h-block-1 border-2 border-blue-500">Button height</div>
</div>
Quick Reference
┌─────────────────────────────────────────────────────────┐
│ BLOCKS (Component Sizing) │
│ block-1 = 32px | block-1.5 = 48px | block-2 = 64px │
├─────────────────────────────────────────────────────────┤
│ TABS (Spacing/Padding) │
│ tab-1 = 4px | tab-2 = 8px | tab-3 = 12px | tab-4 = 16px │
├─────────────────────────────────────────────────────────┤
│ HEIGHT: Button h-block-1 | Header h-block-2 | Toolbar h-block-1.5 │
├─────────────────────────────────────────────────────────┤
│ PADDING: Button px-tab-4 | Card p-tab-4 | Input px-tab-3 │
├─────────────────────────────────────────────────────────┤
│ RADIUS: Button rounded-tab-2 | Card rounded-block-0.5 │
└─────────────────────────────────────────────────────────┘
More from Vercel Labs
View publisheragent-browser
automate browser interactions for AI agents
agent-browser
Jul 20AgentsAutomationBrowser Automationagentcore
run browser automation on AWS Bedrock
agent-browser
Jul 17AutomationAWSBrowser Automationcore
navigate and interact with web pages
agent-browser
Jul 26AgentsBrowser AutomationNavigationderive-client
reverse engineer internal APIs from browser traffic
agent-browser
Jul 20API DevelopmentAutomationBrowser AutomationWeb Scrapingdogfood
perform exploratory testing on web applications
agent-browser
Jul 17Browser AutomationDebuggingQATestingelectron
automate Electron desktop applications
agent-browser
Jul 17AgentsBrowser AutomationDesktop