SlideShare a Scribd company logo
Web Accessibility for
Developers
a11yTO April 2014
Monika Piotrowicz (@monsika)
Monika
Piotrowicz
Front End Web Developer
Shopify
!
@monsika
@shopify
I’m just...
A regular Front End Developer...
!
!
!
So how’d I get here?
A short story, starring WCAG 2.0 AA
!
!
!
Today
• Introduction to accessibility
• Techniques you can implement today
• Introduction to screen readers & ARIA
• Testing tips
Web Accessibility
• “When sites are correctly designed,
developed and edited, all users can have
equal access to information and
functionality” - Wikipedia
• “Able to be easily obtained or used; easily
understood or appreciated” - Oxford Dictionary
• Accessibility ~ Usability
• All people can use an application, and it
should be easy to use for all people;
Accessibility by the #’s
rough
1 - CDC Summary Health Statistics for U.S. Adults: National Health Interview Survey, 2011
http://1.usa.gov/M6tObC (under 65/over 65)	

2 - Range worldwide prevalence of red-green color deficiency among men, 2012
http://1.usa.gov/M6tKsz
Group Population
Vision Problems 3-10%
Colorblindness 4-8%
Physical Functioning 8%
Cognitive Difficulty 6%
Hearing Difficulty 3-11%
Assistive Tools
• screen readers
• screen magnifiers
• keyboard-only
• braille display
• bumped font size
Me last year...
Go!
WCAG
The standard
http://www.w3.org/TR/WCAG20/
Understanding WCAG
http://www.w3.org/TR/UNDERSTANDING-WCAG20/
Techniques
http://www.w3.org/TR/WCAG20-TECHS/
Quick Reference
http://www.w3.org/WAI/WCAG20/quickref/
FAQ
http://www.w3.org/WAI/WCAG20/wcag2faq.html
Accessibility
just a checklist
!=
Starting out
Early accessibility considerations
First Steps
• functional keyboard-only
• fallbacks for visual information
• well-functioning forms
a11yTO - Web Accessibility for Developers
Keyboard Strategy
• obvious focus states (keep those outlines!)
a,
a:focus {
outline: none;
outline: 0;
}
Keyboard Strategy
✓ obvious focus states (keep those outlines!)
• keypress equivalents for :hover & click()
↳ :focus & keydown()
Keyboard Strategy
✓ obvious focus states (keep those outlines!)
✓ keypress equivalents for :hover & click()
↳ :focus & keydown()
• add tabIndex=0 & key events to non-focusable
elements
Keyboard Strategy
✓ obvious focus states (keep those outlines!)
✓ keypress equivalents for :hover & click()
↳ :focus & keydown()
✓ add tabIndex=0 & key events to non-focusable
elements
• avoid keyboard traps & wasting time
Keyboard Strategy
✓ obvious focus states (keep those outlines!)
✓ keypress equivalents for :hover & click()
↳ :focus & keydown()
✓ add tabIndex=0 & key events to non-focusable
elements
✓ avoid keyboard traps & wasting time
• HTML can get you there, FREE!
WebAIM http://bit.ly/M24Da2
Keyboard Events http://bit.ly/M241Br
Wanted: Free Events!
<span class="btn-style toggle-trigger">Click to Toggle</span>
!
<a href="#" class="btn-style toggle-trigger">Click to Toggle</a>
!
<button type="button" class="toggle-trigger">Click to Toggle</
button>
Use the button element http://bit.ly/1efaOO1
Links aren’t buttons http://bit.ly/1efaT4o
a11yTO - Web Accessibility for Developers
Visual Considerations
• start with a good font size & high contrast
• Contrast Checker Tool - http://bit.ly/1eeYZYh (by a fellow Shopify-er)
• Chrome Plugin - http://bit.ly/1ljQvFF
• Accessible colour palette how-to http://bit.ly/1fnbmJp
Visual Considerations
✓start with a good font size & high contrast
• Contrast Checker Tool - http://bit.ly/1eeYZYh (by a fellow Shopify-er)
• Chrome Plugin - http://bit.ly/1ljQvFF
• Accessible colour palette how-to http://bit.ly/1fnbmJp
• don’t rely on colour alone
• add legends and texture or symbols
Red-Green Colorblind
(Deuteranopia)
Visual Considerations
✓start with a good font size & high contrast
• Contrast Checker Tool - http://bit.ly/1eeYZYh (by a fellow Shopify-er)
• Chrome Plugin - http://bit.ly/1ljQvFF
• Accessible colour palette how-to http://bit.ly/1fnbmJp
✓don’t rely on colour alone
• add legends and texture or symbols
• all images have a meaningful alt attribute
• W3C How to write Alt Text http://bit.ly/1aKwIOg
• More from A List Apart http://bit.ly/1aKwRkI
a11yTO - Web Accessibility for Developers
• Every form field includes a real label
<label for="[INPUT ID]">
!
!
Forms
✓ Every form field includes a real label
<label for="[INPUT ID]">
• Labels can include help, required, error text
!
!
!
Forms
✓ Every form field includes a real label
<label for="[INPUT ID]">
✓ Labels can include help, required, error text
• Provide meaningful message on form error
!
!
WebAIM Forms http://bit.ly/1aKw2bM
WebAIM Validation http://bit.ly/1aKw6bB
Accessible Form Labeling http://bit.ly/1aKw83b
Forms
a11yTO - Web Accessibility for Developers
boldly go...
The SCREEN READER
TRY ONE!!
How else can you expect to build for one?
NVDA
VoiceOver TalkBack
JAWS
How do they work?
• announce generated HTML in source
order
How do they work?
• announce generated HTML in source
order
• Use keyboard to navigate and find content
• Highly customizable
Screen reader 101
!
• 97.6% of screen reader users have JS
enabled!1
1 - WebAIM Survey http://bit.ly/1nqd4fp
HTML COUNTS!
• Shortcuts drill down to headings,
landmarks, lists, links, etc
• Do your main content areas have headings?
• Are they descriptive?
• Do they follow a hierarchy? (h1 >> h6)
Headings
Document Outline http://bit.ly/1ef9ScA The Section Element http://bit.ly/1ef9TNN
Accessible Headings http://bit.ly/1ef9QBr Using Sections http://bit.ly/1ef9Ykx
H1 Blog
H2 Recent Articles
H3 Article Title
H3 Article Title
H3 Article Title
H2 About Me
H3 Contact Me
H3 Footer Title
• Main way screen reader users navigate
• img with empty alt attribute alt=""
SR’s ignore...
• :before content, :after content* (sort of)
• display: none;
• visibility: hidden;
* in most cases, so assume it won’t be announced
Accessible Icon Fonts http://bit.ly/1efabUP
.icon-star:before {
content: “★”;
}
• keep in mind for icons and icon fonts!
• content “hidden” with opacity, z-index, height
• off-screen positioning (text-indent, top, left)
.sr-only,
.visuallyhidden {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
width: 1px;
}
* as seen in HTML5 BP, Twitter Bootstrap, etc.
WebAIM Invisible Content http://bit.ly/1efaij8
• CSS clipping*
SR’s won’t ignore
Beyond the basics
There’s gotta be more to screen readers than just
that, right?
a11yTO - Web Accessibility for Developers
• Applied directly to HTML
!
• Does not affect styles or
non-SR behaviour
• Roles, states & properties
• Semantic information and better
interactions for screen readers
ARIA
• Part of HTML5 spec
HTML5 Spec (W3C) http://bit.ly/1aKxXx5
ARIA Spec (W3C) http://bit.ly/1aKya3f
Roles
• Create new semantic meaning for
elements via “role-” attribute
• Once set, they don’t change
<nav role="navigation">
!
<article role="article">
!
<div role="tablist">
!
<div role="combobox">
Landmark Roles
Define top-level page sections for easy navigation
!
•main
•banner
•navigation
•search
•complimentary
•contentinfo
•form
Using Landmarks http://bit.ly/1aKyuyQ
WebAIM Landmarks http://bit.ly/1aKytem
Role
Landmark Roles
Define top-level page sections for easy navigation
!
•main ........ <main>
•banner ........ <header>
•navigation ........ <nav>
•search ........ <form> (search form)
•complimentary ........ <aside>
•contentinfo ........ <footer>
•form
Role HTML 5
Using Landmarks http://bit.ly/1aKyuyQ
WebAIM Landmarks http://bit.ly/1aKytem
Include all content
in a landmark
wrapper elements with
role="landmark"
Widget Roles
Semantic meaning to your custom components
•tooltip
•slider
•dialog
•tab
•progressbar
•combobox
•menu
•alert
.. and many more!
???
<ul class="tab-controls">
<li>
<a href="#first-tab" class="current-item">Panel 1</a>
</li>
<li>
<a href="#second-tab" class="current-item">Panel 2</a>
</li>
<li>
<a href="#third-tab" class="current-item">Panel 3</a>
</li>
</ul>
<div id="tab-container">
<div class="tab-panel" id="first-tab">
<div class="tab-contents">
<p>Tab Contents</p>
</div>
</div>
<div class="tab-panel" id="second-tab">
<div class="tab-contents">
<p>Tab Contents</p>
</div>
</div>
<div class="tab-panel" id="third-tab">
<div class="tab-contents">
<p>Tab Contents</p>
</div>
</div>
</div>
???
<ul class="tab-controls">
<li>
<a href="#first-tab" class="current-item">Panel 1</a>
</li>
<li>
<a href="#second-tab" class="current-item">Panel 2</a>
</li>
<li>
<a href="#third-tab" class="current-item">Panel 3</a>
</li>
</ul>
<div id="tab-container">
<div class="tab-panel" id="first-tab">
<div class="tab-contents">
<p>Tab Contents</p>
</div>
</div>
<div class="tab-panel" id="second-tab">
<div class="tab-contents">
<p>Tab Contents</p>
</div>
</div>
<div class="tab-panel" id="third-tab">
<div class="tab-contents">
<p>Tab Contents</p>
</div>
</div>
</div>
<ul class="tab-controls" role="tablist">
<li>
<a href="#first-tab" class="current-
item" role="tab">Panel 1</a>
!
<div id="tab-container">
<div class="tab-panel" id="first-tab"
role="tab-panel">
• Describe relationships - between content
& between user interactions
• updated via JS on UI changes
• attribute starts with “aria-” prefix
States & Properties
<section aria-labelledby="MainHeading">
!
<input aria-label="first 3 digits" aria-
describedby="PhoneHelpText">
!
<button aria-expanded="true" class="accordion-
toggle" aria-controls="Accordion">
!
<div id=“Accordion" aria-hidden="false" >
Content Relationships
• Semantically link labels to content or add
them when missing
• aria-labelledby, aria-label
<section aria-labelledby="HeadingAbout">
<h1 id="HeadingAbout">About Potato Chips</h1>
<p>....
Make the most of landmarks http://bit.ly/M1TFSb
Content Relationships
• Semantically link labels to content or add
them when missing
• aria-labelledby, aria-label
<nav role="navigation" aria-label="Chip Section Navigation">
<ul>
<li>
<a href="/types">Flavors</a>
</li>
It's just HTML!
.elem[aria-hidden = "false"] {
display: block;
}
!
.elem[aria-invalid ="false"] {
background: #999;
}
!
.elem[aria-expanded = "true"] {
height: 100%;
}
The more you know
a11yTO - Web Accessibility for Developers
Putting it all together
• jQueryUI https://jqueryui.com/
• Practical ARIA Examples http://bit.ly/1bhMqBg
• HTML5 & ARIA Design Patterns http://bit.ly/1bhMlNZ
• Accessible Forms with ARIA http://bit.ly/1bhMv7M
• Bootstrap Accessibility Plugin (PayPal) http://bit.ly/1bhM8dy
Using ARIA Wisely
• ARIA is a bridge, not a replacement.
• USE plain HTML if you can
• Not magic and makes no promises
• Events, focus management, keyboard support, and
meaningful structure is still up to you
• Only way to know for sure... TEST
ARIA Resources
W3C Intro
http://www.w3.org/TR/wai-aria-primer/
W3C How-to with design patterns
http://www.w3.org/TR/wai-aria-practices/
W3C Supporting Info for developers
http://www.w3.org/TR/aria-in-html/
WEBAIM Introduction
http://webaim.org/techniques/aria/
Warnings and Perspectives
http://alistapart.com/article/the-accessibility-of-wai-aria
General Information
https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA
ARIA Validation
http://validator.nu
Testing
Automated Tools
• WebAIM WAVE (FF) http://wave.webaim.org/toolbar/
• Accessibility Developer Tools (Chrome) http://bit.ly/1fW0W0A
• Web Developer Toolbar (Chrome & FF) http://bit.ly/1dA2JmY
• Quail Project quailjs.org
a11yTO - Web Accessibility for Developers
Manual Testing
• disable all images
• test with just a keyboard
• load it in a screen reader
• load it in another screen reader
10 Tips anyone can use http://bit.ly/1efaA9N
6 Tests anyone can do http://bit.ly/1efaC1c
Does your page make sense?
Is it usable ?
Unsolicited Advice
• Start small, there’s still a big impact
• Prioritize areas/pages
• main navigation?
• contact us form?
• homepage?
• Document as you go
Final Thoughts
What I’ve learned
• Bake it in, don’t tack it on
• Awesome and helpful community
• You may find it hard to stop
Behind all these checklists, rules, and
regulations, there are people just trying
to use your site.
So make it useable, for everybody.
Thanks!
@monsika
More Resources
More Resources
General
HTML5 Accessibility http://bit.ly/LVR8YX
Accessibility Evaluation Quick Reference http://bit.ly/M6tgCF
Mozilla Dev Network ARIA http://mzl.la/M6u9ez
Apple Accessibility Resources http://bit.ly/M6tkSL
Screen Readers
WebAIM Screen Reader Testing http://bit.ly/M6sLIH
Videos of Screen Readers In Use http://bit.ly/M6sR39
How browsers interact with screen readers http://bit.ly/M6sUfi
NVDA resources
WebAIM NVDA http://bit.ly/M6sZj5
WebAIM NVDA Shortcuts http://bit.ly/M6t0n2
Using NVDA and FF to test pages http://bit.ly/M6t6Lu
Installing NVDA in a VM http://bit.ly/M6t8D4
VoiceOver resources
WebAIM VoiceOver http://bit.ly/M6tbyS
Apple VoiceOver User Guide http://bit.ly/M6tolE
Apple Developer Accessibility Guide http://bit.ly/M6ttpe
JAWS resources
WebAIM JAWS http://bit.ly/M6tw4D
WebAIM JAWS Shortcuts http://bit.ly/M6sBRM
Community & Blogs
@webaim
@paciellogroup
@stevefaulkner
@dequesystems
!
www.webaim.org
www.a11yproject.com
www.accessibleculture.org
www.webaxe.org
www.simplyaccessible.com/archives
!
an `a11y` meetup near you! http://bit.ly/1bhN3dW

