Resizable

用于让用户调整相邻工作区域的空间分配。

预览

列表与详情分栏

从水平 40/60 比例开始,同时保留列表与详情所需的最小空间。

正在加载预览。

安装

首次使用此 Registry?请先完成 基础配置与共享样式安装 。

npx shadcn@latest add @neumorphism-ui/resizable

先安装一次共享 base,然后使用 CLI 添加组件及其依赖。

Registry JSON

用法

设置 ResizablePanelGroup 的方向,在面板间放置 ResizableHandle。提供初始尺寸与边界,并为外层区域指定大小。

"use client";

import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/components/ui/resizable";

export default function Example() {
  return (
    <div className="h-48">
      <ResizablePanelGroup orientation="horizontal">
        <ResizablePanel defaultSize="40%" minSize="20%"><div className="p-4">List</div></ResizablePanel>
        <ResizableHandle withHandle />
        <ResizablePanel defaultSize="60%" minSize="20%"><div className="p-4">Details</div></ResizablePanel>
      </ResizablePanelGroup>
    </div>
  );
}

API 参考

使用 react-resizable-panels 处理尺寸计算和 separator 无障碍语义。新拟态只负责面板边界和 handle 表面,不重新实现面板状态。

组件属性类型默认值说明
ResizablePanelGrouporientation"horizontal" | "vertical""horizontal"设置面板分割方向。
ResizablePaneldefaultSizenumber | string—设置初始面板尺寸。
ResizablePanelminSize / maxSizenumber | string—限制面板缩小或扩大的范围。
ResizableHandlewithHandlebooleanfalse在 separator 中间显示视觉 grip。
ResizableHandledisabledbooleanfalse保留 separator 但禁用尺寸调整。

无障碍

  • 01

    ResizableHandle 使用库提供的 separator 语义和当前尺寸值,不额外制作伪 slider。

  • 02

    键盘用户可以聚焦 separator 并使用方向键调整面板尺寸。

  • 03

    视觉 grip 使用 aria-hidden,交互含义由 separator 本身承担。