Skip to main contentSkip to docs navigation

Responsive utilities for applying padding on all sides, axes, or individual edges using the Chassis spacing scale.

@layer utilities
MDN Reference
Scoped tokens

Overview

Padding utilities apply the CSS padding property and its logical shorthand variants. All classes are responsive by default and cover all four sides at once, an axis (inline or block), or a single edge.

Notation

Padding classes that apply at all breakpoints have no breakpoint prefix — they start from min-width: 0 and are not media-query-bound. Breakpoint-prefixed classes apply at that breakpoint and above.

The classes are named using the format p{sides}-{size} for xsmall and {breakpoint}:p{sides}-{size} for small, medium, large, xlarge, and 2xlarge.

Where sides is one of:

  • xpadding-inline (both inline edges)
  • ypadding-block (both block edges)
  • tpadding-block-start
  • bpadding-block-end
  • spadding-inline-start
  • epadding-inline-end
  • (blank) — padding on all four sides

Where size is one of:

  • zero or 0 — eliminates padding by setting it to 0
  • 4xsmall — default token value is 0.0625rem (1px).
  • 3xsmall — default token value is 0.125rem (2px).
  • 2xsmall — default token value is 0.25rem (4px).
  • xsmall — default token value is 0.5rem (8px).
  • medium — default token value is 1rem (16px).
  • large — default token value is 1.25rem (20px).
  • xlarge — default token value is 1.5rem (24px).
  • 2xlarge — default token value is 1.75rem (28px).
  • 3xlarge — default token value is 2rem (32px).
  • 4xlarge — default token value is 2.25rem (36px).
  • 5xlarge — default token value is 2.5rem (40px).
  • 6xlarge — default token value is 3rem (48px).

Additional sizes can be added by adding entries to the $spaces Sass map.

All sides

.p-{size} sets padding on all four sides of an element at once.

p-xsmall
p-small
p-medium
p-large
HTML
<div class="p-xsmall">p-xsmall</div>
<div class="p-small">p-small</div>
<div class="p-medium">p-medium</div>
<div class="p-large">p-large</div>

Axes

Axis utilities apply padding to two opposite edges simultaneously. .px-{size} targets both inline edges; .py-{size} targets both block edges.

px-large, py-xsmall
px-xsmall, py-large
HTML
<div class="px-large py-xsmall">px-large, py-xsmall</div>
<div class="px-xsmall py-large">px-xsmall, py-large</div>

Individual edges

Single-edge utilities set padding on one edge without affecting the others.

pt-large
pb-large
ps-large
pe-large
HTML
<div class="pt-large">pt-large</div>
<div class="pb-large">pb-large</div>
<div class="ps-large">ps-large</div>
<div class="pe-large text-end">pe-large</div>

Responsive padding

Prefix any padding class with a breakpoint to apply it at that breakpoint and above. Unprefixed classes apply from xsmall up.

p-xsmall, then p-large from medium up
HTML
<div class="p-xsmall medium:p-large">p-xsmall, then p-large from medium up</div>

CSS

Padding utilities are generated via the utilities API in scss/utilities/_padding.scss.

Reference

The table lists all padding utilities and their CSS properties.

