Headless UI 是一套无样式、完全无障碍的 UI 组件原语,由 Tailwind Labs 团队构建,旨在与 Tailwind CSS 良好集成。它提供具备生产级可访问性的组件,而不强加任何设计决策。
主要特点
- 完全无样式,样式由使用者自行提供
- 完整的键盘导航
- 经过屏幕阅读器测试
- 焦点管理
- 自动处理 ARIA 属性
- 支持 TypeScript
- 兼容 React 18 与 Vue 3
- 兼容 SSR
- 使用渲染属性(render props)以获得最大灵活性
安装 React:npm install @headlessui/react Vue:npm install @headlessui/vue
组件目录
Menu(下拉菜单):带键盘导航与 ARIA 支持的可访问下拉菜单。特性包括方向键导航、输入即搜索(type-ahead)、自动焦点管理、按 Escape 关闭、点击外部关闭、用于定位的 Portal 渲染、锚点定位(anchor positioning)API。
Listbox(选择器):自定义的选择/下拉组件,具备完整键盘支持。特性包括单选与多选模式、输入即搜索、方向键导航、受控与非受控模式、支持禁用选项、自定义值比较。
Combobox(自动补全):可搜索、可过滤的选择组件。特性包括带过滤的文本输入、键盘导航、可为空/可选的选择、自定义显示值、支持异步数据加载、多选模式。
Dialog(模态框):可访问的模态对话框,带焦点陷阱(focus trapping)。特性包括焦点陷阱、按 Escape 关闭、滚动锁定、关闭时恢复焦点、Portal 渲染、支持嵌套对话框、初始焦点控制。
Popover:用于工具提示、下拉等的浮动面板。特性包括锚点定位、点击或悬停触发、点击外部关闭、嵌套 Popover、焦点管理、Portal 渲染。
RadioGroup:可访问的单选按钮组。特性包括方向键导航、禁用选项、自定义样式状态、受控模式、描述支持。
Switch(开关):可访问的切换开关。特性包括受控与非受控、标签支持、描述支持、禁用状态、键盘可访问(空格键切换)。
Tab(标签页):可访问的标签页导航。特性包括方向键导航、默认选中标签、手动激活、垂直/水平方向、受控模式。
Disclosure(折叠面板):可展开的内容区块。
适用场景:需要在 React 或 Vue 项目中构建可访问、可自定义样式的交互组件(如下拉菜单、选择器、自动补全、模态框、浮层、单选组、开关、标签页、折叠面板)时使用。
限制:资料中未提供关于收费、价格、平台支持范围或效果的明确说明,暂未提供,请以官方信息为准。