Skip to content

Spacing

Empathy DS uses Tailwind CSS's spacing scale for consistent layout and component spacing.

Spacing Scale

The spacing scale is based on a 4px (0.25rem) unit:

ClassValuePixelsUsage
000pxNo spacing
px1px1pxHairline borders
0.50.125rem2pxMicro spacing
10.25rem4pxTight spacing
1.50.375rem6px-
20.5rem8pxSmall gaps
2.50.625rem10px-
30.75rem12px-
41rem16pxStandard spacing
51.25rem20px-
61.5rem24pxMedium spacing
82rem32pxLarge spacing
102.5rem40px-
123rem48pxSection spacing
164rem64pxLarge sections
205rem80px-
246rem96pxExtra large

Common Patterns

Component Padding

ComponentPaddingExample
Button (sm)px-3 py-1.5Small button
Button (default)px-4 py-2Default button
Button (lg)px-6 py-3Large button
Cardp-6Card content
Dialogp-6Dialog content
Inputpx-3 py-2Input field

Gaps Between Elements

GapUsage
gap-1 (4px)Icon + text in buttons
gap-2 (8px)Inline form elements
gap-4 (16px)Form field groups
gap-6 (24px)Card sections
gap-8 (32px)Page sections

Usage Examples

Form Layout

vue
<template>
  <form class="space-y-4">
    <div class="space-y-2">
      <Label>Email</Label>
      <Input type="email" />
    </div>
    
    <div class="space-y-2">
      <Label>Password</Label>
      <Input type="password" />
    </div>
    
    <Button class="w-full">Sign In</Button>
  </form>
</template>

Card Layout

vue
<template>
  <Card>
    <CardHeader class="space-y-1.5">
      <CardTitle>Card Title</CardTitle>
      <CardDescription>Supporting text</CardDescription>
    </CardHeader>
    <CardContent class="space-y-4">
      <p>Content goes here...</p>
    </CardContent>
    <CardFooter class="gap-2">
      <Button variant="outline">Cancel</Button>
      <Button>Save</Button>
    </CardFooter>
  </Card>
</template>

Flex with Gap

vue
<template>
  <!-- Horizontal items with gap -->
  <div class="flex items-center gap-2">
    <Avatar />
    <span>Username</span>
  </div>
  
  <!-- Button group -->
  <div class="flex gap-2">
    <Button variant="outline">Cancel</Button>
    <Button>Confirm</Button>
  </div>
</template>

Grid Layout

vue
<template>
  <!-- Dashboard grid -->
  <div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
    <Card>...</Card>
    <Card>...</Card>
    <Card>...</Card>
  </div>
</template>

Spacing Utilities

Margin

vue
<template>
  <div class="mt-4">Top margin</div>
  <div class="mb-4">Bottom margin</div>
  <div class="mx-4">Horizontal margin</div>
  <div class="my-4">Vertical margin</div>
  <div class="m-4">All sides margin</div>
</template>

Padding

vue
<template>
  <div class="pt-4">Top padding</div>
  <div class="pb-4">Bottom padding</div>
  <div class="px-4">Horizontal padding</div>
  <div class="py-4">Vertical padding</div>
  <div class="p-4">All sides padding</div>
</template>

Space Between (Stack)

vue
<template>
  <!-- Vertical stack with consistent spacing -->
  <div class="space-y-4">
    <div>Item 1</div>
    <div>Item 2</div>
    <div>Item 3</div>
  </div>
  
  <!-- Horizontal with spacing -->
  <div class="flex space-x-2">
    <Button>One</Button>
    <Button>Two</Button>
  </div>
</template>

Best Practices

  1. Use gap over margins for flex/grid layouts

  2. Use space-y/x for stacks of elements

  3. Use consistent scale values - prefer 2, 4, 6, 8 over arbitrary values

  4. Match padding to component size:

    • Small components: 2-3 (8-12px)
    • Medium components: 4-6 (16-24px)
    • Large sections: 8-12 (32-48px)
  5. Use responsive spacing when needed:

    vue
    <div class="p-4 md:p-6 lg:p-8">
      Responsive padding
    </div>