More Related Content

What's hot (20)

PPT
IWMW 2002: Web standards briefing (session C2)
IWMW
 
PDF
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dee Sadler
 
PPTX
Building jQuery Mobile Web Apps
Operation Mobile
 
PDF
Responsive & Responsible Web Design in DNN
gravityworksdd
 
PPTX
Responsive Design Overview for UB CIT
Adrian Roselli
 
PDF
State of jQuery '09
jeresig
 
PPT
Mobile Information Architecture
Christian Crumlish
 
PDF
Responsive Web Design: Clever Tips and Techniques
Vitaly Friedman
 
PDF
Win j svsphonegap-damyan-petev-mihail-mateev
Mihail Mateev
 
PDF
jQuery Mobile Introduction
Joris Graaumans
 
KEY
Build Accessibly - Community Day 2012
Karen Mardahl
 
PDF
How to create accessible websites - Web Accessibility Summit
Rachel Cherry
 
PDF
Web Development for UX Designers
Ashlimarie
 
PDF
Introduction to jQuery Mobile - Web Deliver for All
Marc Grabanski
 
PDF
Modern Web Development
Robert Nyman
 
PPTX
jQuery Conference Chicago - September 2014
dmethvin
 
PDF
jQueryMobile Jump Start
Haim Michael
 
