手风琴
一组带标题的可折叠面板。
安装
pnpm dlx shadcn@latest add @lumi-ui/accordion
基本用法
import {
Accordion,
AccordionItem,
AccordionPanel,
AccordionSummary,
} from "@/components/ui/accordion";export function AccordionDemo() {
return (
<Accordion defaultValue={["item-1"]} className="w-full max-w-md">
<AccordionItem value="item-1">
<AccordionSummary>什么是 Lumi UI?</AccordionSummary>
<AccordionPanel>
Lumi UI 是一个开源的组件库,专为使用 React 构建美观且无障碍的用户界面而设计。
</AccordionPanel>
</AccordionItem>
<AccordionItem value="item-2">
<AccordionSummary>组件可以自定义吗?</AccordionSummary>
<AccordionPanel>
当然可以。组件基于 Tailwind CSS 和 CVA 构建,便于样式调整和扩展,能轻松匹配你的品牌风格。
</AccordionPanel>
</AccordionItem>
</Accordion>
);
}组件结构
<Accordion>
<AccordionItem>
<AccordionSummary/>
<AccordionPanel/>
</AccordionItem>
</Accordion>实用示例
带图标的自定义触发器
不带图标的自定义触发器
默认展开面板
要让某个手风琴项默认展开,给 AccordionItem 设置一个唯一的 value,然后把这个值放入数组传给 Accordion 组件的 defaultValue 属性。
如果想默认展开多个面板,请确保 multiple 属性设置为 true,并在 defaultValue 数组中包含每个面板的 value。
多项展开
通过 multiple 属性,让手风琴支持同时展开多个面板。
禁用面板
向 AccordionItem 传入 disabled 属性即可禁用某个面板。
配合 Motion 使用
Base UI 会通过 render 属性把自身的 className(包括过渡样式)传递给你的自定义组件。这会导致 CSS 动画和 JS 动画同时运行,从而出现卡顿。
重要
当配合 Motion 等动画库使用 render 时,你可以设置 animation="none" 来重置默认的 CSS 过渡,避免 CSS 过渡和 JavaScript 动画之间产生冲突。