Spacing Tokens
Consistent spacing scale for margins, padding, and gaps
Spacing Scale
Shift CSS uses a consistent spacing scale based on rem units:
| Token | Value | Pixels (at 16px base) |
|---|---|---|
--s-space-0 | 0 | 0px |
--s-space-px | 1px | 1px |
--s-space-0.5 | 0.125rem | 2px |
--s-space-1 | 0.25rem | 4px |
--s-space-1.5 | 0.375rem | 6px |
--s-space-2 | 0.5rem | 8px |
--s-space-2.5 | 0.625rem | 10px |
--s-space-3 | 0.75rem | 12px |
--s-space-3.5 | 0.875rem | 14px |
--s-space-4 | 1rem | 16px |
--s-space-5 | 1.25rem | 20px |
--s-space-6 | 1.5rem | 24px |
--s-space-7 | 1.75rem | 28px |
--s-space-8 | 2rem | 32px |
--s-space-9 | 2.25rem | 36px |
--s-space-10 | 2.5rem | 40px |
--s-space-11 | 2.75rem | 44px |
--s-space-12 | 3rem | 48px |
--s-space-14 | 3.5rem | 56px |
--s-space-16 | 4rem | 64px |
--s-space-20 | 5rem | 80px |
--s-space-24 | 6rem | 96px |
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);
}