Skyroc UI
布局容器

Resizable

用于构建可拖拽调整尺寸的分栏布局

Resizable 用于构建可拖拽调整尺寸的面板组。组件基于 react-resizable-panels 封装,导出 ResizablePanelGroupResizablePanelResizableHandle,适合编辑器、控制台、详情页和左右/上下分栏布局。

import {
  ResizableHandle,
  ResizablePanel,
  ResizablePanelGroup
} from '@skyroc/web-ui';

何时使用

  • 需要用户手动调整左右或上下区域的空间比例。
  • 构建 IDE、日志面板、数据看板、侧边栏和主内容区等分栏界面。
  • 需要支持嵌套分栏,组合出更复杂的布局。
  • 只需要静态栅格布局时使用 CSS Grid 或 Layout 组件;需要折叠导航时使用 Collapsible。

横向分栏

设置 direction="horizontal" 后,面板按左右方向排列。ResizableHandle 放在两个 ResizablePanel 之间,作为可拖拽分隔线。

Preview
Code
Loading...
<ResizablePanelGroup direction="horizontal">
  <ResizablePanel defaultSize={50}>Left</ResizablePanel>
  <ResizableHandle withHandle />
  <ResizablePanel defaultSize={50}>Right</ResizablePanel>
</ResizablePanelGroup>

纵向分栏

设置 direction="vertical" 后,面板按上下方向排列。Handle 会根据面板方向自动切换为横向分隔线。

Preview
Code
Loading...
<ResizablePanelGroup direction="vertical">
  <ResizablePanel defaultSize={50}>Top</ResizablePanel>
  <ResizableHandle />
  <ResizablePanel defaultSize={50}>Bottom</ResizablePanel>
</ResizablePanelGroup>

嵌套布局

ResizablePanel 内可以继续嵌套新的 ResizablePanelGroup,用于构建多区域布局。Handle 支持 withHandle 和自定义图标。

Preview
Code
Loading...
<ResizablePanelGroup direction="horizontal">
  <ResizablePanel defaultSize={50}>One</ResizablePanel>
  <ResizableHandle withHandle />
  <ResizablePanel defaultSize={50}>
    <ResizablePanelGroup direction="vertical">...</ResizablePanelGroup>
  </ResizablePanel>
</ResizablePanelGroup>

尺寸

通过 size 调整面板组文字尺寸和 handle 图标容器尺寸。ResizablePanelGroupResizableHandle 分别接收 size,需要统一视觉时同时传入。

Preview
Code
Loading...
尺寸组内字号Handle 图标容器适用场景
xs10px8px × 10.5px紧凑面板、表格内嵌
sm12px10px × 13px小型工具面板
md14px12px × 16px常规场景(默认)
lg16px14px × 18px重点布局区域
xl18px16px × 21px大号编辑面板
2xl20px18px × 24px大幅展示布局

API

ResizablePanelGroup

面板组容器,负责定义分栏方向和管理子面板布局。

属性说明类型默认值
direction*面板排列方向'horizontal' | 'vertical'-
childrenResizablePanel 与 ResizableHandle 组合内容ReactNode-
autoSaveId布局持久化 id,传入后底层库会保存面板尺寸string-
onLayout面板尺寸变化后触发,参数是每个面板的百分比尺寸(sizes: number[]) => void-
keyboardResizeBy键盘调整尺寸时每次变化的百分比number-
size尺寸,影响组内字号'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
className面板组容器 classClassValue-

ResizablePanel

单个可调整尺寸的面板,直接来自 react-resizable-panelsPanel

属性说明类型默认值
children面板内容ReactNode-
defaultSize默认尺寸百分比number-
minSize最小尺寸百分比number-
maxSize最大尺寸百分比number-
collapsible是否允许折叠boolean-
collapsedSize折叠后的尺寸百分比number-
order面板顺序,用于动态渲染场景number-
id面板 id,建议在持久化或动态面板中提供string-

ResizableHandle

面板之间的拖拽分隔线。

属性说明类型默认值
withHandle是否显示可视化拖拽手柄booleanfalse
children自定义手柄图标;未传入时使用 GripVerticalReactNode-
disabled是否禁用拖拽boolean-
size尺寸,影响手柄图标容器大小'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl''md'
className分隔线 classClassValue-
classNames手柄图标相关 slot classResizableClassNames-
id分隔线 idstring-

类型

ResizablePanelGroupProps

面板组属性。继承 react-resizable-panels 的 Group props,并增加项目尺寸和 className 类型。

字段类型说明
direction*'horizontal' | 'vertical'面板排列方向。
childrenReactNode面板组内容。
autoSaveIdstring布局持久化 id。
onLayout(sizes: number[]) => void布局变化回调。
keyboardResizeBynumber键盘调整尺寸步长。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
classNameClassValue面板组 class。

ResizableHandleProps

拖拽分隔线属性。继承 react-resizable-panels 的 PanelResizeHandle props,并增加可视化手柄配置。

字段类型说明
withHandleboolean是否显示可视化拖拽手柄。
childrenReactNode自定义手柄图标。
disabledboolean是否禁用拖拽。
size'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'组件尺寸。
classNameClassValue分隔线 class。
classNamesResizableClassNames手柄图标 slot class。
idstring分隔线 id。

ResizableClassNames

ResizableHandle 可覆盖的 slot class。

字段类型说明
handleIconRootClassValue可视化手柄外层容器 class。
handleIconClassValue可视化手柄图标 class。

ClassValue

CSS 类名类型

string | null | undefined | Record<string, boolean> | ClassValue[]

On this page