ProComponents, templates & AI tooling
HeroUI
27.7k

Accordion 手风琴

用于在紧凑空间中组织信息的可折叠内容面板

用法

import { Accordion } from '@heroui/react';

组件结构

import { Accordion } from '@heroui/react';

export default () => (
  <Accordion>
    <Accordion.Item>
      <Accordion.Heading>
        <Accordion.Trigger>
          <Accordion.Indicator />
        </Accordion.Trigger>
      </Accordion.Heading>
      <Accordion.Panel>
        <Accordion.Body/>
      </Accordion.Panel>
    </Accordion.Item>
  </Accordion>
)

示例

表面样式

无分隔线

多项展开

禁用状态

受控组件

自定义指示器

渲染函数

常见问题布局

自定义样式

Tailwind CSS

全局 CSS

若要自定义 Accordion 组件类,可使用 @layer components 指令。 了解更多

@layer components {
  .accordion {
    @apply rounded-xl bg-gray-50;
  }

  .accordion__trigger {
    @apply font-semibold text-lg;
  }

  .accordion--outline {
    @apply shadow-lg border-2;
  }
}

样式参考

HeroUI 遵循 BEM 方法论,确保组件变体与状态可复用且易于自定义。

CSS 类

Accordion 组件使用以下 CSS 类(查看源码样式):

基础类

  • .accordion - Accordion 根容器
  • .accordion__body - 正文容器
  • .accordion__heading - 标题包裹层
  • .accordion__indicator - 展开/收起指示图标
  • .accordion__item - 单个 Accordion 项
  • .accordion__panel - 可折叠面板容器
  • .accordion__trigger - 可点击的触发按钮

变体类

  • .accordion--outline - 描边变体(边框与背景)

状态类

  • .accordion__trigger[aria-expanded="true"] - 展开状态
  • .accordion__panel[aria-hidden="false"] - 面板可见状态

交互状态

该组件同时支持 CSS 伪类与 data 属性:

  • 悬停:触发器上 :hover[data-hovered="true"]
  • 聚焦:触发器上 :focus-visible[data-focus-visible="true"]
  • 禁用:触发器上 :disabled[aria-disabled="true"]
  • 展开:触发器上 [aria-expanded="true"]

API 参考

Accordion

Prop类型默认值描述
allowsMultipleExpandedbooleanfalse是否允许多项同时展开
defaultExpandedKeysIterable<Key>-初始展开的 key
expandedKeysIterable<Key>-受控的展开 key
onExpandedChange(keys: Set<Key>) => void-展开 key 变化时调用的事件处理函数
isDisabledbooleanfalse是否禁用整个 Accordion
variant"default" | "surface""default"Accordion 的视觉变体
hideSeparatorbooleanfalse是否隐藏 Accordion 项之间的分隔线
classNamestring-额外的 CSS 类
childrenReactNode-Accordion 项
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, AccordionRenderProps>-使用自定义渲染函数覆盖默认 DOM 元素。

Accordion.Item

Prop类型默认值描述
idKey-该项的唯一标识
isDisabledbooleanfalse是否禁用该项
defaultExpandedbooleanfalse初始是否展开
isExpandedboolean-受控展开状态
onExpandedChange(isExpanded: boolean) => void-展开状态变化时调用的事件处理函数
classNamestring-额外的 CSS 类
childrenReactNode-项内容
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, AccordionItemRenderProps>-使用自定义渲染函数覆盖默认 DOM 元素。

Accordion.Trigger

Prop类型默认值描述
classNamestring-额外的 CSS 类
childrenReactNode | RenderFunction-触发器内容或渲染函数
onPress() => void-额外的按下事件处理函数
isDisabledboolean-是否禁用触发器
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, TriggerRenderProps>-使用自定义渲染函数覆盖默认 DOM 元素。

Accordion.Panel

Prop类型默认值描述
classNamestring-额外的 CSS 类
childrenReactNode-面板内容
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, AccordionPanelRenderProps>-使用自定义渲染函数覆盖默认 DOM 元素。

Accordion.Indicator

Prop类型默认值描述
classNamestring-额外的 CSS 类
childrenReactNode-自定义指示图标

Accordion.Body

Prop类型默认值描述
classNamestring-额外的 CSS 类
childrenReactNode-正文内容

相关组件

本页目录