布局容器
Accordion
可折叠的内容面板,用于在有限空间内展示和隐藏分组信息
手风琴(Accordion)将大段内容分组为可折叠的面板,让用户按需展开感兴趣的部分,适合在有限空间内组织层级信息。
import {
Accordion,
AccordionRoot,
AccordionItem,
AccordionHeader,
AccordionTrigger,
AccordionContent
} from '@skyroc/web-ui';何时使用
- 页面信息量较大,需要分组折叠展示时(如 FAQ、设置面板)。
- 用户只需关注部分内容,无需一次性浏览全部信息。
- 相比 Tab 组件,Accordion 更适合各分组内容长度差异较大的场景。
单选模式
设置 type="single" 时,同一时间只能展开一个面板。默认展开后不可再折叠(始终保持一个面板打开)。
Preview
Code
Loading...
可折叠
在单选模式下,设置 collapsible 允许用户折叠所有面板(点击已展开的面板可将其收起)。
Preview
Code
Loading...
多选模式
设置 type="multiple" 时,可以同时展开多个面板,彼此互不影响。
Preview
Code
Loading...
尺寸
通过 size 调整手风琴的字号与间距,从 xs 到 2xl 共 6 个尺寸。
| 尺寸 | 字号 | 触发器间距 | 适用场景 |
|---|---|---|---|
xs | 10px | py-3 | 紧凑嵌套、辅助信息 |
sm | 12px | py-3.5 | 侧边栏、次级面板 |
md | 14px | py-4 | 常规场景(默认) |
lg | 16px | py-4.5 | 强调内容、表单分组 |
xl | 18px | py-5 | 重要信息面板 |
2xl | 20px | py-6 | 首屏 FAQ、大幅展示 |
Preview
Code
Loading...
插槽
每个条目支持 leading 和 trailing 插槽,可在标题前后放置图标、标签或其他内容。插槽通过 items 数据中的 leading / trailing 字段配置。
Preview
Code
Loading...
自定义图标
通过 triggerIcon 替换默认的展开/折叠箭头图标,triggerLeading 和 triggerTrailing 可以在所有触发器前后统一添加内容。
Preview
Code
Loading...
自定义样式
通过 classNames 对手风琴的各个 slot(root、item、header、trigger、content、triggerIcon、triggerLeadingIcon)分别自定义样式。
Preview
Code
Loading...
API
Accordion
通用属性参考:基于 Radix UI Accordion,支持原生 div 元素的所有属性。
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| type* | 选择模式,single 同时只展开一个,multiple 可展开多个 | 'single' | 'multiple' | - |
| items* | 数据驱动的条目列表,每项需包含唯一 value | AccordionItemData[] | - |
| collapsible | 单选模式下是否允许全部折叠 | boolean | false |
| size | 尺寸,影响字号与间距 | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'md' |
| value | 受控模式下当前展开的面板值 | string | string[] | - |
| onValueChange | 展开面板变化时的回调 | (value: string | string[]) => void | - |
| defaultValue | 非受控模式下默认展开的面板值 | string | string[] | - |
| classNames | 各 slot 的自定义 class(root / item / header / trigger / content / triggerIcon / triggerLeadingIcon) | AccordionClassNames | - |
| triggerIcon | 自定义触发器展开/折叠图标,替换默认箭头 | ReactNode | - |
| triggerLeading | 所有触发器的全局前置内容 | ReactNode | - |
| triggerTrailing | 所有触发器的全局后置内容 | ReactNode | - |
| disabled | 禁用整个手风琴 | boolean | false |
| dir | 文本方向 | 'ltr' | 'rtl' | - |
AccordionItemData
每个条目的数据结构,通过 items 数组传入:
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| value* | 条目的唯一标识 | string | - |
| title* | 触发器中显示的标题 | ReactNode | - |
| children* | 展开后显示的内容 | ReactNode | - |
| leading | 标题前的插槽内容(图标、标签等) | ReactNode | - |
| trailing | 标题后的插槽内容(图标、标签等) | ReactNode | - |
| disabled | 是否禁用该条目 | boolean | false |
类型
AccordionClassNames
各 slot 的自定义 class,用于精细化控制手风琴各部分的样式。
| 字段 | 类型 | 说明 |
|---|---|---|
| root | ClassValue | 根容器的 class。 |
| item | ClassValue | 每个条目的 class。 |
| header | ClassValue | 条目头部的 class。 |
| trigger | ClassValue | 触发器按钮的 class。 |
| content | ClassValue | 展开内容区域的 class。 |
| triggerIcon | ClassValue | 触发器图标的 class。 |
| triggerLeadingIcon | ClassValue | 触发器前置图标的 class。 |
AccordionItemData
数据驱动模式下每个条目的数据结构。
| 字段 | 类型 | 说明 |
|---|---|---|
| value* | string | 条目的唯一标识。 |
| title* | ReactNode | 触发器中显示的标题。 |
| children* | ReactNode | 展开后显示的内容。 |
| leading | ReactNode | 标题前的插槽内容。 |
| trailing | ReactNode | 标题后的插槽内容。 |
| disabled | boolean | 是否禁用该条目。 |