Spacing Tokens

Consistent spacing scale for margins, padding, and gaps

Spacing Scale

Shift CSS uses a consistent spacing scale based on rem units:

TokenValuePixels (at 16px base)
--s-space-000px
--s-space-px1px1px
--s-space-0.50.125rem2px
--s-space-10.25rem4px
--s-space-1.50.375rem6px
--s-space-20.5rem8px
--s-space-2.50.625rem10px
--s-space-30.75rem12px
--s-space-3.50.875rem14px
--s-space-41rem16px
--s-space-51.25rem20px
--s-space-61.5rem24px
--s-space-71.75rem28px
--s-space-82rem32px
--s-space-92.25rem36px
--s-space-102.5rem40px
--s-space-112.75rem44px
--s-space-123rem48px
--s-space-143.5rem56px
--s-space-164rem64px
--s-space-205rem80px
--s-space-246rem96px

Using Spacing Tokens

In Custom CSS

.my-component {
  padding: var(--s-space-4);
  margin-bottom: var(--s-space-6);
  gap: var(--s-space-2);
}

With Utility Classes

<div class="s-p-4 s-mb-6 s-gap-2">
  Uses spacing scale
</div>

Component Spacing

Components use spacing tokens for internal consistency:

[s-card] {
  --_padding: var(--s-space-4);
}

[s-btn] {
  --_padding-x: var(--s-space-4);
  --_padding-y: var(--s-space-2);
}

[s-input] {
  --_padding-x: var(--s-space-3);
  --_padding-y: var(--s-space-2);
}

Container Width

:root {
  --s-container-max: 80rem;  /* 1280px */
  --s-container-padding: var(--s-space-4);
}

Customizing Spacing

Override Individual Values

:root {
  --s-space-4: 1.25rem;  /* Default: 1rem */
}

Tighter Spacing System

:root {
  --s-space-1: 0.2rem;
  --s-space-2: 0.4rem;
  --s-space-3: 0.6rem;
  --s-space-4: 0.8rem;
}

Looser Spacing System

:root {
  --s-space-1: 0.3rem;
  --s-space-2: 0.6rem;
  --s-space-3: 0.9rem;
  --s-space-4: 1.2rem;
}

Fluid Spacing (Advanced)

For responsive spacing that scales with viewport:

.hero {
  padding: clamp(var(--s-space-4), 5vw, var(--s-space-16));
}

Best Practices

Consistency

Use spacing tokens instead of arbitrary values:

/* Good */
.element {
  margin: var(--s-space-4);
}

/* Avoid */
.element {
  margin: 17px;
}

Vertical Rhythm

Use consistent vertical spacing for readability:

.prose > * + * {
  margin-top: var(--s-space-4);
}

.prose h2 {
  margin-top: var(--s-space-8);
}

Component Boundaries

Use larger spacing between components, smaller within:

.section {
  padding: var(--s-space-16) 0;
}

.section-content {
  gap: var(--s-space-4);
}
Search