zetareticoli / cssui

A collection of interactive UI components in pure CSS

Home Page:https://www.cssui.dev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Tabs: can't navigate to the next tab using the keyboard

omaxel opened this issue · comments

The user is not able to switch between tabs by using the tab key followed by enter. The elements which represent the tabs (<label>) are not focusable.

We should consider using the "roving tabindex" technique.

https://web.dev/control-focus-with-tabindex/#create-accessible-components-with-%22roving-tabindex%22

What do you think?

The roving tabindex technique requires JavaScript since the component needs to listen for keypress events (e.g. arrow up).

After reviewing the behavior of tabs, I believe the real problem relies on labels' keyboard interactions (pressing enter or space) not being reflected to the linked radio button. As proof of this, I made the labels focusable by adding tabindex=0. Pressing the enter or the space key after focusing one of the labels, doesn't affect the state of the related radio button.

In order to solve the problem, I think we should remove display: none from the radio buttons allowing focus on them. We still need to hide them from the UI by using other techniques.

With this approach:

  • it's possible to navigate between tabs using left and right arrow keys; the same interaction provided by radio buttons;
  • clicking a label will check and focus the related radio button;
  • labels can also display the outline (or any other focus indicator) based o the focused radio button.

You can find a preview in the image below:
GRcS8sec1I

Also, note how the focus ring disappears when I click outside of the element, like on any native element.

What do you think?

You did it! Great work.

At this point, you could self-assign this issue and go ahead in the dedicated branch.

Thank you!