设计令牌
间距
用同一套间距尺度设置 padding、margin、gap、inset 和偏移。
本页内容
类
| 类 | 声明 |
|---|---|
p-<name> | padding: var(--spacing-<name>); |
m-<name> | margin: var(--spacing-<name>); |
gap-<name> | gap: var(--spacing-<name>); |
其他 60 个类
| 类 | 声明 |
|---|---|
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>); |
族决定属性,令牌提供距离。px- 和 mx- 使用行内轴,pl- 和 ml- 则使用物理左侧。完整族表列出各自对应的原生属性。
值
预设尺度使用 rem 长度。像素换算假设根元素字号为 16px;浏览器使用实际的根元素字号。需要零或一个 CSS 像素时,可使用 p(0) 或 p(1) 这类直接值函数。
| 类 | 值 |
|---|---|
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 |
距离相同,作用的边界不同
p-md 和 gap-md 都读取 --spacing-md,但 padding 分隔内容与盒子边缘,gap 则分隔布局中的项目。gap 不会在外围产生 padding。
padding 包围内容,gap 分隔项目
两个标示的距离都是 1rem,以 16px 的根元素字号呈现。蓝色和紫色是检查用的叠加标注,p-md 与 gap-md 不会添加这些颜色。
文字说明
- 两个示例都使用 Grid,以及预设的 --spacing-md 值 1rem。内容行的文字排版与内部尺寸相同。
- 左侧示例使用 p-md,没有 gap。蓝色区域位于盒子边缘内侧,从四个方向包围内容。
- 右侧示例使用 gap-md,没有 padding。紫色区域只位于两行之间,外围没有对应的区域。
- 图中根元素字号为 16px,因此每个标示距离都是 16px。示例使用实际生成的 padding 与 gap,但标注颜色和虚线边界不是工具类的输出。
gap-md 只设置间隙值,不会启用 Grid 或 Flexbox。同样,inset 令牌只设置偏移量,不会选择定位方式。实际效果由原生属性和布局决定。
能否使用负值令牌形式取决于读取它的属性:-mt-md 合法,-p-md 则被拒绝。预设没有 zero 或 auto 间距令牌;零值可用 m(0),行内轴自动外边距则可用 mx-auto 这类固定工具类。
用法
为表单添加内边距、拉开字段间距,并分隔每个标签与控件。
<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>生成的 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) }}自定义
修改预设值或添加令牌:--spacing-card 会创建 p-card、m-card、gap-card 和其他间距类。
@theme { --spacing-card: 1.25rem;}生成的 CSS
@layer theme { :root, :host { --spacing-card: 1.25rem }}@layer utilities { .p-card { padding: var(--spacing-card) }}
