JGuang

分隔面板

Splitter · Ant Design

交互预览
npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

分隔面板

自由切分指定区域

何时使用

  • 可以水平或垂直地分隔区域。
  • 当需要自由拖拽调整各区域大小。
  • 当需要指定区域的最大最小宽高时。

代码演示

  • 基本用法 · size
  • 受控模式 · control
  • 垂直方向 · vertical
  • 可折叠 · collapsible
  • 可折叠图标显示 · collapsibleIcon
  • 多面板 · multiple
  • 复杂组合 · group
  • 延迟渲染模式 · lazy
  • 自定义样式 · customize
  • 自定义语义结构的样式和类 · style-class
  • 双击重置 · reset

API

通用属性参考:通用属性

Splitter 组件需要通过子元素计算面板大小,因而其子元素仅支持 Splitter.Panel。

Splitter

参数说明类型默认值版本全局配置
classNames用于自定义组件内部各语义化结构的 class,支持对象或函数Record<SemanticDOM, string> | (info: { props })=> Record<SemanticDOM, string>-6.0.06.0.0
collapsiblemotion 是否开启折叠动画,icon 自定义折叠图标{ motion?: boolean; icon?: { start?: ReactNode; end?: ReactNode } }-6.4.0×
collapsibleIcon折叠图标{start?: ReactNode; end?: ReactNode}-6.0.0×
destroyOnHidden折叠时(size 为 0)销毁面板内容,应用于所有面板,可在单个面板上覆盖booleanfalse6.4.0×
draggerIcon拖拽图标ReactNode-6.0.0×
layout布局方向horizontal | verticalhorizontal-×
lazy延迟渲染模式booleanfalse5.23.0×
onCollapse展开-收起时回调(collapsed: boolean[], sizes: number[]) => void-5.28.0×
orientation布局方向horizontal | verticalhorizontal6.0.0×
styles用于自定义组件内部各语义化结构的行内 style,支持对象或函数Record<SemanticDOM, CSSProperties> | (info: { props })=> Record<SemanticDOM, CSSProperties>-6.0.06.0.0
vertical排列方向,与 orientation 同时存在,以 orientation 优先booleanfalse6.0.0×
onDraggerDoubleClick双击拖拽条回调(index: number) => void-6.3.0×
onResize面板大小变化回调(sizes: number[]) => void--×
onResizeEnd拖拽结束回调(sizes: number[]) => void--×
onResizeStart开始拖拽之前回调(sizes: number[]) => void--×

Panel

参数说明类型默认值版本
collapsible快速折叠boolean | { start?: boolean; end?: boolean; showCollapsibleIcon?: boolean | 'auto' }falseshowCollapsibleIcon: 5.27.0
defaultSize初始面板大小,支持数字 px 或者文字 '百分比%' 类型number | string--
destroyOnHidden折叠时(size 为 0)销毁面板内容,覆盖 Splitter 的 destroyOnHiddenboolean-6.4.0
max最大阈值,支持数字 px 或者文字 '百分比%' 类型number | string--
min最小阈值,支持数字 px 或者文字 '百分比%' 类型number | string--
resizable是否开启拖拽伸缩booleantrue-
size受控面板大小,支持数字 px 或者文字 '百分比%' 类型number | string--

Semantic DOM

语义节点原生说明版本
root根元素,设置flex布局、宽度高度、对齐方式和拉伸样式6.0.0
panel面板元素,设置flex基础值、增长比例和面板容器样式6.0.0
dragger拖拽控制元素,设置绝对定位、用户选择、层级、居中对齐、背景色、悬停态和激活态样式6.0.0

语义说明来源: vendor/components/splitter/demo/_semantic.tsx

主题变量(Design Token)

类型、继承关系和原生令牌声明保持固定源码原文;默认值由原生主题计算,并可能受 ConfigProvider 覆盖。本表不伪造静态默认值。

令牌类型原生说明
resizeSpinnerSizenumber拖拽标识元素大小
splitBarDraggableSizenumber拖拽标识元素大小
splitBarSizenumber拖拽元素显示大小
splitTriggerSizenumber拖拽触发区域大小

声明来源: vendor/components/splitter/style/index.ts

import type { CSSObject } from '@ant-design/cssinjs';

import { genFocusOutline, resetComponent } from '../../style';

import { genNoMotionStyle } from '../../style/motion';

import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal';

import { genStyleHooks } from '../../theme/internal';

import { genCssVar } from '../../theme/util/genStyleUtils';

export interface ComponentToken {
  /**
   * @desc 拖拽标识元素大小
   * @descEN Drag and drop the identity element size
   * @deprecated Please use `splitBarDraggableSize` instead.
   */
  resizeSpinnerSize: number;
  /**
   * @desc 拖拽标识元素大小
   * @descEN Drag and drop the identity element size
   */
  splitBarDraggableSize: number;
  /**
   * @desc 拖拽元素显示大小
   * @descEN Drag the element display size
   */
  splitBarSize: number;
  /**
   * @desc 拖拽触发区域大小
   * @descEN Drag and drop trigger area size
   */
  splitTriggerSize: number;
}

interface SplitterToken extends FullToken<'Splitter'> {}

原生通用属性

Tips: 以下通用属性适用于 antd 大部分组件,不支持的组件会单独说明。

参数说明类型默认值
style自定义样式CSSProperties-
className自定义类名string-
rootClassName添加在组件最外层的 classNamestring-
autoFocus自动获取焦点,仅对表单类、链接、交互容器等可聚焦元素生效booleanfalse

安装并复现示例

npm install antd@6.6.5 @ant-design/icons@6.3.4 dayjs@1.11.23

使用 ConfigProvider 和原生 App,并单独配置 dayjs 语言。每个示例在查看代码中列出完整源码文件和额外固定依赖。示例名称用于选择演示,不是组件通用属性。主题、语言与 SSR 初始化见资源安装指南。

原生类型参考

源码查看器包含未修改的原生实现和以下声明文件,继承类型仍位于原生包中。代码中的英文注释保留为源码参考。

  • vendor/components/splitter/SplitBar.tsx
  • vendor/components/splitter/Splitter.tsx
  • vendor/components/splitter/hooks/sizeUtil.ts
  • vendor/components/splitter/hooks/useItems.ts
  • vendor/components/splitter/hooks/useResizable.ts
  • vendor/components/splitter/index.tsx
  • vendor/components/splitter/interface.ts
  • vendor/components/splitter/style/index.ts

来源与许可

https://github.com/ant-design/ant-design/tree/4a39f54842eade4e565ab336ef6097cd7e723cdd

保留原生中英文正文与可执行示例;官网专用的嵌入章节和令牌表格在本地展开。Ant Design 使用 MIT 许可,另列依赖的许可证也需保留。上传预览禁止向外发起请求,不提供后端服务。