ClassProperties
.p-zeropadding: var(--cx-space-zero);
.p-4xsmallpadding: var(--cx-space-4xsmall);
.p-3xsmallpadding: var(--cx-space-3xsmall);
.p-2xsmallpadding: var(--cx-space-2xsmall);
.p-xsmallpadding: var(--cx-space-xsmall);
.p-smallpadding: var(--cx-space-small);
.p-mediumpadding: var(--cx-space-medium);
.p-largepadding: var(--cx-space-large);
.p-xlargepadding: var(--cx-space-xlarge);
.p-2xlargepadding: var(--cx-space-2xlarge);
.p-3xlargepadding: var(--cx-space-3xlarge);
.p-4xlargepadding: var(--cx-space-4xlarge);
.p-5xlargepadding: var(--cx-space-5xlarge);
.p-6xlargepadding: var(--cx-space-6xlarge);
.p-0padding: 0;
.px-zeropadding-inline: var(--cx-space-zero);
.px-4xsmallpadding-inline: var(--cx-space-4xsmall);
.px-3xsmallpadding-inline: var(--cx-space-3xsmall);
.px-2xsmallpadding-inline: var(--cx-space-2xsmall);
.px-xsmallpadding-inline: var(--cx-space-xsmall);
.px-smallpadding-inline: var(--cx-space-small);
.px-mediumpadding-inline: var(--cx-space-medium);
.px-largepadding-inline: var(--cx-space-large);
.px-xlargepadding-inline: var(--cx-space-xlarge);
.px-2xlargepadding-inline: var(--cx-space-2xlarge);
.px-3xlargepadding-inline: var(--cx-space-3xlarge);
.px-4xlargepadding-inline: var(--cx-space-4xlarge);
.px-5xlargepadding-inline: var(--cx-space-5xlarge);
.px-6xlargepadding-inline: var(--cx-space-6xlarge);
.px-0padding-inline: 0;
.py-zeropadding-block: var(--cx-space-zero);
.py-4xsmallpadding-block: var(--cx-space-4xsmall);
.py-3xsmallpadding-block: var(--cx-space-3xsmall);
.py-2xsmallpadding-block: var(--cx-space-2xsmall);
.py-xsmallpadding-block: var(--cx-space-xsmall);
.py-smallpadding-block: var(--cx-space-small);
.py-mediumpadding-block: var(--cx-space-medium);
.py-largepadding-block: var(--cx-space-large);
.py-xlargepadding-block: var(--cx-space-xlarge);
.py-2xlargepadding-block: var(--cx-space-2xlarge);
.py-3xlargepadding-block: var(--cx-space-3xlarge);
.py-4xlargepadding-block: var(--cx-space-4xlarge);
.py-5xlargepadding-block: var(--cx-space-5xlarge);
.py-6xlargepadding-block: var(--cx-space-6xlarge);
.py-0padding-block: 0;
.pt-zeropadding-block-start: var(--cx-space-zero);
.pt-4xsmallpadding-block-start: var(--cx-space-4xsmall);
.pt-3xsmallpadding-block-start: var(--cx-space-3xsmall);
.pt-2xsmallpadding-block-start: var(--cx-space-2xsmall);
.pt-xsmallpadding-block-start: var(--cx-space-xsmall);
.pt-smallpadding-block-start: var(--cx-space-small);
.pt-mediumpadding-block-start: var(--cx-space-medium);
.pt-largepadding-block-start: var(--cx-space-large);
.pt-xlargepadding-block-start: var(--cx-space-xlarge);
.pt-2xlargepadding-block-start: var(--cx-space-2xlarge);
.pt-3xlargepadding-block-start: var(--cx-space-3xlarge);
.pt-4xlargepadding-block-start: var(--cx-space-4xlarge);
.pt-5xlargepadding-block-start: var(--cx-space-5xlarge);
.pt-6xlargepadding-block-start: var(--cx-space-6xlarge);
.pt-0padding-block-start: 0;
.pe-zeropadding-inline-end: var(--cx-space-zero);
.pe-4xsmallpadding-inline-end: var(--cx-space-4xsmall);
.pe-3xsmallpadding-inline-end: var(--cx-space-3xsmall);
.pe-2xsmallpadding-inline-end: var(--cx-space-2xsmall);
.pe-xsmallpadding-inline-end: var(--cx-space-xsmall);
.pe-smallpadding-inline-end: var(--cx-space-small);
.pe-mediumpadding-inline-end: var(--cx-space-medium);
.pe-largepadding-inline-end: var(--cx-space-large);
.pe-xlargepadding-inline-end: var(--cx-space-xlarge);
.pe-2xlargepadding-inline-end: var(--cx-space-2xlarge);
.pe-3xlargepadding-inline-end: var(--cx-space-3xlarge);
.pe-4xlargepadding-inline-end: var(--cx-space-4xlarge);
.pe-5xlargepadding-inline-end: var(--cx-space-5xlarge);
.pe-6xlargepadding-inline-end: var(--cx-space-6xlarge);
.pe-0padding-inline-end: 0;
.pb-zeropadding-block-end: var(--cx-space-zero);
.pb-4xsmallpadding-block-end: var(--cx-space-4xsmall);
.pb-3xsmallpadding-block-end: var(--cx-space-3xsmall);
.pb-2xsmallpadding-block-end: var(--cx-space-2xsmall);
.pb-xsmallpadding-block-end: var(--cx-space-xsmall);
.pb-smallpadding-block-end: var(--cx-space-small);
.pb-mediumpadding-block-end: var(--cx-space-medium);
.pb-largepadding-block-end: var(--cx-space-large);
.pb-xlargepadding-block-end: var(--cx-space-xlarge);
.pb-2xlargepadding-block-end: var(--cx-space-2xlarge);
.pb-3xlargepadding-block-end: var(--cx-space-3xlarge);
.pb-4xlargepadding-block-end: var(--cx-space-4xlarge);
.pb-5xlargepadding-block-end: var(--cx-space-5xlarge);
.pb-6xlargepadding-block-end: var(--cx-space-6xlarge);
.pb-0padding-block-end: 0;
.ps-zeropadding-inline-start: var(--cx-space-zero);
.ps-4xsmallpadding-inline-start: var(--cx-space-4xsmall);
.ps-3xsmallpadding-inline-start: var(--cx-space-3xsmall);
.ps-2xsmallpadding-inline-start: var(--cx-space-2xsmall);
.ps-xsmallpadding-inline-start: var(--cx-space-xsmall);
.ps-smallpadding-inline-start: var(--cx-space-small);
.ps-mediumpadding-inline-start: var(--cx-space-medium);
.ps-largepadding-inline-start: var(--cx-space-large);
.ps-xlargepadding-inline-start: var(--cx-space-xlarge);
.ps-2xlargepadding-inline-start: var(--cx-space-2xlarge);
.ps-3xlargepadding-inline-start: var(--cx-space-3xlarge);
.ps-4xlargepadding-inline-start: var(--cx-space-4xlarge);
.ps-5xlargepadding-inline-start: var(--cx-space-5xlarge);
.ps-6xlargepadding-inline-start: var(--cx-space-6xlarge);
.ps-0padding-inline-start: 0;