PPTX
Find your path in the web industry
Jon Thomas
 
PDF
State of jQuery June 2013 - Portland
dmethvin
 
PDF
Mobile Web & HTML5 Performance Optimization
Maximiliano Firtman
 
IWMW 2002: Web standards briefing (session C2)
IWMW
 
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Dee Sadler
 
Building jQuery Mobile Web Apps
Operation Mobile
 
Responsive & Responsible Web Design in DNN
gravityworksdd
 
Responsive Design Overview for UB CIT
Adrian Roselli
 
State of jQuery '09
jeresig
 
Mobile Information Architecture
Christian Crumlish
 
Responsive Web Design: Clever Tips and Techniques
Vitaly Friedman
 
Win j svsphonegap-damyan-petev-mihail-mateev
Mihail Mateev
 
jQuery Mobile Introduction
Joris Graaumans
 
Build Accessibly - Community Day 2012
Karen Mardahl
 
How to create accessible websites - Web Accessibility Summit
Rachel Cherry
 
Web Development for UX Designers
Ashlimarie
 
Introduction to jQuery Mobile - Web Deliver for All
Marc Grabanski
 
Modern Web Development
Robert Nyman
 
jQuery Conference Chicago - September 2014
dmethvin
 
jQueryMobile Jump Start
Haim Michael
 
