Skip to main content
Spacing tokens provide a consistent scale for margins, padding, gaps, and positioning throughout your application.

Spacing Scale

Grauity uses a comprehensive spacing scale from 0px to 160px, with more granular options at smaller sizes and larger jumps for bigger spaces.
All spacing values are defined in pixels for precise control. The scale is designed to work harmoniously with the 8px grid system commonly used in UI design.

Available Tokens

TokenValueUse Case
--spacing-0px0pxNo spacing, reset
--spacing-1px1pxHairline borders, fine adjustments
--spacing-2px2pxMinimal spacing, tight layouts
--spacing-3px3pxBorder widths
--spacing-4px4pxExtra small spacing
--spacing-5px5pxSmall adjustments
--spacing-6px6pxSmall spacing
--spacing-7px7pxFine-tuned spacing
--spacing-8px8pxBase unit, small spacing
--spacing-9px9pxSmall spacing variants
--spacing-10px10pxSmall spacing
--spacing-12px12pxMedium-small spacing
--spacing-14px14pxMedium spacing
--spacing-16px16pxStandard spacing (2× base)
--spacing-18px18pxMedium spacing
--spacing-20px20pxMedium spacing
--spacing-24px24pxLarge spacing (3× base)
--spacing-28px28pxLarge spacing
--spacing-32px32pxExtra large spacing (4× base)
--spacing-36px36pxExtra large spacing
--spacing-40px40pxExtra large spacing (5× base)
--spacing-48px48pxXXL spacing (6× base)
--spacing-56px56pxXXL spacing (7× base)
--spacing-64px64pxXXXL spacing (8× base)
--spacing-72px72pxSection spacing
--spacing-80px80pxSection spacing (10× base)
--spacing-128px128pxLarge section spacing
--spacing-160px160pxExtra large section spacing

Spacing Categories

Micro Spacing (0-7px)

Use for fine adjustments, borders, and tight layouts:
.tight-element {
  padding: var(--spacing-4px);
  gap: var(--spacing-2px);
  border-width: var(--spacing-1px);
}

Small Spacing (8-12px)

Use for compact components and dense layouts:
.compact-button {
  padding: var(--spacing-8px) var(--spacing-12px);
  gap: var(--spacing-8px);
}

Medium Spacing (14-24px)

Use for standard component padding and element separation:
.card {
  padding: var(--spacing-16px);
  gap: var(--spacing-12px);
  margin-bottom: var(--spacing-24px);
}

.form-field {
  margin-bottom: var(--spacing-16px);
}

Large Spacing (28-48px)

Use for section padding and component separation:
.section {
  padding: var(--spacing-32px) var(--spacing-24px);
  margin-bottom: var(--spacing-40px);
}

.container {
  padding: var(--spacing-48px);
}

Extra Large Spacing (56-160px)

Use for page-level spacing and major section separation:
.page-section {
  padding: var(--spacing-64px) 0;
  margin-bottom: var(--spacing-80px);
}

.hero-section {
  padding: var(--spacing-128px) 0;
}

Common Patterns

Component Padding

/* Small component */
.small-component {
  padding: var(--spacing-8px) var(--spacing-12px);
}

/* Medium component */
.medium-component {
  padding: var(--spacing-12px) var(--spacing-16px);
}

/* Large component */
.large-component {
  padding: var(--spacing-16px) var(--spacing-24px);
}

Stack Spacing

Use for vertical spacing between stacked elements:
/* Tight stack */
.tight-stack > * + * {
  margin-top: var(--spacing-8px);
}

/* Default stack */
.stack > * + * {
  margin-top: var(--spacing-16px);
}

/* Loose stack */
.loose-stack > * + * {
  margin-top: var(--spacing-24px);
}

Grid Gaps

/* Tight grid */
.tight-grid {
  display: grid;
  gap: var(--spacing-8px);
}

/* Standard grid */
.grid {
  display: grid;
  gap: var(--spacing-16px);
}

/* Spacious grid */
.spacious-grid {
  display: grid;
  gap: var(--spacing-24px);
}

Flex Gaps

/* Icon + text */
.icon-text {
  display: flex;
  align-items: center;
  gap: var(--spacing-8px);
}

/* Button group */
.button-group {
  display: flex;
  gap: var(--spacing-12px);
}

/* Form actions */
.form-actions {
  display: flex;
  gap: var(--spacing-16px);
}

Responsive Spacing

Adjust spacing based on viewport size:
.responsive-section {
  padding: var(--spacing-24px) var(--spacing-16px);
}

@media (min-width: 768px) {
  .responsive-section {
    padding: var(--spacing-48px) var(--spacing-32px);
  }
}

@media (min-width: 1024px) {
  .responsive-section {
    padding: var(--spacing-64px) var(--spacing-48px);
  }
}

React Component Examples

Using Spacing Tokens

import styled from 'styled-components';

const Card = styled.div`
  padding: var(--spacing-16px);
  border-radius: var(--corner-radius-8px);
  background: var(--bg-subtle-primary-default);
  border: var(--spacing-1px) solid var(--border-subtle-primary-default);
`;

const Stack = styled.div`
  display: flex;
  flex-direction: column;
  gap: var(--spacing-16px);
`;

const ButtonGroup = styled.div`
  display: flex;
  gap: var(--spacing-12px);
  margin-top: var(--spacing-24px);
`;

Dynamic Spacing

import styled from 'styled-components';

const Box = styled.div`
  padding: var(--spacing-${props => props.size === 'small' ? '8px' : props.size === 'large' ? '24px' : '16px'});
`;

// Usage
<Box size="small">Compact box</Box>
<Box>Default box</Box>
<Box size="large">Spacious box</Box>

Spacing Component

import styled from 'styled-components';

const Spacer = styled.div`
  height: var(--spacing-${props => props.size || '16px'});
`;

// Usage
<div>
  <Section>Content A</Section>
  <Spacer size="32px" />
  <Section>Content B</Section>
</div>

Best Practices

Consistency

Always use spacing tokens instead of arbitrary values:
/* ❌ Don't */
.element {
  padding: 15px;
  margin: 23px;
}

/* ✅ Do */
.element {
  padding: var(--spacing-16px);
  margin: var(--spacing-24px);
}

Alignment with Grid

Prefer spacing values that align with the 8px grid (8, 16, 24, 32, 40, 48, 56, 64, 72, 80):
/* Better for grid alignment */
.section {
  padding: var(--spacing-32px) 0;
  margin-bottom: var(--spacing-48px);
}

Proportional Spacing

Maintain proportional relationships:
.card {
  /* Vertical padding is larger than horizontal */
  padding: var(--spacing-24px) var(--spacing-16px);
}

.button {
  /* Horizontal padding is larger than vertical */
  padding: var(--spacing-10px) var(--spacing-16px);
}

Semantic Usage

Use larger spacing to indicate hierarchy:
/* Within component - smaller gaps */
.form-field {
  margin-bottom: var(--spacing-12px);
}

/* Between components - medium gaps */
.component {
  margin-bottom: var(--spacing-24px);
}

/* Between sections - larger gaps */
.section {
  margin-bottom: var(--spacing-64px);
}

Source Files

  • Spacing Tokens: ui/themes/GlobalStyle.ts (lines 99-126)
  • Stories: stories/atoms/Spacing/index.stories.tsx

Build docs developers (and LLMs) love