当前位置: 首页 > news >正文

Headless UI:无样式、全无障碍的 UI 组件库

文章目录

  • Headless UI:无样式、全无障碍的 UI 组件库

Headless UI:无样式、全无障碍的 UI 组件库

Tailwind CSS 团队推出的 Headless UI,提供了完整的、完全无样式的 UI 组件,已获得 28k+ Star。

Headless UI 是一组完全无样式、且具备完整无障碍访问能力的 UI 组件,专门为与 Tailwind CSS 搭配使用而设计。如果你用过 Tailwind CSS,应该对这套组件库不陌生。

组件库目前同时支持 React 和 Vue 两个版本,覆盖了最主流的前端框架生态。

为什么需要无样式的组件

市面上大多数 UI 组件库都自带一套预设样式,比如 Ant Design、Element Plus。它们的优势是开箱即用,但缺点也很明显——想要定制样式往往要写一堆覆盖代码,甚至需要修改源码。

Headless UI 走的是另一条路:组件只提供行为逻辑和可访问性,样式全部交给开发者自己控制。配合 Tailwind CSS 的原子化样式方案,可以快速构建出符合设计稿的组件,不需要和框架样式打架。

覆盖的组件

Headless UI 提供了日常开发中最常用的交互组件:

  • Listbox(下拉选择)
  • Combobox(带搜索的选择框)
  • Menu(菜单)
  • Dialog(弹窗)
  • Popover(弹出气泡)
  • Tabs(标签页)
  • Transition(过渡动画)
  • Disclosure(折叠面板)
  • Switch(开关)
  • Radio Group(单选框组)

每个组件都遵循 WAI-ARIA 规范,键盘导航、屏幕阅读器支持都内置好了。

安装使用

安装命令:

npm install @headlessui/react@latest

Vue 项目则安装:

npm install @headlessui/vue@latest

如果你愿意尝鲜,也可以安装 insiders 版本(对应主分支最新提交):

npm install @headlessui/react@insiders

需要注意,insiders 版本不遵循 semver 规范,API 在正式发布前可能会有变化。

使用示例

以 Switch 开关组件为例,与 Tailwind CSS 配合,只需要写几行代码:

import { useState } from 'react' import { Switch } from '@headlessui/react' function MyToggle() { const [enabled, setEnabled] = useState(false) return ( <Switch checked={enabled} onChange={setEnabled} className={`${enabled ? 'bg-blue-600' : 'bg-gray-200'} relative inline-flex h-6 w-11 items-center rounded-full`} > <span className="sr-only">Enable notifications</span> <span className={`${enabled ? 'translate-x-6' : 'translate-x-1'} inline-block h-4 w-4 transform rounded-full bg-white transition`} /> </Switch> ) }

样式完全由 Tailwind CSS 控制,想要什么外观都可以自由调整。

生态与社区

Headless UI 目前提供三个包:React 版本、Vue 版本,以及一个 Tailwind CSS 插件(用于增强组件样式能力)。每个包都在活跃维护中,社区讨论在 GitHub Discussions 中进行。

如果你正在使用 Tailwind CSS 并且厌倦了和 UI 库的样式打架,Headless UI 值得一试。

中,社区讨论在 GitHub Discussions 中进行。

如果你正在使用 Tailwind CSS 并且厌倦了和 UI 库的样式打架,Headless UI 值得一试。

http://www.jsqmd.com/news/1156299/

相关文章:

  • 2026北京百达翡丽回收哪家价格高?行情贴合优选毓典——高效、透明、有保障 - 奢品流通笔谈
  • 32-Skills高级特性
  • 工业负载控制方案:TPD2017FN与STM32F411RE应用解析
  • 无人机视角智慧交通道路路面井盖异常丢失破损未盖好检测数据集VOC+YOLO格式851张3类别
  • SpringBoot 3.x 参数校验国际化:5步集成Validation与MessageSource
  • RT-Thread 4.1.0 RTC 驱动配置:STM32F103/407 3步开启与FinSH命令验证
  • 上海静安区回收名包横评,爱马仕、LV、古驰、德尔沃别被黑心店压价 - 讯息早知道
  • 掌控你的硬件性能:Universal x86 Tuning Utility完全指南
  • 2026萍乡本地人必选防水补漏检测维修公司靠谱服务商TOP5推荐:房屋渗漏水检测维修卫生间厨房天花板阳台外墙渗漏水检测补漏维修-暗管漏水检测专业仪器精准定位漏水点 - 一休咨询
  • 3步掌握Confluence Dumper:从API到本地归档的完整实战指南
  • 零代码实现Codex后端替换:低成本接入DeepSeek模型全攻略
  • 百度网盘提取码智能查询工具:3步解锁加密资源的终极方案
  • AzurLaneAutoScript MAA模块本地化:3大技术挑战与完整解决方案
  • 2026三明本地人必选防水补漏检测维修公司靠谱服务商TOP5推荐:房屋渗漏水检测维修卫生间厨房天花板阳台外墙渗漏水检测补漏维修-暗管漏水检测专业仪器精准定位漏水点 - 一休咨询
  • GitHub汉化插件终极指南:三分钟让GitHub界面全面说中文
  • 2026广州全域连锁钻石回收中心,碎钻婚嫁钻戒一站式估价变现 - 禹竞奢收行
  • 抖音视频批量下载神器:5分钟掌握高效内容管理技巧
  • Claude Code HUD插件:实时状态监控与Token精准解析
  • 亨得利官方名表服务中心|全新维修地址及服务热线权威信息通告(2026年7月最新) - 亨得利官方博客
  • Seraphine终极指南:英雄联盟智能助手如何帮你轻松上分
  • 碧蓝航线自动化脚本终极指南:5个技巧实现无缝委托科研与全自动大世界
  • 用 Ace Data Cloud 快速接入 OpenAI Chat Completions:对话、流式、多轮和多模态一篇打通
  • 2026年7月惠州惠阳黄金奢侈品回收权威排行榜TOP5 靠谱门店地址/电话汇总 - 生活测评小能手
  • MA12070音频放大器与PIC18F86J15 MCU系统设计解析
  • 图像超分辨率实战:SRCNN 与 VDSR 在 DIV2K 数据集上的 PSNR/SSIM 对比评测
  • 揭秘Skyline APIServer多服务集成能力:OpenStack全组件无缝对接实战
  • 常州卖钻戒为什么亏很多?4C 参数估价内幕看完少踩坑 - 奢侈品回收测评
  • 亲身到店探访海口亨得利官方名表服务中心|最新热线及全部网点地址(2026年7月更新) - 亨得利官方
  • MP2672A芯片与PIC18F4515的电池管理系统设计
  • 想高价出香奈儿 CF、LV 托特?上海奢二网回收德尔沃流程透明 - 讯息早知道