Accessibility is a hot topic on the web, and there are many emerging standards to help move in an accessible direction. We have CSS media types, alternative web pages with simpler navigation and high-contrast styling, alt and title tags, and the general move away from mixing style with substance.
Along with all of this, we have the relatively old standard of using the accesskey attribute on invokeable elements such as hyperlinks and form inputs. This allows us to attach a keyboard shortcut to elements in our webpage.
Unfortunately, this isn’t a widely used, or easily implemented standard. Although the accesskey attribute is widely supported, only one commonly-used browser (Opera) at the time of writing provides an easy way for users to see what accesskeys are enabled on a given site, and there is no widely-accepted standard for choosing which accesskeys perform which function.
However, with a little jiggery-pokery we can implement a simple way to show accesskeys on demand:
This link will bring you to this post’s permalink, and can be actuated with the accesskey “9”; in Firefox, you hold alt-shift and press 9.
The code for the above is pretty simple. First, the button:
The hyperlink itself (abbreviated):
<a href="https://jeremysmyth.com/...." title="Link to this post">This link</a> will bring you...
Finally, the javascript:
function showKeys() { if (document.styleSheets) { var sheet = document.styleSheets[0]; var len = sheet.cssRules.length; // reformatted to fit sheet.insertRule("[accesskey]:after {" + "font-weight: 700; " + "border-bottom: 1px blue dotted; " + "content: '[' attr(accesskey) ']';}" , len); } }
Clicking on the button calls the “showKeys()” function in the Javascript script block, which adds a style to the current stylesheet. The style automatically styles elements with the “accesskey” attribute, adding the value of that attribute after the element itself.
Put simply, it adds a styled [9] after the hyperlink, because (1) it has the “accesskey” attribute, and secondly, the “9” is the value of that attribute, as calculated by the attr() function.
Note: The above Javascript won’t currently work in Internet Explorer; for that, you’d need Microsoft’s addRule function rather than the standards-compliant insertRule I’ve used.