SplitPane可拖拽分栏
把一块区域分成两栏,中间一条可以拖动的分隔条。分隔条本身是透明的,中间一枚小把手;能拖、能用键盘调、双击复位。自身变窄时自动改成上下堆叠:看的是自己的宽度,不是视口。
示例
左右分栏(受控)
拖动中间的把手;或者 ⇥ 聚焦它,用 ← → 调整(按住 ⇧ 步子更大),↩ 或双击回到初始值。演示框窄于 520px 时自动堆叠。
第一栏 36%
列表
详情
上下分栏
orientation="vertical"。上下分栏本来就是堆叠的,不受 stackBelow 影响。
编辑器
终端
API
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
children* | ReactNode | — | 正好两个子节点:第一栏和第二栏。 |
orientation | 'horizontal' | 'vertical' | 'horizontal' | 分栏方向:左右或上下。 |
value | number | — | 第一栏占的百分比(受控),0–100。 |
defaultValue | number | 50 | 初始百分比(非受控);双击分隔条或按 Enter 回到这个值。 |
onChange | (value: number) => void | — | 大小变化时触发,参数是新的百分比(保留一位小数)。 |
min / max | number | 20 / 80 | 第一栏的最小 / 最大百分比。 |
step | number | 2 | 方向键每次调整的百分比;按住 Shift 为 10。 |
stackBelow | 'sm' | 'md' | 'lg' | 'xl' | false | 'md' | 自身宽度小于该断点时改为上下堆叠(不可拖拽)。false 关闭。 |
stacked | boolean | — | 强制堆叠 / 不堆叠,忽略 stackBelow。 |
separatorLabel | string | '调整分栏大小' | 分隔条的无障碍名称。 |
…rest | HTMLAttributes | — | ref、className、style 和其余原生属性透传到根节点。 |
无障碍
- 分隔条是可聚焦的
role="separator",带aria-valuenow / min / max、aria-orientation和指向第一栏的aria-controls。 - 键盘:← →(上下分栏为 ↑ ↓)按
step调整,Shift 加方向键一次 10%,Home / End 到最小 / 最大,Enter 复位。 - 堆叠之后分隔条不再可聚焦、不再响应拖拽,只是一条普通的分隔。
- 触屏上分隔条的可点按宽度从 12px 加到 20px。两栏各自滚动;栏里的内容多时给它们各自一个带名字的滚动区域。
- 页面上有多个分栏时用
separatorLabel说清楚调的是什么(“调整列表宽度”)。