UI Design System
build dev

Resizable

调整单个区域或对象尺寸。中文惯用名:尺寸调整。
稳定本期新增已接入

元信息

字段值
规范 IDcomponent.resizable
名称Resizable
二级分类布局(layout)
用途调整单个区域或对象尺寸
描述中文惯用名:尺寸调整。

预览

静态结构:本预览为纵向三面板——PanelGroup(data-slot="resizable-panel-group",vertical 时 flex-col)内依次为 Panel(data-slot="resizable-panel")+ 手柄(data-slot="resizable-handle")+ Panel + 手柄 + Panel;每个 Panel 内的 children 经 renderChildren 渲染 DSL 子树;defaultSize 按百分比解释(本预览 30% / 自适应 / 25%),同项提供 defaultSizePx 时像素优先;minSizePx / maxSizePx 以像素串写入手柄约束的最小 / 最大尺寸。

DSL 结构

DslNode
{
  "type": "Resizable",
  "props": {
    "direction": "vertical",
    "panels": [
      {
        "defaultSize": 30,
        "children": [
          {
            "type": "Text",
            "props": {
              "text": "面板一",
              "style": {
                "display": "block",
                "padding": 8
              }
            }
          }
        ]
      },
      {
        "children": [
          {
            "type": "Text",
            "props": {
              "text": "面板二(纵向排列,手柄可拖拽)",
              "style": {
                "display": "block",
                "padding": 8
              }
            }
          }
        ]
      },
      {
        "defaultSize": 25,
        "children": [
          {
            "type": "Text",
            "props": {
              "text": "面板三",
              "style": {
                "display": "block",
                "padding": 8
              }
            }
          }
        ]
      }
    ]
  }
}

何时用

何时使用

  • 调整单个区域或对象的尺寸:检查器、底部终端、侧边抽屉式区域。
  • 需要像素级尺寸约束:minSizePx / maxSizePx 限定可拖范围,defaultSizePx 给定初始像素尺寸。
  • 纵向 / 多面板组合需要自由尺寸分配(不按固定比例)。

何时不用

  • 把工作区拆成左右面板 / 上下分区(固定分割条的分栏口径):使用 Splitter(同一适配器,语义更贴切)。
  • 不需要拖拽的固定分割:使用 Separator。
  • 需要收起 / 展开而非拖拽调尺寸:使用 Sider 的 collapsed 受控折叠或 Collapsible。

变体

变体视觉形态适用场景
纵向三面板上下堆叠 + 两道横向手柄代码 / 输出 / 日志三段式工作区
像素初始尺寸defaultSizePx 指定初始像素宽高侧栏需要固定初始宽度而非比例
尺寸约束minSizePx / maxSizePx 夹逼拖拽范围防止区域被拖到不可用或撑破布局
水平两面板direction 缺省 horizontal主区 + 检查器并列

API 属性

属性类型默认值说明
panelsResizablePanelData[][]面板列表:{ children?, defaultSize?(百分比 0-100), defaultSizePx?, minSizePx?, maxSizePx? }
direction`'horizontal''vertical'`'horizontal'
className / stylestring / CSSProperties—通用:根节点 class 合并 / 内联样式

使用规范

  • 同一面板的 defaultSize 与 defaultSizePx 不要同时给:像素优先,比例会被忽略,容易与预期不符。
  • minSizePx 按内容最小可用宽度设定(如表格至少 320px),避免拖到无法阅读。
  • 多面板时首尾面板给尺寸、中间面板自适应,比例关系最稳定。
  • 尺寸变化不参与数据流:拖拽结果不写回 state(除非产品明确要求记忆布局)。

正例

  • ✓ 开发工作台:上代码(defaultSize 30%)+ 中预览 + 下日志(defaultSize 25%)。
  • ✓ 主区 + 右侧检查器:defaultSizePx 320 且 minSizePx 240,保证检查器可用宽度。

反例

  • ✕ 给每个面板都写死百分比且总和不为 100(拖拽后比例跳变)。
  • ✕ 在高度不定的容器里使用(分栏区高度塌陷,手柄无法定位)。

Design Token 映射

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