DirectSurface UIDirectSurface UI
开始使用
组件/布局原语

布局原语 / COMPONENT

Flex

DirectSurface UI 的弹性分配主要体现在 RenderStackPanel.addChild(child, flex)。它用于让某些子节点占满剩余空间,解决页面中“固定头部 + 自适应内容”的问题。

文档 READY示例 1
PUBLIC APIRenderStackPanel

FUNCTION EXPLORER

可运行示例与完整源码。

这里始终保留组件的主运行入口;文档中的示例用于补充具体功能说明。

LIVE EXAMPLE LAYOUT
全屏
正在启动 DirectSurface UI 运行时…

Flex 弹性分配

DirectSurface UI 的弹性分配主要体现在 RenderStackPanel.addChild(child, flex)。它用于让某些子节点占满剩余空间,解决页面中“固定头部 + 自适应内容”的问题。

API 总览

import {  RenderDataGrid,  RenderStackPanel,  RenderText,  RenderTextBox,  type CrossAxisAlignment,  type MainAxisAlignment,  type Orientation,  type StackPanelChildData,} from 'ds-ui'
API 类型 用途
RenderStackPanel class 水平或垂直线性布局,addChild(child, flex) 提供弹性分配。
StackPanelChildData type 子项布局数据,包含 flex 权重。
Orientation type 主轴方向:horizontalvertical
MainAxisAlignment / CrossAxisAlignment type 主轴和交叉轴对齐方式。

最小装配顺序是:创建 RenderStackPanel,按自然尺寸添加标题/工具栏,再把主内容用 addChild(child, 1) 加入以占满剩余空间。

核心规则

  • flex = 0:子节点使用自然尺寸。
  • flex > 0:子节点参与剩余空间分配。
  • 多个 flex 子节点按权重比例分配空间。
  • 只有父容器主轴约束是有限尺寸时,flex 才会分配剩余空间。

常见结构

const page = new RenderStackPanel({  orientation: 'vertical',  spacing: 8,  crossAxisAlignment: 'stretch',}) page.addChild(new RenderText('患者列表'))page.addChild(new RenderTextBox({ placeholder: '输入姓名或住院号' }))page.addChild(new RenderDataGrid({  columns: [{ key: 'name', title: '姓名', type: 'text' }],  rows: data,}), 1)

标题和搜索框保持自然高度,表格占满剩余区域。

多区域分配

const root = new RenderStackPanel({  orientation: 'horizontal',  spacing: 8,  crossAxisAlignment: 'stretch',}) root.addChild(new RenderText('左侧区域'), 1)root.addChild(new RenderText('右侧区域'), 2)

右侧区域获得左侧两倍的剩余宽度。

使用建议

  • 页面纵向结构中,通常只有主内容区需要 flex = 1
  • 不要给所有子节点都设置 flex,否则标题、按钮、输入框会被拉伸到不自然的尺寸。
  • 在无界滚动区域内不要依赖 flex 填满高度;滚动内容应使用自然高度。
  • 如果需要同时控制上下左右停靠,使用 RenderDockPanel 更直接。