Select keyboard controls

I was recently given a design that included a customised select. Since that’s currently only available in the most recent version of Chrome, I went looking for libraries and instructions on how to create your own select. And I came across a problem: none of them talked about the keyboard controls in a way that matched with how select works for me with the keyboard. Until I considered that I was using Firefox and most people use Chrome. Turns out they don’t work identically. So I went through the main browsers and documented what did what.
Same for all browsers
Most keyboard controls are the same in all browsers.
When select is closed:
Enter: does nothing
Space: opens select
Tab: goes to next tabbable element
Shift + tab: goes to previous tabbable element
Down arrow: opens select
Up arrow: opens select
Any letter key: selects first/next option that starts with that letter
When select is open:
Enter: selects focused option and closes select
Escape: closes select
Down arrow: focuses next option
Up arrow: focuses previous option
Home: focuses option at top of list
End: focuses option at bottom of list
Any letter key: selects first/next option that starts with that letter
Different in different browsers
I tested in Firefox, Chrome, Safari and Opera, all on a Mac. Although a Mac has different keyboard shortcuts to Windows and Linux, navigating a website doesn’t seem to be any different on a Mac.
When select is closed
Escape
Firefox: goes to next tabbable element
The rest: does nothing
Page down
Firefox: selects option one page down
The rest: does nothing
Page up
Firefox: selects option one page up
The rest: does nothing
Home
Firefox: selects option at top of list
The rest: does nothing
End
Firefox: selects option at bottom of list
The rest: does nothing
When select is open
Space
Firefox: does nothing
The rest: selects focused option and closes select
Tab
Firefox: selects focused option and closes select
The rest: selects random option
Shift + tab
Firefox: selects focused option and closes select
The rest: selects random option
Page down
Firefox: focuses option one page down
The rest: focuses option at bottom of list
Page up
Firefox: focuses option one page up
The rest: focuses option at top of list
Subscribe to my newsletter
Read articles from Nic directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Nic
Nic
Front End Developer. I like problem solving and making things pretty. I also like red.