- Created complete spacing system guide in apps/web/docs/SPACING_GUIDE.md - Documented numeric and semantic spacing scales with full value tables - Included usage guidelines, best practices, and common patterns - Added migration guide for replacing arbitrary values - Documented ESLint enforcement and related documentation - Task 7.2.1.7 complete
6.3 KiB
Spacing System Guide
Last Updated: 2025-01-27
Action: 7.2.1.7 - Create SPACING_GUIDE.md
Status: ✅ Complete
Overview
The Veza spacing system is built on a 4px base scale and provides both numeric and semantic spacing utilities. All spacing utilities are automatically generated by Tailwind v4 from CSS variables defined in design-tokens.css.
Spacing Scale
Numeric Scale (Recommended for Most Cases)
The numeric scale uses numbers (0-24) that map to 4px increments:
| Value | Rem | Pixels | Common Usage |
|---|---|---|---|
0 |
0 | 0px | No spacing |
1 |
0.25rem | 4px | Tight spacing, icons |
2 |
0.5rem | 8px | Small spacing, compact layouts |
3 |
0.75rem | 12px | Medium-small spacing |
4 |
1rem | 16px | Base spacing (most common) |
5 |
1.25rem | 20px | Medium spacing |
6 |
1.5rem | 24px | Large spacing |
8 |
2rem | 32px | Extra large spacing |
10 |
2.5rem | 40px | Section spacing |
12 |
3rem | 48px | Large section spacing |
16 |
4rem | 64px | Page section spacing |
20 |
5rem | 80px | Major section spacing |
24 |
6rem | 96px | Maximum spacing |
Semantic Scale (For Design System Consistency)
The semantic scale provides named values for design system consistency:
| Name | Value | Pixels | Equivalent Numeric |
|---|---|---|---|
xs |
0.25rem | 4px | 1 |
sm |
0.5rem | 8px | 2 |
md |
1rem | 16px | 4 |
lg |
1.5rem | 24px | 6 |
xl |
2rem | 32px | 8 |
2xl |
3rem | 48px | 12 |
3xl |
4rem | 64px | 16 |
4xl |
5rem | 80px | 20 |
5xl / xxl |
6rem | 96px | 24 |
Available Utilities
All spacing utilities are automatically generated by Tailwind v4. You can use both numeric and semantic values:
Gap Utilities
- Numeric:
gap-0,gap-1,gap-2,gap-3,gap-4,gap-5,gap-6,gap-8,gap-10,gap-12,gap-16,gap-20,gap-24 - Semantic:
gap-xs,gap-sm,gap-md,gap-lg,gap-xl,gap-2xl,gap-3xl,gap-4xl,gap-5xl,gap-xxl
Padding Utilities
- Numeric:
p-0,p-1,p-2,p-3,p-4,p-5,p-6,p-8,p-10,p-12,p-16,p-20,p-24 - Directional:
px-*,py-*,pt-*,pr-*,pb-*,pl-* - Semantic:
p-xs,p-sm,p-md,p-lg,p-xl,p-2xl,p-3xl,p-4xl,p-5xl,p-xxl
Margin Utilities
- Numeric:
m-0,m-1,m-2,m-3,m-4,m-5,m-6,m-8,m-10,m-12,m-16,m-20,m-24 - Directional:
mx-*,my-*,mt-*,mr-*,mb-*,ml-* - Semantic:
m-xs,m-sm,m-md,m-lg,m-xl,m-2xl,m-3xl,m-4xl,m-5xl,m-xxl
Space Between Utilities
- Numeric:
space-x-*,space-y-*(0-24) - Semantic:
space-x-xs,space-y-md, etc.
Usage Guidelines
When to Use Numeric Scale
✅ Use numeric scale for:
- Most common spacing needs
- Precise pixel control
- Following Tailwind conventions
- Consistency with existing codebase
Examples:
<div className="flex gap-4 p-6">
<Card className="p-4" />
<Card className="px-8 py-2" />
</div>
When to Use Semantic Scale
✅ Use semantic scale for:
- Reusable component libraries
- Design system consistency
- When spacing meaning is more important than exact pixels
- Building design tokens
Examples:
<Container className="p-md gap-lg">
<Card className="p-sm" />
<Card className="px-xl py-sm" />
</Container>
Common Patterns
Component Spacing
// Card with consistent padding
<Card className="p-4">...</Card>
// Card with semantic padding
<Card className="p-md">...</Card>
Layout Spacing
// Grid with gap
<div className="grid grid-cols-3 gap-4">...</div>
// Flex with gap
<div className="flex gap-2">...</div>
Section Spacing
// Vertical spacing between sections
<section className="space-y-6">...</section>
// Large section spacing
<section className="py-12">...</section>
Best Practices
✅ Do
- Use scale values (0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24)
- Prefer numeric scale for most cases
- Use semantic scale for design system components
- Be consistent within components
- Use
gap-*for flexbox/grid layouts - Use
space-y-*/space-x-*for spacing between children
❌ Don't
- Use arbitrary values (
gap-[7px],p-[9px]) - use nearest scale value - Mix numeric and semantic inconsistently
- Use spacing values outside the scale (7, 9, 11, 13, 14, 15, etc.)
- Use
marginwhengaporspace-*would work - Override spacing with inline styles
ESLint Enforcement
An ESLint rule enforces spacing scale usage:
- Warns on: Arbitrary spacing values like
gap-[7px],p-[9px], etc. - Allows: All scale values (0-24 numeric, xs-xxl semantic)
- Exceptions: Use
eslint-disablecomments for legitimate exceptions
Migration Guide
Replacing Arbitrary Values
If you find arbitrary spacing values, replace them with the nearest scale value:
| Arbitrary | Replace With | Reason |
|---|---|---|
gap-[7px] |
gap-6 |
7px (28px) → 6 (24px) |
p-[9px] |
p-8 |
9px (36px) → 8 (32px) |
gap-[11px] |
gap-12 |
11px (44px) → 12 (48px) |
Converting to Semantic Scale
For design system components, consider converting to semantic scale:
| Numeric | Semantic | Use Case |
|---|---|---|
gap-2 |
gap-sm |
Small spacing |
p-4 |
p-md |
Base padding |
gap-6 |
gap-lg |
Large spacing |
p-12 |
p-2xl |
Extra large padding |
Statistics
Based on the spacing audit (Action 7.2.1.2):
- Total spacing instances: 2,761 across 366 files
- Most common:
gap-2(519 instances),p-4(357 instances),space-y-4(159 instances) - Scale compliance: ~99% of spacing uses valid scale values
Related Documentation
- Design Tokens:
apps/web/src/styles/design-tokens.css - Spacing Audit:
apps/web/docs/SPACING_AUDIT_REPORT.md - ESLint Config:
apps/web/eslint.config.js
Questions?
If you're unsure which spacing value to use:
- Check existing patterns in similar components
- Use numeric scale for most cases (gap-2, p-4, etc.)
- Use semantic scale for design system components
- Follow the 4px base - all values should align to 4px increments
- Run ESLint - it will warn on invalid spacing values