Find your path in the web industry
Jon Thomas
 
State of jQuery June 2013 - Portland
dmethvin
 
Mobile Web & HTML5 Performance Optimization
Maximiliano Firtman
 

Similar to a11yTO - Web Accessibility for Developers (20)

PPTX
How you can start building accessible websites today (... and why!)
nrasul
 
PDF
P.S. I love you
Oleksandr Strikha
 
PPTX
Workflow Essentials for Web Development
Xavier Porter
 
PDF
Building An Accessible Site from the Ground Up
Russell Heimlich
 
PPTX
Accessibility and universal usability
Sarah Hudson
 
PPSX
Accessible Design with HTML5 - HTML5DevConf.com May 21st San Francisco, 2012 ...
Raj Lal
 
PPTX
Website development accessibility
Ilesh Mistry
 
PPTX
WordPress Accessibility - WordCamp Buffalo 2016
Adrian Roselli
 
PDF
Accessibility
Ynon Perek
 
PPTX
Accessibility with Single Page Apps
Ross Mullen
 
PDF
Building a better, accessible web
Matt Stow
 
PPTX
Web accessibility
Afif Alfiano
 
PPTX
Introduction to accessibility
Joseph McLarty
 
PDF
Four Principles of Accessibility UK Version
Homer Gaines
 
