Let me be clear that I'm not against adding motion or delightful visual effects when the mouse moves around the page. However, there needs to be a clear and easy path for users to interact with all features using a keyboard. Here is why:
1. Power users. People who use a web app heavily for productivity don't want to move their hand back and forth from a keyboard to a mouse. Doing everything with a keyboard is preferred. If that functionality is available and intuitive, it will be used. In addition to the ability to navigate by keyboard, these users require the ability to see where their cursor focus is on screen at all times.
|web page on a tablet|
2. Navigating via tablet. Today, a lot of users will access a web page on a tablet device. Tablets have touch screens that are not able to simulate a hovering action as the mouse can. As such, all controls need to be visible and able to be activated by a touch, which is interpreted the same way as the click of the mouse or hitting the enter key.
3. Minor ailments. A lot of users suffer from minor ailments including arthritis, carpel tunnel syndrome, diminished dexterity or temporary injuries like sprained wrists. For these users, long periods of mousing can be excruciating. Making things available via keyboard allows these users to continue being productive while healing from and avoiding aggravating their injuries. In addition to the ability to navigate by keyboard, these users require the ability to see where their cursor focus is on screen at all times.
|using a switch|
|navigating with a screen reader|
5. Profound visual impairment. Users with profound visual impairment will typically use screen reading software to navigate a web page. Because they cannot see a pointer on screen, they need to be able to toggle through controls on a page using the keyboard. Additionally, all "active" elements like buttons, links and form fields need proper text labeling or alternatives, so they know what to expect when they activate the element. This is especially important with icons which need to be described to the screen reading software.