Components

可折叠组件

一个可展开/折叠面板的交互组件。

import * as React from "react";
import { Collapsible } from "radix-ui";
import { RowSpacingIcon, Cross2Icon } from "@radix-ui/react-icons";
import "./styles.css";
const CollapsibleDemo = () => {
const [open, setOpen] = React.useState(false);
return (
<Collapsible.Root className="CollapsibleRoot" open={open} onOpenChange={setOpen} >
<div style={{ display: "flex", alignItems: "center", justifyContent: "space-between", }} >
<span className="Text" style={{ color: "white" }}>
@peduarte starred 3 repositories
</span>
<Collapsible.Trigger asChild>
<button className="IconButton">
{open ? <Cross2Icon /> : <RowSpacingIcon />}
</button>
</Collapsible.Trigger>
</div>
<div className="Repository">
<span className="Text">@radix-ui/primitives</span>
</div>
<Collapsible.Content>
<div className="Repository">
<span className="Text">@radix-ui/colors</span>
</div>
<div className="Repository">
<span className="Text">@radix-ui/themes</span>
</div>
</Collapsible.Content>
</Collapsible.Root>
);
};
export default CollapsibleDemo;

Features

    完全键盘导航。

    可以为受控或非受控。

安装

从命令行安装组件。

npm install @radix-ui/react-collapsible

构成

导入组件并将各个部分组合在一起。

import { Collapsible } from "radix-ui";
export default () => (
<Collapsible.Root>
<Collapsible.Trigger />
<Collapsible.Content />
</Collapsible.Root>
);

API 参考

Root

包含所有可折叠组件的部分。

PropTypeDefault
asChild
boolean
false
defaultOpen
boolean
No default value
open
boolean
No default value
onOpenChange
function
No default value
disabled
boolean
No default value
Data attributeValues
[data-state]"open" | "closed"
[data-disabled]

在禁用时显示

Trigger

用于切换可折叠组件的按钮。

PropTypeDefault
asChild
boolean
false
Data attributeValues
[data-state]"open" | "closed"
[data-disabled]

在禁用时显示

Content

包含可折叠内容的组件。

PropTypeDefault
asChild
boolean
false
forceMount
boolean
No default value
Data attributeValues
[data-state]"open" | "closed"
[data-disabled]

在禁用时显示

CSS VariableDescription
--radix-collapsible-content-width内容展开/关闭时的宽度
--radix-collapsible-content-height内容展开/关闭时的高度

示例

动画内容大小

使用 --radix-collapsible-content-width 和/或 --radix-collapsible-content-height CSS 变量在内容展开/关闭时对其大小进行动画处理。以下是演示:

// index.jsx
import { Collapsible } from "radix-ui";
import "./styles.css";
export default () => (
<Collapsible.Root>
<Collapsible.Trigger></Collapsible.Trigger>
<Collapsible.Content className="CollapsibleContent">
</Collapsible.Content>
</Collapsible.Root>
);
/* styles.css */
.CollapsibleContent {
overflow: hidden;
}
.CollapsibleContent[data-state="open"] {
animation: slideDown 300ms ease-out;
}
.CollapsibleContent[data-state="closed"] {
animation: slideUp 300ms ease-out;
}
@keyframes slideDown {
from {
height: 0;
}
to {
height: var(--radix-collapsible-content-height);
}
}
@keyframes slideUp {
from {
height: var(--radix-collapsible-content-height);
}
to {
height: 0;
}
}

可访问性

遵循 Disclosure WAI-ARIA 设计模式

键盘交互

KeyDescription
Space
打开/关闭可折叠组件。
Enter
打开/关闭可折叠组件。