Spacing
One spacing scale for padding, margin, gaps, insets and offsets.
On this page
Classes
| Class | Declarations |
|---|---|
p-<name> | padding: var(--spacing-<name>); |
m-<name> | margin: var(--spacing-<name>); |
gap-<name> | gap: var(--spacing-<name>); |
60 more classes
| Class | Declarations |
|---|---|
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.
| Class | Value |
|---|---|
p-4xs | .125rem2px |
p-3xs | .25rem4px |
p-2xs | .375rem6px |
p-xs | .5rem8px |
p-sm | .75rem12px |
p-md | 1rem16px |
p-lg | 1.5rem24px |
p-xl | 2rem32px |
p-2xl | 3rem48px |
p-3xl | 4rem64px |
p-4xl | 6rem96px |
p-5xl | 8rem128px |
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
- Both examples use Grid and the preset --spacing-md value of 1rem. Their content rows use the same typography and internal dimensions.
- The left example has p-md and no gap. Its blue band lies inside the box edge, surrounding the content on all four sides.
- 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.
- 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.
See negative values and direct values and native gap behavior.
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) }}See theme directives and Layout.