PPTX
Selfish Accessibility — Harbour Front HK
Adrian Roselli
 
PPTX
A Primer on Web Accessibility for Teams
Mikey Ilagan
 
PPTX
Selfish Accessibility — CodeDaze
Adrian Roselli
 
PPTX
A Half Day Workshop on Building Accessible Websites For People With Disabilities
Aayush Shrestha
 
PDF
Web Accessibility Gone Wild
Jared Smith
 
PDF
Web Accessibility Gone Wild (Now Even MORE Wilder!)
Jared Smith
 
How you can start building accessible websites today (... and why!)
nrasul
 
P.S. I love you
Oleksandr Strikha
 
Workflow Essentials for Web Development
Xavier Porter
 
Building An Accessible Site from the Ground Up
Russell Heimlich
 
Accessibility and universal usability
Sarah Hudson
 
Accessible Design with HTML5 - HTML5DevConf.com May 21st San Francisco, 2012 ...
Raj Lal
 
Website development accessibility
Ilesh Mistry
 
WordPress Accessibility - WordCamp Buffalo 2016
Adrian Roselli
 
Accessibility
Ynon Perek
 
Accessibility with Single Page Apps
Ross Mullen
 
Building a better, accessible web
Matt Stow
 
Web accessibility
Afif Alfiano
 
Introduction to accessibility
Joseph McLarty
 
Four Principles of Accessibility UK Version
Homer Gaines
 
Selfish Accessibility — Harbour Front HK
Adrian Roselli
 
A Primer on Web Accessibility for Teams
Mikey Ilagan
 
Selfish Accessibility — CodeDaze
Adrian Roselli
 
A Half Day Workshop on Building Accessible Websites For People With Disabilities
Aayush Shrestha
 
Web Accessibility Gone Wild
Jared Smith
 
Web Accessibility Gone Wild (Now Even MORE Wilder!)
Jared Smith
 
Ad

Recently uploaded (20)

PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PPTX
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PDF
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PDF
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
PDF
Python basic programing language for automation
DanialHabibi2
 
PDF
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
PPTX
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
July Patch Tuesday
Ivanti
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
OpenID AuthZEN - Analyst Briefing July 2025
David Brossard
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
NewMind AI - Journal 100 Insights After The 100th Issue
NewMind AI
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Complete JavaScript Notes: From Basics to Advanced Concepts.pdf
haydendavispro
 
Python basic programing language for automation
DanialHabibi2
 
Timothy Rottach - Ramp up on AI Use Cases, from Vector Search to AI Agents wi...
AWS Chicago
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
COMPARISON OF RASTER ANALYSIS TOOLS OF QGIS AND ARCGIS
Sharanya Sarkar
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
July Patch Tuesday
Ivanti
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
Ad

