3.7 KiB
3.7 KiB
title, description
| title | description |
|---|---|
| Space 间距 | 为一组内联元素设置统一间距,并支持插入分隔符 |
Space 间距
Space 给一组子元素之间加统一间距,省去给每个元素写 margin 的麻烦。
Space 与 Grid 的分工:Space 面向「一行内联元素的等距排列」(按钮行、标签行、操作区),会给每个子元素包一层包装以支持分隔符与空节点隐藏;整块页面布局请用 Grid 栅格。
何时使用
- 一排按钮 / 标签 / 文字之间需要统一间距时;
- 需要在元素之间插入分隔符(
|、·)时; - 子元素数量不确定、其中有条件渲染的节点时(空节点不会占位)。
基础用法
默认水平排列、间距 small(8px)、交叉轴居中对齐。
间距大小
size 支持三种写法:预设名 small / middle / large、数字(按 px 处理)、以及 [水平, 垂直] 数组。
| 写法 | 效果 |
|---|---|
size="small" |
8px |
size="middle" |
16px(默认档,常用于行内) |
size="large" |
24px |
:size="12" |
12px |
:size="[16, 8]" |
列间距 16px、行间距 8px(配合 wrap 用) |
纵向排列
vertical 是简写;orientation 与它同时配置时,以 orientation 优先(这样上层组件透传 orientation 时不会被 vertical 覆盖)。
分隔符
#separator 插槽会在相邻子元素之间插入内容,不会在首尾添加。
自动换行
wrap 只在水平方向生效;配合 [水平, 垂直] 形式的 size 可以分别控制列间距与行间距。
空节点不占位
v-if 关闭的节点、注释节点不会被计入间距,因此条件渲染不会留下空隙。
API
Props
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
size |
'small' | 'middle' | 'large' | number | string | [SpaceSize, SpaceSize] |
'small' |
间距。数组按 [水平, 垂直] 解析;数字按 px;其他字符串原样透传给 column-gap / row-gap |
orientation |
'horizontal' | 'vertical' |
由 vertical 决定 |
排列方向。优先级高于 vertical |
vertical |
boolean |
false |
纵向排列的简写 |
align |
'start' | 'end' | 'center' | 'baseline' |
水平方向 'center',纵向不设置 |
交叉轴对齐(align-items) |
wrap |
boolean |
false |
是否自动换行,仅水平方向生效 |
Slots
| 名称 | 参数 | 说明 |
|---|---|---|
default |
— | 间距容器内的元素。每个有效子节点会被包一层 g3-space__item |
separator |
— | 相邻元素之间插入的分隔内容 |
类型定义
export type SpaceSize = 'small' | 'middle' | 'large' | number | string
export type SpaceOrientation = 'horizontal' | 'vertical'
export type SpaceAlign = 'start' | 'end' | 'center' | 'baseline'
export interface SpaceProps {
size?: SpaceSize | [SpaceSize, SpaceSize]
orientation?: SpaceOrientation
vertical?: boolean
align?: SpaceAlign
wrap?: boolean
}
实现说明
- 间距用 CSS 的
gap实现(column-gap/row-gap),因此不依赖子元素是否有 margin,也不会出现「相邻 margin 合并」的问题; - 子元素会被包一层
inline-flex的g3-space__item,这让分隔符有落点,同时过滤掉注释 / 文本空节点; - 纵向排列时默认不设置
align(即stretch),这样「撑满宽度」的按钮才不会被压成内容宽度;需要居中时显式传align="center"。