RadixUI
-
一个面向 React 的无样式 / 可访问性组件
-
Radix UI 是目前 React 生态中最流行的 “无样式组件库”(Headless UI) 之一。它的核心哲学是:只提供交互逻辑、可访问性(Accessibility)和 DOM 结构,而不提供任何 CSS 样式
-
构建高度定制的设计系统
-
配合 Tailwind CSS 使用: 这是目前前端最火的组合。Radix 负责ui逻辑,Tailwind 负责样式。
-
需要极小包体积: 你可以按需引入组件(如只引入
@radix-ui/react-dialog),避免引入不必要的代码。
常用组件
"@radix-ui/react-collapsible"
"@radix-ui/react-dialog"
"@radix-ui/react-dropdown-menu"
"@radix-ui/react-hover-card"
"@radix-ui/react-icons"
"@radix-ui/react-progress"
"@radix-ui/react-scroll-area"
"@radix-ui/react-select"
"@radix-ui/react-separator"
"@radix-ui/react-slot"
"@radix-ui/react-tooltip"
"@radix-ui/react-use-controllable-state"
"@radix-ui/react-visually-hidden"
相关组件使用
theme
- 预设高质感样式
- 在根部注入样式
/* 导入基础样式文件 */
import "@radix-ui/themes/styles.css";
使用技巧与避坑指南
asChild属性
- 这是 Radix 最强大的特性之一。默认情况下,Radix 会渲染自己的 HTML 标签(比如
button)。如果你想用自己的组件(如NextLink或自定义按钮)作为触发器,必须加上asChild,它会将 Radix 的行为注入到子组件中,而不会增加多余的 DOM 层级
利用 data-* 属性进行样式控制
-
Radix 会根据组件状态自动切换
data-state属性(如open、closed、active)。- CSS:
[data-state='open'] { ... } - Tailwind:
data-[state=open]:bg-blue-500
- CSS:
动画处理
- 由于 Radix 在关闭时会立即卸载组件,处理退出动画通常需要配合
framer-motion或使用 Radix 提供的属性。如果是简单的 CSS 动画,可以利用data-state的变化