Sass maps

Padding utilities are generated from Sass maps in scss/maps/_spacing.scss.

$spaces: (
  zero:           $space-zero,
  4xsmall:        $space-4xsmall,
  3xsmall:        $space-3xsmall,
  2xsmall:        $space-2xsmall,
  xsmall:         $space-xsmall,
  small:          $space-small,
  medium:         $space-medium,
  large:          $space-large,
  xlarge:         $space-xlarge,
  2xlarge:        $space-2xlarge,
  3xlarge:        $space-3xlarge,
  4xlarge:        $space-4xlarge,
  5xlarge:        $space-5xlarge,
  6xlarge:        $space-6xlarge,
);

$-padding-values is derived from $spaces in scss/utilities/_padding.scss, resolving each spacing key to its :root custom property via var(--space-*), plus 0.

// Build a padding values map from $spaces. Each key maps to its :root spacing variable, plus 0.
$-padding-values: map.merge(map-loop($spaces, varify, "$key", "space"), (0: 0));

Utilities API

Padding utilities are declared in scss/utilities/_padding.scss using the utilities API.

"padding": (
  responsive: true,
  property: padding,
  class: p,
  values: $-padding-values
),
"padding-x": (
  responsive: true,
  property: padding-inline,
  class: px,
  values: $-padding-values
),
"padding-y": (
  responsive: true,
  property: padding-block,
  class: py,
  values: $-padding-values
),
"padding-top": (
  responsive: true,
  property: padding-block-start,
  class: pt,
  values: $-padding-values
),
"padding-end": (
  responsive: true,
  property: padding-inline-end,
  class: pe,
  values: $-padding-values
),
"padding-bottom": (
  responsive: true,
  property: padding-block-end,
  class: pb,
  values: $-padding-values
),
"padding-start": (
  responsive: true,
  property: padding-inline-start,
  class: ps,
  values: $-padding-values
),