a11yTO - Web Accessibility for Developers

  • 1. Web Accessibility for Developers a11yTO April 2014 Monika Piotrowicz (@monsika)
  • 2. Monika Piotrowicz Front End Web Developer Shopify ! @monsika @shopify
  • 3. I’m just... A regular Front End Developer... ! ! !
  • 4. So how’d I get here? A short story, starring WCAG 2.0 AA ! ! !
  • 5. Today • Introduction to accessibility • Techniques you can implement today • Introduction to screen readers & ARIA • Testing tips
  • 6. Web Accessibility • “When sites are correctly designed, developed and edited, all users can have equal access to information and functionality” - Wikipedia • “Able to be easily obtained or used; easily understood or appreciated” - Oxford Dictionary • Accessibility ~ Usability • All people can use an application, and it should be easy to use for all people;
  • 7. Accessibility by the #’s rough 1 - CDC Summary Health Statistics for U.S. Adults: National Health Interview Survey, 2011 http://1.usa.gov/M6tObC (under 65/over 65) 2 - Range worldwide prevalence of red-green color deficiency among men, 2012 http://1.usa.gov/M6tKsz Group Population Vision Problems 3-10% Colorblindness 4-8% Physical Functioning 8% Cognitive Difficulty 6% Hearing Difficulty 3-11% Assistive Tools • screen readers • screen magnifiers • keyboard-only • braille display • bumped font size
  • 9. Go!
  • 13. First Steps • functional keyboard-only • fallbacks for visual information • well-functioning forms
  • 15. Keyboard Strategy • obvious focus states (keep those outlines!)
  • 17. Keyboard Strategy ✓ obvious focus states (keep those outlines!) • keypress equivalents for :hover & click() ↳ :focus & keydown()
  • 18. Keyboard Strategy ✓ obvious focus states (keep those outlines!) ✓ keypress equivalents for :hover & click() ↳ :focus & keydown() • add tabIndex=0 & key events to non-focusable elements
  • 19. Keyboard Strategy ✓ obvious focus states (keep those outlines!) ✓ keypress equivalents for :hover & click() ↳ :focus & keydown() ✓ add tabIndex=0 & key events to non-focusable elements • avoid keyboard traps & wasting time
  • 20. Keyboard Strategy ✓ obvious focus states (keep those outlines!) ✓ keypress equivalents for :hover & click() ↳ :focus & keydown() ✓ add tabIndex=0 & key events to non-focusable elements ✓ avoid keyboard traps & wasting time • HTML can get you there, FREE! WebAIM http://bit.ly/M24Da2 Keyboard Events http://bit.ly/M241Br
  • 21. Wanted: Free Events! <span class="btn-style toggle-trigger">Click to Toggle</span> ! <a href="#" class="btn-style toggle-trigger">Click to Toggle</a> ! <button type="button" class="toggle-trigger">Click to Toggle</ button> Use the button element http://bit.ly/1efaOO1 Links aren’t buttons http://bit.ly/1efaT4o
  • 23. Visual Considerations • start with a good font size & high contrast • Contrast Checker Tool - http://bit.ly/1eeYZYh (by a fellow Shopify-er) • Chrome Plugin - http://bit.ly/1ljQvFF • Accessible colour palette how-to http://bit.ly/1fnbmJp
  • 24. Visual Considerations ✓start with a good font size & high contrast • Contrast Checker Tool - http://bit.ly/1eeYZYh (by a fellow Shopify-er) • Chrome Plugin - http://bit.ly/1ljQvFF • Accessible colour palette how-to http://bit.ly/1fnbmJp • don’t rely on colour alone • add legends and texture or symbols
  • 26. Visual Considerations ✓start with a good font size & high contrast • Contrast Checker Tool - http://bit.ly/1eeYZYh (by a fellow Shopify-er) • Chrome Plugin - http://bit.ly/1ljQvFF • Accessible colour palette how-to http://bit.ly/1fnbmJp ✓don’t rely on colour alone • add legends and texture or symbols • all images have a meaningful alt attribute • W3C How to write Alt Text http://bit.ly/1aKwIOg • More from A List Apart http://bit.ly/1aKwRkI
  • 28. • Every form field includes a real label <label for="[INPUT ID]"> ! ! Forms
  • 29. ✓ Every form field includes a real label <label for="[INPUT ID]"> • Labels can include help, required, error text ! ! ! Forms
  • 30. ✓ Every form field includes a real label <label for="[INPUT ID]"> ✓ Labels can include help, required, error text • Provide meaningful message on form error ! ! WebAIM Forms http://bit.ly/1aKw2bM WebAIM Validation http://bit.ly/1aKw6bB Accessible Form Labeling http://bit.ly/1aKw83b Forms
  • 33. TRY ONE!! How else can you expect to build for one? NVDA VoiceOver TalkBack JAWS
  • 34. How do they work? • announce generated HTML in source order
  • 35. How do they work? • announce generated HTML in source order
  • 36. • Use keyboard to navigate and find content • Highly customizable Screen reader 101 ! • 97.6% of screen reader users have JS enabled!1 1 - WebAIM Survey http://bit.ly/1nqd4fp
  • 37. HTML COUNTS! • Shortcuts drill down to headings, landmarks, lists, links, etc
  • 38. • Do your main content areas have headings? • Are they descriptive? • Do they follow a hierarchy? (h1 >> h6) Headings Document Outline http://bit.ly/1ef9ScA The Section Element http://bit.ly/1ef9TNN Accessible Headings http://bit.ly/1ef9QBr Using Sections http://bit.ly/1ef9Ykx H1 Blog H2 Recent Articles H3 Article Title H3 Article Title H3 Article Title H2 About Me H3 Contact Me H3 Footer Title • Main way screen reader users navigate
  • 39. • img with empty alt attribute alt="" SR’s ignore... • :before content, :after content* (sort of) • display: none; • visibility: hidden; * in most cases, so assume it won’t be announced Accessible Icon Fonts http://bit.ly/1efabUP .icon-star:before { content: “★”; } • keep in mind for icons and icon fonts!
  • 40. • content “hidden” with opacity, z-index, height • off-screen positioning (text-indent, top, left) .sr-only, .visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; } * as seen in HTML5 BP, Twitter Bootstrap, etc. WebAIM Invisible Content http://bit.ly/1efaij8 • CSS clipping* SR’s won’t ignore
  • 41. Beyond the basics There’s gotta be more to screen readers than just that, right?
  • 43. • Applied directly to HTML ! • Does not affect styles or non-SR behaviour • Roles, states & properties • Semantic information and better interactions for screen readers ARIA • Part of HTML5 spec HTML5 Spec (W3C) http://bit.ly/1aKxXx5 ARIA Spec (W3C) http://bit.ly/1aKya3f
  • 44. Roles • Create new semantic meaning for elements via “role-” attribute • Once set, they don’t change <nav role="navigation"> ! <article role="article"> ! <div role="tablist"> ! <div role="combobox">
  • 45. Landmark Roles Define top-level page sections for easy navigation ! •main •banner •navigation •search •complimentary •contentinfo •form Using Landmarks http://bit.ly/1aKyuyQ WebAIM Landmarks http://bit.ly/1aKytem Role
  • 46. Landmark Roles Define top-level page sections for easy navigation ! •main ........ <main> •banner ........ <header> •navigation ........ <nav> •search ........ <form> (search form) •complimentary ........ <aside> •contentinfo ........ <footer> •form Role HTML 5 Using Landmarks http://bit.ly/1aKyuyQ WebAIM Landmarks http://bit.ly/1aKytem
  • 47. Include all content in a landmark wrapper elements with role="landmark"
  • 48. Widget Roles Semantic meaning to your custom components •tooltip •slider •dialog •tab •progressbar •combobox •menu •alert .. and many more!
  • 49. ??? <ul class="tab-controls"> <li> <a href="#first-tab" class="current-item">Panel 1</a> </li> <li> <a href="#second-tab" class="current-item">Panel 2</a> </li> <li> <a href="#third-tab" class="current-item">Panel 3</a> </li> </ul> <div id="tab-container"> <div class="tab-panel" id="first-tab"> <div class="tab-contents"> <p>Tab Contents</p> </div> </div> <div class="tab-panel" id="second-tab"> <div class="tab-contents"> <p>Tab Contents</p> </div> </div> <div class="tab-panel" id="third-tab"> <div class="tab-contents"> <p>Tab Contents</p> </div> </div> </div>
  • 50. ??? <ul class="tab-controls"> <li> <a href="#first-tab" class="current-item">Panel 1</a> </li> <li> <a href="#second-tab" class="current-item">Panel 2</a> </li> <li> <a href="#third-tab" class="current-item">Panel 3</a> </li> </ul> <div id="tab-container"> <div class="tab-panel" id="first-tab"> <div class="tab-contents"> <p>Tab Contents</p> </div> </div> <div class="tab-panel" id="second-tab"> <div class="tab-contents"> <p>Tab Contents</p> </div> </div> <div class="tab-panel" id="third-tab"> <div class="tab-contents"> <p>Tab Contents</p> </div> </div> </div> <ul class="tab-controls" role="tablist"> <li> <a href="#first-tab" class="current- item" role="tab">Panel 1</a> ! <div id="tab-container"> <div class="tab-panel" id="first-tab" role="tab-panel">
  • 51. • Describe relationships - between content & between user interactions • updated via JS on UI changes • attribute starts with “aria-” prefix States & Properties <section aria-labelledby="MainHeading"> ! <input aria-label="first 3 digits" aria- describedby="PhoneHelpText"> ! <button aria-expanded="true" class="accordion- toggle" aria-controls="Accordion"> ! <div id=“Accordion" aria-hidden="false" >
  • 52. Content Relationships • Semantically link labels to content or add them when missing • aria-labelledby, aria-label <section aria-labelledby="HeadingAbout"> <h1 id="HeadingAbout">About Potato Chips</h1> <p>.... Make the most of landmarks http://bit.ly/M1TFSb
  • 53. Content Relationships • Semantically link labels to content or add them when missing • aria-labelledby, aria-label <nav role="navigation" aria-label="Chip Section Navigation"> <ul> <li> <a href="/types">Flavors</a> </li>
  • 54. It's just HTML! .elem[aria-hidden = "false"] { display: block; } ! .elem[aria-invalid ="false"] { background: #999; } ! .elem[aria-expanded = "true"] { height: 100%; } The more you know
  • 56. Putting it all together • jQueryUI https://jqueryui.com/ • Practical ARIA Examples http://bit.ly/1bhMqBg • HTML5 & ARIA Design Patterns http://bit.ly/1bhMlNZ • Accessible Forms with ARIA http://bit.ly/1bhMv7M • Bootstrap Accessibility Plugin (PayPal) http://bit.ly/1bhM8dy
  • 57. Using ARIA Wisely • ARIA is a bridge, not a replacement. • USE plain HTML if you can • Not magic and makes no promises • Events, focus management, keyboard support, and meaningful structure is still up to you • Only way to know for sure... TEST
  • 58. ARIA Resources W3C Intro http://www.w3.org/TR/wai-aria-primer/ W3C How-to with design patterns http://www.w3.org/TR/wai-aria-practices/ W3C Supporting Info for developers http://www.w3.org/TR/aria-in-html/ WEBAIM Introduction http://webaim.org/techniques/aria/ Warnings and Perspectives http://alistapart.com/article/the-accessibility-of-wai-aria General Information https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA ARIA Validation http://validator.nu
  • 60. Automated Tools • WebAIM WAVE (FF) http://wave.webaim.org/toolbar/ • Accessibility Developer Tools (Chrome) http://bit.ly/1fW0W0A • Web Developer Toolbar (Chrome & FF) http://bit.ly/1dA2JmY • Quail Project quailjs.org
  • 62. Manual Testing • disable all images • test with just a keyboard • load it in a screen reader • load it in another screen reader 10 Tips anyone can use http://bit.ly/1efaA9N 6 Tests anyone can do http://bit.ly/1efaC1c Does your page make sense? Is it usable ?
  • 63. Unsolicited Advice • Start small, there’s still a big impact • Prioritize areas/pages • main navigation? • contact us form? • homepage? • Document as you go
  • 65. What I’ve learned • Bake it in, don’t tack it on • Awesome and helpful community • You may find it hard to stop
  • 66. Behind all these checklists, rules, and regulations, there are people just trying to use your site. So make it useable, for everybody.
  • 69. More Resources General HTML5 Accessibility http://bit.ly/LVR8YX Accessibility Evaluation Quick Reference http://bit.ly/M6tgCF Mozilla Dev Network ARIA http://mzl.la/M6u9ez Apple Accessibility Resources http://bit.ly/M6tkSL Screen Readers WebAIM Screen Reader Testing http://bit.ly/M6sLIH Videos of Screen Readers In Use http://bit.ly/M6sR39 How browsers interact with screen readers http://bit.ly/M6sUfi NVDA resources WebAIM NVDA http://bit.ly/M6sZj5 WebAIM NVDA Shortcuts http://bit.ly/M6t0n2 Using NVDA and FF to test pages http://bit.ly/M6t6Lu Installing NVDA in a VM http://bit.ly/M6t8D4 VoiceOver resources WebAIM VoiceOver http://bit.ly/M6tbyS Apple VoiceOver User Guide http://bit.ly/M6tolE Apple Developer Accessibility Guide http://bit.ly/M6ttpe JAWS resources WebAIM JAWS http://bit.ly/M6tw4D WebAIM JAWS Shortcuts http://bit.ly/M6sBRM