UI Design System
build dev

Flex

沿主轴和交叉轴排列对象。中文惯用名:弹性布局。
稳定本期新增已接入

元信息

字段值
规范 IDcomponent.flex
名称Flex
二级分类布局(layout)
用途沿主轴和交叉轴排列对象
描述中文惯用名:弹性布局。

预览

静态结构:渲染为 <div data-slot="flex">(class flex);direction=vertical 追加 flex-col;gap 缺省应用默认间距令牌 gap-(--flex-gap),命名档位 small / middle / large 读 --flex-gap-sm / md / lg 令牌,数字 gap 与 style 合并内联(gap: 0 显式关闭);justify / align 映射 Tailwind 工具类(justify-start|center|end|between|around|evenly、items-start|center|end|baseline|stretch)。

DSL 结构

DslNode
{
  "type": "Flex",
  "props": {
    "justify": "space-between",
    "align": "center",
    "gap": 12
  },
  "children": [
    {
      "type": "Text",
      "props": {
        "text": "左区"
      }
    },
    {
      "type": "Text",
      "props": {
        "text": "中区"
      }
    },
    {
      "type": "Text",
      "props": {
        "text": "右区"
      }
    }
  ]
}

何时用

何时使用

  • 一维排列与对齐:两端对齐(space-between)、居中、纵向堆叠、基线对齐。
  • 区块内的工具条 / 操作行:左标题右操作、图标 + 文本组合。
  • 需要给子项分配伸缩权重:子项 style 里写 flex 值(配合 style 逃逸口)。

何时不用

  • 只需一组相邻元素的一致间距:使用 Space(语义更窄、只表达间距)。
  • 整页 / 区块栅格等宽分列:使用 Grid。
  • 面板可拖拽分割:使用 Splitter / Resizable。

变体

变体视觉形态适用场景
两端对齐justify="space-between" 撑满主轴区块头部:左标题 + 右操作
居中对齐justify="center" + align="center"空态、占位、单行动作区
纵向堆叠direction="vertical"(flex-col)紧凑表单行、卡片内文本块
命名间距档gap="small""middle"

API 属性

属性类型默认值说明
direction`'horizontal''vertical'`'horizontal'
gap`number'small''middle'
justify`'start''center''end'
align`'start''center''end'
className / stylestring / CSSProperties—通用:根节点 class 合并 / 内联样式(布局逃逸口,如 { flex: 1 };与数字 gap 合并)
childrenDslNode[]—子项(DSL 子树;子项的伸缩权重写在各自 style 上)

使用规范

  • 间距优先用命名档位(读令牌),皮肤切换时自动跟随;像素值只用于对齐视觉稿。
  • 交叉轴对齐显式声明(图标 + 文本常用 align="center"),不依赖默认 stretch。
  • 子项需要占满剩余宽度时给子项 style 写 flex,而不是给 Flex 加额外包装层。
  • 同一行的 Flex 嵌套不超过两层,层级过深改用 Grid 一次分好。

正例

  • ✓ 卡片头部:Flex justify="space-between" align="center",左侧标题右侧操作。
  • ✓ 空态:Flex direction="vertical" align="center" gap="middle" 居中排图标与文案。

反例

  • ✕ 用 Flex + 手写 margin 替代 Space 表达相邻元素间距。
  • ✕ 用 Flex 做整页等宽多列栅格(应使用 Grid)。

Design Token 映射

不适用:组件 tokenRefs 为空:样式 Token 数据尚未接入,三层映射(Primitive → Semantic → Component)待样式 Token 接入后回填。