手风琴
手风琴显示一个高级选项列表,可以展开/折叠以显示更多信息。
安装
npx nextui-cli@latest add accordion
上述命令仅用于单独安装。如果已全局安装 @nextui-org/react
,则可以跳过此步骤。
导入
NextUI 导出了 2 个手风琴相关组件
- 手风琴:用于显示手风琴项目列表的主组件。
- 手风琴项目:用于显示单个手风琴项目的项目组件。
用法
带副标题
展开多个项目
如果你将 selectionMode
设置为 multiple
,那么 手风琴
将允许同时展开多个项目。
紧凑
如果您将 isCompact
设置为 true
,Accordion
将以紧凑的样式显示。
变体
Accordion 有 4 种变体:light
、shadow
、bordered
和 splitted
。
Light 变体
Shadow 变体
Bordered 变体
拆分变体
默认展开键
如果你想默认展开某些项,你可以将 defaultExpandedKeys
属性设置为一个键数组。
禁用键
如果你想禁用某些项,你可以将 disabledKeys
属性设置为一个键数组。
开始内容
如果你想在手风琴项之前显示一些内容,你可以设置 startContent
属性。
自定义指示器
手风琴项目有一个名为 indicator
的属性。您可以使用它来自定义打开/关闭指示器。
指示器也可以是 function
,它接收 isOpen
、isDisabled
和默认 indicator
作为参数。
自定义动画
手风琴提供 motionProps
属性来自定义 enter
/ exit
动画。
受控
手风琴是一个受控组件,这意味着您需要自己控制selectedKeys
属性。
手风琴项目插槽
- base:手风琴项目包装器。
- heading:手风琴项目标题。它包含
indicator
和title
。 - 触发器:打开/关闭手风琴项的按钮。
- 标题包装器:
标题
和副标题
的包装器。 - 标题:手风琴项标题。
- 副标题:手风琴项副标题。
- 开始内容:手风琴项之前的内容。
- 指示器:指示手风琴项打开/关闭状态的元素。
- 内容:手风琴项内容。
自定义手风琴样式
你可以使用以下任何属性来自定义手风琴和手风琴项样式
className
:手风琴的类名。修改手风琴包装器样式。(手风琴)itemClasses
:手风琴项的类名。一次修改所有手风琴项样式。(手风琴)classNames
:手风琴项的类名。分别修改每个手风琴项样式。(手风琴项)
以下是如何自定义手风琴样式的示例
数据属性
AccordionItem
在 base
元素上具有以下属性
- data-open: 手风琴项是否打开。
- data-disabled: 手风琴项被禁用时。
- data-hover: 当手风琴项被悬停时。基于 useHover。
- data-focus: 当手风琴项被聚焦时。基于 useFocusRing。
- data-focus-visible:当手风琴项通过键盘获得焦点时。基于 useFocusRing。
- data-disabled:当手风琴项被禁用时。基于
isDisabled
属性。 - data-pressed:当手风琴项被按下时。基于 usePress。
无障碍
- 键盘事件支持 空格、回车、向上箭头、向下箭头 以及 主页 / 结束 键。
- 键盘焦点管理和跨浏览器规范化。
aria-expanded
手风琴项目的属性。aria-disabled
手风琴项目的属性。aria-controls
手风琴项目的属性。
API
手风琴属性
属性 | 类型 | 说明 | 默认值 |
---|---|---|---|
children | ReactNode | ReactNode[] | 集合的内容。通常是 AccordionItem 数组 | |
variant | light | shadow | bordered | splitted | 手风琴外观样式。 | light |
selectionMode | none | single | multiple | 集合中允许的选择类型。 | |
selectionBehavior | toggle | replace | 手风琴选择行为。 | toggle |
isCompact | boolean | 是否所有手风琴项都应该更小。 | false |
isDisabled | boolean | 手风琴项是否已禁用。 | |
showDivider | boolean | 是否在每个手风琴项底部显示分隔线。 | true |
分隔符属性 | DividerProps | 分隔符组件属性。 | - |
hideIndicator | boolean | 是否隐藏手风琴项指示器。 | |
disableAnimation | boolean | 是否禁用手风琴项打开/关闭动画。 | |
disableIndicatorAnimation | boolean | 是否禁用手风琴项指示器动画。 | |
disallowEmptySelection | boolean | 集合是否允许空选择。 | |
keepContentMounted | boolean | 手风琴项内容是否应始终挂载。 | false |
fullWidth | boolean | 手风琴是否应占据其父容器的全部宽度。 | true |
motionProps | MotionProps | 手风琴的运动属性。 | |
disabledKeys | React.Key[] | 已禁用的项键。这些项无法选择、聚焦或与之交互。 | |
itemClasses | 类名 | 手风琴项类名。 | |
selectedKeys | all | React.Key[] | 集合中当前选定的键(受控)。 | |
defaultSelectedKeys | all | React.Key[] | 集合中最初选定的键(不受控)。 | |
disabledKeys | React.Key[] | 集合中当前禁用的键(受控)。 |
手风琴事件
属性 | 类型 | 说明 |
---|---|---|
onSelectionChange | (keys: "all" | Set<React.Key>) => any | 在选择发生更改时调用的处理程序。 |
手风琴项属性
属性 | 类型 | 说明 | 默认值 |
---|---|---|---|
children | ReactNode | string | 组件的内容。 | |
title | ReactNode | string | 手风琴项标题。 | |
副标题 | ReactNode | string | 手风琴项目副标题。 | |
指示器 | IndicatorProps | 手风琴项目 expanded 指示器,通常为箭头图标。 | |
startContent | ReactNode | 手风琴项目开始内容,通常为图标或头像。 | |
motionProps | MotionProps | 用于修改 framer 运动动画的属性。使用 variants API 创建自己的动画。 | |
isCompact | boolean | AccordionItem 是否紧凑。 | false |
isDisabled | boolean | 当前禁用状态。 | false |
keepContentMounted | boolean | 关闭时是否保持 AccordionItem 内容已安装。 | false |
hideIndicator | boolean | AccordionItem 指示器是否隐藏。 | false |
disableAnimation | boolean | AccordionItem 动画是否已禁用。 | false |
disableIndicatorAnimation | boolean | AccordionItem 指示器动画是否已禁用。 | false |
HeadingComponent | React.ElementType | 可自定义标题标记,用于 Web 辅助功能。使用标题描述内容,并始终如一且语义化地使用它们。 | h2 |
classNames | 类名 | 允许为手风琴项目槽设置自定义类名。 | - |
手风琴项目事件
属性 | 类型 | 说明 |
---|---|---|
onFocus | (e: FocusEvent) => void | 当元素获得焦点时调用的处理程序。 |
onBlur | (e: FocusEvent) => void | 当元素失去焦点时调用的处理程序。 |
onFocusChange | (isFocused: boolean) => void | 当元素的焦点状态更改时调用的处理程序。 |
onKeyDown | (e: KeyboardEvent) => void | 当按下某个键时调用的处理程序。 |
onKeyUp | (e: KeyboardEvent) => void | 当释放某个键时调用的处理程序。 |
onPress | (e: PressEvent) => void | 在目标上释放按压时调用的处理程序。 |
onPressStart | (e: PressEvent) => void | 当按压交互开始时调用的处理程序。 |
onPressEnd | (e: PressEvent) => void | 当按下交互结束时调用的处理程序,无论是在目标上还是当指针离开目标时。 |
onPressChange | (isPressed: boolean) => void | 按下状态更改时调用的处理程序。 |
onPressUp | (e: PressEvent) => void | 当在目标上释放按下时调用的处理程序,无论它是否从目标开始。 |
onClick | MouseEventHandler | 本机按钮单击事件处理程序 (已弃用) 使用 onPress 代替。 |
类型
手风琴项目指示器属性
export type AccordionItemIndicatorProps = {/*** The current indicator, usually an arrow icon.*/indicator?: ReactNode;/*** The current open status.*/isOpen?: boolean;/*** The current disabled status.* @default false*/isDisabled?: boolean;};type indicator?: ReactNode | ((props: AccordionItemIndicatorProps) => ReactNode) | null;
手风琴项目类名
export type AccordionItemClassnames = {base?: string;heading?: string;trigger?: string;titleWrapper?: string;title?: string;subtitle?: string;startContent?: string;indicator?: string;content?: string;};
运动属性
export type MotionProps = {/*** If `true`, the opacity of the content will be animated* @default true*/animateOpacity?: boolean;/*** The height you want the content in its collapsed state.* @default 0*/startingHeight?: number;/*** The height you want the content in its expanded state.* @default "auto"*/endingHeight?: number | string;/*** The y-axis offset you want the content in its collapsed state.* @default 10*/startingY?: number;/*** The y-axis offset you want the content in its expanded state.* @default 0*/endingY?: number;} & HTMLMotionProps;