无样式、无障碍、开源的 React 基础组件,用于高质量的 Web 应用和设计系统。
具有模态和非模态模式,精细的焦点控制,对屏幕阅读器无障碍。
具有子菜单、可勾选项目、碰撞处理、箭头键导航和类型ahead支持。
具有精细的焦点控制、碰撞处理、源感知和碰撞感知动画。
支持键盘和触摸输入、步进间隔、多滑块用于值范围和 RTL 方向。
支持自定义跨浏览器样式,同时保持浏览器的原生滚动行为。
支持箭头键导航、水平/垂直方向、受控或非受控。
支持同时打开一个或多个项目、键盘导航、折叠和展开动画。
具有箭头键导航、水平/垂直方向支持、受控或非受控。
一组可以开启或关闭的双态按钮。支持单个和多个按下的按钮。
允许用户在选中和未选中之间切换。
开发和维护一套强大的 UI 组件 需要花费 大量 时间,而且这大多是无差异化的工作。在 Radix 组件 的基础上构建将为您节省时间和金钱,因此您可以更快地交付更好的产品。
众所周知,强大的 UI 组件 很难构建。处理无障碍细节和复杂逻辑会占用产品功能开发的时间。使用 Radix,您可以专注于您独特的工程挑战。
我们在 API 设计、性能和无障碍方面精益求精,让您无需为此烦恼。
使用箭头键、Escape 和 Enter 快捷键,甚至通过 typeahead 导航菜单。
配置下拉菜单是否允许或阻止外部交互。
在下拉菜单内嵌套另一层功能齐全的子菜单。
实现正确的语义和行为,使其对使用辅助技术的人员无障碍。
创建打开和关闭动画,这些动画会考虑下拉菜单的实际位置。
将菜单定位在相对于触发器的任何位置,同时考虑与屏幕的碰撞。
当用户关闭下拉菜单或聚焦外部元素时,精细地控制焦点行为。
项目可以用于执行操作,以及充当复选框或单选按钮控件。
Radix 基础组件 遵循 WAI-ARIA 指南,为我们的组件实现正确的语义和行为。
基础组件 为用户期望使用键盘或其他输入设备的组件提供完整的键盘支持。
基础组件 开箱即用地提供合理的焦点管理默认值,这些默认值可以在您的代码中进一步自定义。
我们使用常见的辅助技术测试 基础组件,以找出人们可能遇到的实际问题。
我们的主要目标之一是提供尽可能最佳的开发者体验。Radix 基础组件 提供完全类型化的 API。所有组件都共享类似的 API,从而创建一致且可预测的体验。
无需覆盖样式,没有特异性冲突。
对每个组件部分进行精细访问。
配置行为、控制焦点、添加事件监听器。
具有相似功能的组件共享类似的 API。
// Add styles with your preferred CSS technology
const TooltipContent = styled(Tooltip.Content, {
backgroundColor: "black",
borderRadius: "3px",
padding: "5px"
});
const PopoverContent = styled(Popover.Content, {
backgroundColor: "white",
boxShadow: "0 2px 10px -3px rgb(0 0 0 / 20%)",
borderRadius: "3px",
});
const DialogContent = styled(Dialog.Content, {
backgroundColor: "white",
boxShadow: "0 3px 15px -4px rgb(0 0 0 / 30%)",
borderRadius: "5px",
});
// Compose a custom Tooltip component
export const StatusTooltip = ({ state, label }) => {
return (
<Tooltip.Root>
<Tooltip.Trigger asChild>
<Text>
<Status variant={state} />
</Text>
</Tooltip.Trigger>
<Tooltip.Portal>
<TooltipContent>
<Tooltip.Arrow />
{label}
</TooltipContent>
</Tooltip.Portal>
</Tooltip.Root>
);
}; // Compose a Popover with custom focus and positioning
export const StatusPopover = ({ children }) => {
const popoverCloseButton = React.useRef(null);
return (
<Popover.Root>
<Popover.Trigger>View status</Popover.Trigger>
<Popover.Portal>
<PopoverContent
align="start"
collisionPadding={10}
onOpenAutoFocus={(event) => {
// Focus the close button when popover opens
popoverCloseButton.current?.focus();
event.preventDefault();
}}
>
{children}
<Popover.Close ref={popoverCloseButton}>
Close
</Popover.Close>
</PopoverContent>
</Popover.Portal>
</Popover.Root>
);
}; // Compose a Dialog with custom focus management
export const InfoDialog = ({ children }) => {
const dialogCloseButton = React.useRef(null);
return (
<Dialog.Root>
<Dialog.Trigger>View details</Dialog.Trigger>
<Dialog.Overlay />
<Dialog.Portal>
<DialogContent
onOpenAutoFocus={(event) => {
// Focus the close button when dialog opens
dialogCloseButton.current?.focus();
event.preventDefault();
}}
>
{children}
<Dialog.Close ref={dialogCloseButton}>
Close
</Dialog.Close>
</DialogContent>
</Dialog.Portal>
</Dialog.Root>
);
};
每个组件都是其自身独立版本化的软件包,因此可以在现有代码旁边添加新组件。无需通过大规模重写来中断功能工作—您可以从小处着手,并逐个添加更多组件。
Radix 文档包含真实世界的示例、广泛的 API 参考、无障碍详细信息和完整的 TypeScript 支持。所有组件都共享类似的 API,从而创建一致的开发者体验。您会喜欢使用 Radix 基础组件。