Tailwind 可用工具类快速构建语义清晰、响应式且可访问的分页按钮组。核心是 flex + space-x-1 布局,px-3 py-1.5 text-sm rounded-md 控制基础样式,当前页用 z-10 bg-blue-600 text-white aria-current="page",禁用态加 opacity-50 cursor-not-allowed;省略号用 span.text-gray-500,输入框固定宽并强化 focus 状态;移动端用 sm:flex-wrap 和 sm:space-y-1 适配,全组件需 role="navigation" 和 aria-label="Pagination"。
Tailwind 本身没有 pagination 组件,但用现成的间距、边框、颜色、圆角、悬停等工具类,30 秒就能搭出语义清晰、响应式友好的分页按钮组。关键不是“找 pagination 类”,而是理解分页结构怎么拆解。
一个典型的分页结构是 包裹 ,每个页码项是 里的 或 。需要控制:对齐、间距、尺寸、状态样式、焦点可访问性。
flex + space-x-1 实现按钮水平排列与间隙(space-x-1 比 mx-1 更可靠,避免首尾多出外边距)px-3 py-1.5 text-sm rounded-md 控制基础尺寸和圆角text-gray-700 bg-white border border-gray-300
z-10 bg-blue-600 text-white border-blue-600(z-10 防止被相邻按钮边框遮盖)opacity-50 cursor-not-allowed
分页里常有 … 或 ,它们不能套用链接样式,需单独适配。
… —— 保持垂直对齐,用 text-gray-500 区分语义 —— 宽度固定防跳动,聚焦态必须有明确视觉反馈 做「GO」,务必加 type="button",避免表单意外提交小屏下按钮挤在一起、键盘用户无法看到焦点、屏幕阅读器读不出当前页——这些不是“锦上添花”,是分页功能可用的前提。
sm:flex-wrap 让按钮换行,配合 sm:space-x-0 + sm:space-y-1 重置间隙方向focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2,且 focus:ring-offset-2 要配合父容器 focus:ring-offset-white(否则白底上环偏移不生效)aria-current="page" 属性,这是屏幕阅读器识别“这是当前页”的唯一标准方式role="navigation" 和 aria-label="Pagination",让辅助技术知道这是导航区块aria-current="page" 这种语义标记,或者在响应式切换时没重置 space-x 导致小屏按钮重叠。样式可以调,但可访问性和语义一旦漏掉,后期补成本远高于一开始写对。