Navigation

Tokens

Spacing

One spacing scale for padding, margin, gaps, insets and offsets.

On this page

Classes

ClassDeclarations
p-<name>padding: var(--spacing-<name>);
m-<name>margin: var(--spacing-<name>);
gap-<name>gap: var(--spacing-<name>);
60 more classes
ClassDeclarations
ix-<name>inset-inline: var(--spacing-<name>);
iy-<name>inset-block: var(--spacing-<name>);
mb-<name>margin-bottom: var(--spacing-<name>);
ml-<name>margin-left: var(--spacing-<name>);
mr-<name>margin-right: var(--spacing-<name>);
mt-<name>margin-top: var(--spacing-<name>);
mx-<name>margin-inline: var(--spacing-<name>);
my-<name>margin-block: var(--spacing-<name>);
pb-<name>padding-bottom: var(--spacing-<name>);
pl-<name>padding-left: var(--spacing-<name>);
pr-<name>padding-right: var(--spacing-<name>);
pt-<name>padding-top: var(--spacing-<name>);
px-<name>padding-inline: var(--spacing-<name>);
py-<name>padding-block: var(--spacing-<name>);
ixe-<name>inset-inline-end: var(--spacing-<name>);
ixs-<name>inset-inline-start: var(--spacing-<name>);
iye-<name>inset-block-end: var(--spacing-<name>);
iys-<name>inset-block-start: var(--spacing-<name>);
mxe-<name>margin-inline-end: var(--spacing-<name>);
mxs-<name>margin-inline-start: var(--spacing-<name>);
mye-<name>margin-block-end: var(--spacing-<name>);
mys-<name>margin-block-start: var(--spacing-<name>);
pxe-<name>padding-inline-end: var(--spacing-<name>);
pxs-<name>padding-inline-start: var(--spacing-<name>);
pye-<name>padding-block-end: var(--spacing-<name>);
pys-<name>padding-block-start: var(--spacing-<name>);
top-<name>top: var(--spacing-<name>);
left-<name>left: var(--spacing-<name>);
inset-<name>inset: var(--spacing-<name>);
right-<name>right: var(--spacing-<name>);
bottom-<name>bottom: var(--spacing-<name>);
col-gap-<name>column-gap: var(--spacing-<name>);
row-gap-<name>row-gap: var(--spacing-<name>);
scroll-m-<name>scroll-margin: var(--spacing-<name>);
scroll-p-<name>scroll-padding: var(--spacing-<name>);
scroll-mb-<name>scroll-margin-bottom: var(--spacing-<name>);
scroll-ml-<name>scroll-margin-left: var(--spacing-<name>);
scroll-mr-<name>scroll-margin-right: var(--spacing-<name>);
scroll-mt-<name>scroll-margin-top: var(--spacing-<name>);
scroll-mx-<name>scroll-margin-inline: var(--spacing-<name>);
scroll-my-<name>scroll-margin-block: var(--spacing-<name>);
scroll-pb-<name>scroll-padding-bottom: var(--spacing-<name>);
scroll-pl-<name>scroll-padding-left: var(--spacing-<name>);
scroll-pr-<name>scroll-padding-right: var(--spacing-<name>);
scroll-pt-<name>scroll-padding-top: var(--spacing-<name>);
scroll-px-<name>scroll-padding-inline: var(--spacing-<name>);
scroll-py-<name>scroll-padding-block: var(--spacing-<name>);
translate-<name>translate: var(--spacing-<name>);
scroll-mxe-<name>scroll-margin-inline-end: var(--spacing-<name>);
scroll-mxs-<name>scroll-margin-inline-start: var(--spacing-<name>);
scroll-mye-<name>scroll-margin-block-end: var(--spacing-<name>);
scroll-mys-<name>scroll-margin-block-start: var(--spacing-<name>);
scroll-pxe-<name>scroll-padding-inline-end: var(--spacing-<name>);
scroll-pxs-<name>scroll-padding-inline-start: var(--spacing-<name>);
scroll-pye-<name>scroll-padding-block-end: var(--spacing-<name>);
scroll-pys-<name>scroll-padding-block-start: var(--spacing-<name>);
shape-margin-<name>shape-margin: var(--spacing-<name>);
word-spacing-<name>word-spacing: var(--spacing-<name>);
border-spacing-<name>border-spacing: var(--spacing-<name>);
outline-offset-<name>outline-offset: var(--spacing-<name>);

The family selects the property; the token supplies the distance. px- and mx- use the inline axis, while pl- and ml- use the physical left side. The complete family table lists each native property.

Values

The preset scale uses rem lengths. Pixel equivalents assume a 16px root font size; the browser uses the actual root font size. Use direct-value functions such as p(0) for zero or p(1) for one CSS pixel.

ClassValue
p-4xs.125rem2px
p-3xs.25rem4px
p-2xs.375rem6px
p-xs.5rem8px
p-sm.75rem12px
p-md1rem16px
p-lg1.5rem24px
p-xl2rem32px
p-2xl3rem48px
p-3xl4rem64px
p-4xl6rem96px
p-5xl8rem128px

One distance, different boundaries

p-md and gap-md both read --spacing-md, but padding separates content from its box edge while gap separates items in the layout. A gap does not create outer padding.

Padding surrounds content; gap separates items

Both highlighted distances are 1rem, shown at a 16px root font size. Blue and violet are inspection overlays; p-md and gap-md do not add those colors.

Text description
  1. Both examples use Grid and the preset --spacing-md value of 1rem. Their content rows use the same typography and internal dimensions.
  2. The left example has p-md and no gap. Its blue band lies inside the box edge, surrounding the content on all four sides.
  3. The right example has gap-md and no padding. Its violet band lies only between the two rows, with no matching band around the outside.
  4. At the depicted 16px root font size, each highlighted distance is 16px. The examples use real generated padding and gap; the annotation colors and dashed boundaries are not utility output.

gap-md sets the gap value; it does not enable Grid or Flexbox. Likewise, an inset token sets an offset but does not choose a positioning scheme. The native property and layout determine the effect.

Negative token forms depend on the consumer: -mt-md is accepted, while -p-md is rejected. The preset has no zero or auto spacing token; use m(0) for zero and a fixed utility such as mx-auto for automatic inline margins.

Usage

Pad a form, space its fields and separate each label from its control.

<form class="… grid gap-md p-md">  <label class="… grid gap-2xs">Name<input class="… px-sm py-xs" value="Aron" /></label>  <label class="… grid gap-2xs">Email<input type="email" class="… px-sm py-xs" value="aron@example.com" /></label></form>
Generated CSS
@layer theme {  :root,  :host {    --spacing-2xs: .375rem;    --spacing-xs: .5rem;    --spacing-sm: .75rem;    --spacing-md: 1rem  }}@layer utilities {  .grid {    display: grid  }  .gap-2xs {    gap: var(--spacing-2xs)  }  .gap-md {    gap: var(--spacing-md)  }  .p-md {    padding: var(--spacing-md)  }  .py-xs {    padding-block: var(--spacing-xs)  }  .px-sm {    padding-inline: var(--spacing-sm)  }}

Customize

Change a preset value or add a token: --spacing-card creates p-card, m-card, gap-card and the other spacing classes.

@theme {  --spacing-card: 1.25rem;}
Generated CSS
@layer theme {  :root,  :host {    --spacing-card: 1.25rem  }}@layer utilities {  .p-card {    padding: var(--spacing-card)  }}