6.7 KiB
Spacing Extraction Guide
This guide provides methods for extracting and translating spacing values from Figma to Tailwind CSS.
Spacing Types
1. Padding (Internal Spacing)
Padding is the space between a container's edge and its content.
Figma Indicators:
- Auto Layout padding values
- Distance from frame edge to first child element
- Uniform or directional padding (top, right, bottom, left)
Extraction Method:
- Select the container frame
- Check Auto Layout panel for padding values
- Note if padding is uniform or differs by direction
Tailwind Mapping:
// Uniform padding
padding: 16px → className="p-4"
// Directional padding
paddingX: 16px, paddingY: 8px → className="px-4 py-2"
// Individual sides
paddingTop: 16px → className="pt-4"
paddingRight: 16px → className="pr-4"
paddingBottom: 16px → className="pb-4"
paddingLeft: 16px → className="pl-4"
2. Margin (External Spacing)
Margin is the space around an element, separating it from adjacent elements.
Figma Indicators:
- Space between sibling elements (when not using Auto Layout gap)
- Constraints-based positioning with specific distances
Important: In modern Figma and React development, margin is rarely used. Use gap in Flexbox/Grid layouts instead.
Tailwind Mapping:
// Top margin
marginTop: 16px → className="mt-4"
// Horizontal centering
marginX: auto → className="mx-auto"
3. Gap (Spacing Between Items)
Gap is the space between flex or grid items.
Figma Indicators:
- Auto Layout "Spacing between items" value
- Consistent distance between sibling elements in Auto Layout
Extraction Method:
- Select the container with Auto Layout
- Check "Spacing between items" value
- For grid layouts, check both row and column gaps
Tailwind Mapping:
// Uniform gap
gap: 16px → className="gap-4"
// Directional gap (Flexbox column)
gap: 16px → className="gap-y-4" (vertical gap in column layout)
// Grid with different row/column gaps
rowGap: 16px, columnGap: 8px → className="gap-y-4 gap-x-2"
Tailwind Spacing Scale
Understand the Tailwind spacing scale for accurate conversion:
| Tailwind | rem | px (default) |
|---|---|---|
| 0 | 0 | 0 |
| px | 1px | 1px |
| 0.5 | 0.125rem | 2px |
| 1 | 0.25rem | 4px |
| 1.5 | 0.375rem | 6px |
| 2 | 0.5rem | 8px |
| 2.5 | 0.625rem | 10px |
| 3 | 0.75rem | 12px |
| 3.5 | 0.875rem | 14px |
| 4 | 1rem | 16px |
| 5 | 1.25rem | 20px |
| 6 | 1.5rem | 24px |
| 7 | 1.75rem | 28px |
| 8 | 2rem | 32px |
| 9 | 2.25rem | 36px |
| 10 | 2.5rem | 40px |
| 11 | 2.75rem | 44px |
| 12 | 3rem | 48px |
| 14 | 3.5rem | 56px |
| 16 | 4rem | 64px |
| 20 | 5rem | 80px |
| 24 | 6rem | 96px |
| 28 | 7rem | 112px |
| 32 | 8rem | 128px |
Conversion Process
Step 1: Extract Pixel Values from Figma
Use Figma MCP tools to get the design context:
get_design_context → Returns spacing values in the design
Step 2: Convert to Tailwind Classes
-
Exact Match: If the pixel value matches Tailwind scale exactly, use that class
- Example: 16px →
p-4, 24px →p-6
- Example: 16px →
-
Close Match: If within 1-2px, round to nearest Tailwind value
- Example: 15px →
p-4(16px), 23px →p-6(24px)
- Example: 15px →
-
Custom Value: If no close match and pixel-perfect accuracy is required
- Example: 18px →
p-[18px]
- Example: 18px →
-
Design System: If the project has a custom spacing scale, use that
- Check tailwind.config.js for custom spacing values
Step 3: Verify Consistency
Check if spacing is consistent across the design:
- If a spacing value (e.g., 16px) is used frequently, prefer Tailwind's standard scale
- If a spacing value is unique to one component, consider if it's intentional or a design inconsistency
Auto Layout Analysis
Reading Auto Layout Properties
When analyzing a Figma frame with Auto Layout:
-
Direction: Horizontal or Vertical
- Determines
flex-roworflex-col
- Determines
-
Spacing Between Items: Gap value
- Maps to
gap-{size}
- Maps to
-
Padding: Top, Right, Bottom, Left
- Maps to
p-{size},px-{size},py-{size}, or individualpt-/pr-/pb-/pl-
- Maps to
-
Alignment:
- Primary (main) axis: Maps to
justify-{align} - Counter (cross) axis: Maps to
items-{align}
- Primary (main) axis: Maps to
Example Auto Layout Translation
Figma:
Auto Layout: Vertical
Spacing: 16px
Padding: 24px (all sides)
Alignment: Center (counter axis)
React + Tailwind:
<div className="flex flex-col gap-4 p-6 items-center">
{/* children */}
</div>
Nested Spacing
When dealing with nested components:
- Outer Container: Typically has padding
- Inner Container: Typically has gap between children
- Individual Items: Typically have no margin (gap handles spacing)
Example:
{/* Outer container with padding */}
<div className="p-6">
{/* Inner container with gap */}
<div className="flex flex-col gap-4">
{/* Individual items - no margin needed */}
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
</div>
Responsive Spacing
Consider how spacing should adapt to different screen sizes:
{/* Responsive padding: smaller on mobile, larger on desktop */}
<div className="p-4 md:p-6 lg:p-8">
{/* Responsive gap */}
<div className="flex flex-col gap-2 md:gap-4 lg:gap-6">
{/* children */}
</div>
</div>
Common Patterns
Card Spacing
// Typically: padding + gap for internal elements
<div className="p-6 flex flex-col gap-4">
<h2>Title</h2>
<p>Content</p>
</div>
List Spacing
// Typically: gap between items, no margin on items
<ul className="flex flex-col gap-2">
<li>Item 1</li>
<li>Item 2</li>
</ul>
Section Spacing
// Typically: large padding on sections
<section className="py-16 px-8">
{/* content */}
</section>
Pitfalls to Avoid
- Don't use margin when gap is available: In Flexbox/Grid, use
gapinstead of margin on children - Don't mix spacing methods: Stick to one approach (gap vs margin) within a container
- Don't use arbitrary values unnecessarily: Prefer Tailwind's scale when possible for consistency
- Don't forget responsive spacing: Consider how spacing should change across breakpoints
- Don't ignore design system: If the project has custom spacing, use it consistently
Tips
- Inspect carefully: Always check both padding and gap values in Figma
- Use gap by default: Modern Flexbox/Grid layouts should use gap, not margin
- Round to Tailwind scale: Unless pixel-perfect accuracy is required, use standard Tailwind values
- Document custom values: If using arbitrary values like
p-[18px], document why - Check design system: Verify if the project has custom spacing tokens in tailwind.config.js