The following covers developing for accessibility and keyboard/screen reader users. There is much, much more to making everything accessible for all people. More to be added soon.
“WAI-ARIA, the Accessible Rich Internet Applications Suite, defines a way to make Web content and Web applications more accessible to people with disabilities. It especially helps with dynamic content and advanced user interface controls developed with Ajax, HTML, JavaScript, and related technologies.” - https://www.w3.org/WAI/intro/aria
The first rule of using ARIA is not to use it. Only use it if absolutely necessary. It at all possible, use native HTML elements. Native controls have keyboard interactions and accessibility baked in from the start. Using these will save lots of time and make for way less code, making your application smaller and more manageable.
Test UI and components using a keyboard only. Can everything be reached just by using a keyboard? Can you see where you are on the page? If you can’t tell where the browser cursor currently is on screen, chances are there is some CSS removing the outline property on the element’s focus state. Try to add outline back in the styles, or be creative and create your own focus styles!
Test UI and components using a screen reader. Hit Cmd+F5 to turn on VoiceOver, the screen reader built in to Mac OS X. Start tabbing around, navigate using just a keyboard, and see if things are announced in a way that make sense. When focusable elements receive focus they are announced with the element type and label. For example, a link with the text “Save”, will be announced as, “link, Save”. A text input control with a label of “First name” will be announced as “First name, edit text.” If something doesn’t sound quite right, check the HTML document source. Chances are something is missing or the incorrect HTML element has been implemented.
- JAWS + IE, Firefox
- NVDA + IE, Firefox
- VoiceOver + Safari, Chrome
- VoiceOver (iOS) + Safari
- Chromevox + Chrome
- Orca + Firefox
- Talkback + Chrome, Firefox
Like rendering differences and bugs between browsers, screen readers also vary in how they announce page elements. Sometimes one will announce (or not announce at all) an element as one thing, and something else in another. When this happens, it’s best to read through the ARIA docs and try to find a property or state value that works well across all screen readers.
If there are custom controls in place, such as UI Popover, these may require some extra Javascript in order to add event listeners for specific keypresses and setting ARIA roles, properties, and states. When working with custom controls, look to the W3 ARIA Design Patterns (http://www.w3.org/TR/wai-aria-practices/#aria_ex) documentation page on how keyboard interaction should be implemented and which ARIA roles/properties need to be applied.
Just as important as elements being described correctly is the concept of focus management. This includes moving the browser cursor to specific elements after an action has taken place. This helps keyboard user experience and attempts to alleviate frustration. Ex., when closing a modal window, focus should return to the element which invoked the modal window to open. This way the user may continue through the document from the point where they launched the modal window.
- VoiceOver - http://www.apple.com/ca/accessibility/osx/voiceover/
- JAWS - http://www.freedomscientific.com/Products/Blindness/JAWS
- NVDA - http://www.nvaccess.org/
- Chromevox - http://www.chromevox.com/
- Orca - https://help.gnome.org/users/orca/stable/
- Talkback - https://support.google.com/talkback/
- A11Y Buzz - http://www.a11ybuzz.com/
- HTML5 Accessibility - http://www.html5accessibility.com/
- Basic screen reader commands for accessibility testing - https://www.paciellogroup.com/blog/2015/01/basic-screen-reader-commands-for-accessibility-testing/
- Periodic Table of ARIA 1.0 Roles - http://dylanb.github.io/periodic-aria-roles.html
- Links are not buttons. Neither are DIVs and SPANs - http://www.karlgroves.com/2013/05/14/links-are-not-buttons-neither-are-divs-and-spans/
- ARIA and Progressive Enhancement - http://alistapart.com/article/aria-and-progressive-enhancement
- How I Audit a Website for Accessibility - http://substantial.com/blog/2014/07/22/how-i-audit-a-website-for-accessibility/
- The little button that could - http://www.karlgroves.com/2014/05/02/the-little-button-that-could/
- An Alphabet of Accessibility Issues - https://the-pastry-box-project.net/anne-gibson/2014-july-31
- How to Write User Stories for Web Accessibility - http://www.interactiveaccessibility.com/blog/how-write-user-stories-accessibility-requirements#.VhgJtRNVhBc
- Using the tabindex attribute - https://www.paciellogroup.com/blog/2014/08/using-the-tabindex-attribute/
- Three rules for creating accessible forms - http://www.nomensa.com/blog/2010/three-rules-for-creating-accessible-forms/
- More Tips for Creating Accessible Forms - http://www.nomensa.com/blog/2014/more-tips-for-creating-accessible-forms
- Placeholders in Form Fields Are Harmful - http://www.nngroup.com/articles/form-design-placeholders/
- Accessibility APIs: A Key To Web Accessibility - http://www.smashingmagazine.com/2015/03/web-accessibility-with-accessibility-api/
- Web Accessibility and SEO - http://webaim.org/blog/web-accessibility-and-seo/
- JavaScript for Everybody | JSConf EU 2014 - https://www.youtube.com/watch?v=04DOp1F9Od4
- 30 Minutes or Less: The Magic of Automated Accessibility Testing | JSConf US 2015 - https://www.youtube.com/watch?v=-XUmf_RPF8k
- Videos of screen readers using ARIA - http://zomigi.com/blog/videos-of-screen-readers-using-aria-updated/
- HTML5 accessibility - https://vimeo.com/77860167
- Web Accessibility 101: Dragon NaturallySpeaking Demo - https://www.youtube.com/watch?v=kJKQmTumFP0
- LXJS 2013 - Designing for accessibility - https://www.youtube.com/watch?v=UOM5eY5hG-Q
- What even is a table? A quick look at Accessibility APIs - https://vimeo.com/139062429
- WAI-ARIA Design Patterns - http://www.w3.org/TR/wai-aria-practices/#aria_ex
- OpenAjax Examples - http://oaa-accessibility.org/examples/
- A11Y Project - http://a11yproject.com/patterns/
- Practical ARIA Examples - http://heydonworks.com/practical_aria_examples/
- HTML_CodeSniffer - http://squizlabs.github.io/HTML_CodeSniffer/
- tota11y - http://khan.github.io/tota11y/
- Tenon - http://www.tenon.io/
- WAVE Toolbar - https://chrome.google.com/webstore/detail/wave-evaluation-tool/jbbplnpkjmmeebjpijfedlgcdilocofh?utm_source=chrome-ntp-icon
- aXe - https://chrome.google.com/webstore/detail/axe/lhdoppojpmngadmnindnejefpokejbdd?utm_source=chrome-ntp-icon
- Accessibility Developer Tools - https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb?utm_source=chrome-ntp-icon
- NoCoffee - https://chrome.google.com/webstore/detail/nocoffee/jjeeggmbnhckmgdhmgdckeigabjfbddl?utm_source=chrome-ntp-icon