Skip to content

Space 间距

给一组元素之间统一加间距。基于 flex 加 gap,不产生多余的包裹层。

基础用法

标签一标签二标签三
vue
<SrSpace>
  <SrTag>标签一</SrTag>
  <SrTag>标签二</SrTag>
  <SrTag>标签三</SrTag>
</SrSpace>

为什么用 gap 而不是给子元素加 margin

早期实现常给每个子元素加 margin-right,再给最后一个去掉。这样有两个问题:

  1. 子元素自身可能也有 margin,两者会叠加,间距变得不可预测;
  2. 换行后最后一行仍有残留间距,右边缘看起来是歪的。

gap 由浏览器保证「只在相邻元素之间」,换行也正确, 且不需要知道有几个子元素。

方向

纵向排列每一项各占一行align="stretch" 让它们等宽
vue
<SrSpace direction="vertical" align="stretch">
  <SrTag>纵向排列</SrTag>
  <SrTag>每一项各占一行</SrTag>
</SrSpace>

间距档位

六档离散值(xs / sm / md / lg / xl)加直接传数字。 离散档位让同一页面里的间距保持一致,避免出现 13px14px 混用。

xs间距很小
md默认档位
xl间距很大
vue
<SrSpace size="xs">…</SrSpace>
<SrSpace size="md">…</SrSpace>
<SrSpace size="xl">…</SrSpace>

<!-- 需要精确值时直接传数字,按 px 处理 -->
<SrSpace :size="13">…</SrSpace>

对齐

align 控制交叉轴对齐(纵向排列时即水平方向),justify 控制主轴对齐。 两者对应 flex 的 align-itemsjustify-content

左侧两端对齐
vue
<SrSpace justify="space-between" align="center">
  <SrTag>左侧</SrTag>
  <SrTag variant="primary">两端对齐</SrTag>
</SrSpace>

align="baseline" 在混排不同字号的文字时很有用——按基线对齐, 比按中心对齐看起来整齐得多。

换行

默认允许换行。wrap="false" 会强制单行,超出的内容需要自己处理溢出。

这一组标签会自动换行因为容器不够宽
vue
<SrSpace>…</SrSpace>
<SrSpace :wrap="false">…</SrSpace>

Props

名称类型默认值说明
direction'horizontal' | 'vertical''horizontal'排列方向
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | number'md'间距,数字按 px 处理
align'start' | 'center' | 'end' | 'baseline' | 'stretch''center'交叉轴对齐
justify'start' | 'center' | 'end' | 'space-between''start'主轴对齐
wrapbooleantrue是否允许换行

插槽

名称说明
default需要加间距的内容,每个直接子元素被视作一项

自用组件库 · 源码分发 · 不发布 npm