Skip to main content

Spacing

How space shows what belongs together.

space.gap.tight space.gap.default space.gap.group space.gap.section space.inset.control-x space.inset.container space.inset.cell-x size.row

The five answers​

QuestionAnswerWhy
Which spacing roles does it need?Gaps and insetsNo dense tables, so no row role.
How many densities exist?OneOne calm density.
How are spacing steps defined?Big, even stepsBig, even steps suit long reading.
How dense is the layout?SpaciousRoom around the text helps reading.
Where does spacing matter most?Between paragraphsSpace is spent between paragraphs and sections.

Tokens​

Each token points to another token. Values live only on primitives, below.

TokenPoints to
space.gap.tightspace.8
space.gap.defaultspace.16
space.gap.groupspace.32
space.gap.sectionspace.64
space.inset.control-xspace.20
space.inset.containerspace.24
space.inset.cell-xspace.16
size.rowsize.48

The raw values these tokens end at are on Primitives › Space and size.

The component spacing map​

Inside a component, spacing is a step of this map. Each step is 4px × its multiplier × the scheme's rhythm, rounded to a multiple of 4px, at most 64px. In Content first the rhythm is 1.5. Spacious: room around the text helps reading, so panels and fields breathe; rows stay tight.

Steps that hold still stay at 4px × their multiplier in every scheme. The hairline is a fixed 2px nudge. In code, write the step's utility: p-map-x6, gap-map-x2.

StepMultiplierUtilityToken and value
hairline (holds still)fixed*-map-hairlinecomponent-spacing-map.hairline space.2:2px
x1 (holds still)×1*-map-x1component-spacing-map.x1 space.4:4px
x2 (holds still)×2*-map-x2component-spacing-map.x2 space.8:8px
x3×3*-map-x3component-spacing-map.x3 space.20:20px
x4×4*-map-x4component-spacing-map.x4 space.24:24px
x6×6*-map-x6component-spacing-map.x6 space.36:36px
x8×8*-map-x8component-spacing-map.x8 space.48:48px
x12×12*-map-x12component-spacing-map.x12 space.64:64px

Between things and on the page, use a role instead: *-tight (8px), *-default (16px), *-group (32px), *-section (64px), *-control (20px), *-container (24px), *-cell (16px). A spacing is never a number.

When to use what​

SituationUseNotWhy
Items that belong togetherspace.gap.defaultspace.gap.tightText needs air even inside a group.
Between page sectionsspace.gap.section, no lineA divider lineSpace alone separates sections; lines add noise.
Table row heightsize.row (comfortable)A compact rowRows are read, not scanned.