Skip to main content


a11y-tabs a lightweight (less then 1Kb) JavaScript package that facilitates a11y-compliant tabbed interfaces.

✔︎ Proper use of aria-* attributes applied
✔︎ ENTER and SPACE select
✔︎ HOME and END take you to start and end respectively
✔︎ LEFT and RIGHT for horizontally oriented tabs
✔︎ UP and DOWN for vertically oriented tabs
✔︎ Circular navigation and proper tab and arrow navigation focus
✔︎ Lightweight (< 1Kb)
✔︎ Tested with Cypress E2E
✔︎ Available as esm and umd
✔︎ Supports prefers reduced motion system preference

Try the live demo on Codepen↗.

Credits & Inspiration

Kitty Giraudel

A heartfelt thank you to @KittyGiraudel for creating a11y-dialog which inspired me to create a kindred-spirited and comparable a11y-tabs. Specifically, I found a11y-dialog's small surface API, clear documentation and sandbox demo made ramping up quite efficient. As such, I followed the same patterns with a11y-tabs. Both have helped me as I work on my still experimental framework-agnostic UI component library AgnosticUI (which supports React, Vue, Angular, and Svelte—do go check it out).


I was also inspired by the WAI-ARIA practices resources, and MDN tab role documentation efforts. Both resources certainly provided helpful and prescriptive guidance for this project.