Accessibility of Rich Internet

Download Report

Transcript Accessibility of Rich Internet

Hans Hillen (TPG)
Steve Faulkner (TPG)
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
1
New Solutions
New Problems
will be a beautiful thing
 What is meant by support?
oFeatures provided
oFeatures implemented
oFeatures implemented with accessibility
support
• In Browsers
• In Assistive Technology
 Features are implemented in browsers
o Useful site - When can I use...
 Does not mean features are usable by all users even
if they use a browser that ‘supports’ a feature.
 Firefox video support
 No major browser has full accessibility support for
HTML5 video
 Providing full accessibility support means jumping
through hoops:
 Scripted controls
 Scripted captioning and audio description
 All major browser now support HTML5 video
 Meaning you can watch/hear a video and use the
controls if you can see, hear and use a mouse
Terril Thompson:
“That all sounds like a lot of work. Isn't HTML5 <video>
supposed to be easy?”
“Ultimately though ... HTML5 <video> is easy. A novice web
developer can pop a video onto their web page in less
than a minute with some very simple HTML markup.
Unfortunately if they do that today it won't be accessible
without a little additional sweat. Someday, hopefully,
browsers will do all of this work for us, and every video
will be accessible. That's what we're working toward.”
 All major browser now support HTML5 canvas
 Meaning dynamic images, animation, games and
content is available without plug-ins
 Only one major browser supports HTML5 canvas
accessibility
 And only partially
 The accessibility features of canvas are still being
specified.
 What is implemented in IE9 gives an idea of how
canvas accessibility will work.
 Example
 What’s it mean?
o Conveys semantics required to understand and interact.
o Can be used in a device independent way
o Uses common design patterns
o Accomodates browser & OS accessibility features
o interoperable
Accessibility API
Input device
browser
role=button
state=focused
value= search
action=press
Accessibility APIs
roles
states
properties
interaction
MSAA
Iaccessible2
UI automation
AX
STK
+ device independent
interaction
MSAA inspect.32.exe or inspect.exe
 Accessibility features for a button a whirlwind tour
 When implemented and implemented accessibly,
will make it a lot easier to provide accessible UI’s
 Current implementation is patchy and where
implemented, accessibility support is poor.
 Lets take a quick tour: HTML5 form controls
 Minor addition to HTML5
 Yet brings new headaches for developers and users
o Poor contrast
o disappears
o Results in different accessible labels across browsers and
labelling methods
o HTML5 Accessibility Chops: the placeholder attribute
 ARIA defines roles that act as landmarks for intra
page navigation and identification of common
content areas
 HTML5 defines section elements for common
semantic features of pages, some old some new
 There is some overlap
 HTML5 section elements are largely unimplemented
(accessible).
o FireFox has some experimental implementation
 Examples of use
o Bruce Lawson’s site
o Wordpress
 Mappings between section elements and landmark
roles:
o HTML5 Accessibility Chops: section elements
 Landmark roles identify important sections commonly
found in web pages:
o Applied to container elements
o Allow AT users to quickly see which sections a page has and
navigate to individual sections
o In JAWS, use the following commands:
• ; (semicolon):jump to next landmark
• Shift + ;(semicolon): jump to previous landmark
• Ctrl + Ins + ;(semicolon): Show list of available landmarks
o In NVDA use
• D to jump to next landmark
• Shift + D to previous landmark
• NVDA+f7 Show list of available landmarks

Available Landmark Roles
 Banner: A region that contains the primary heading or web site title. (site







logo, login details, etc.)
Search: The search tool of a web document.
Navigation: The documents Navigation menus and links.
Main: The main content of web document.
Form: contains a collection of items and objects that, as a whole,
combine to create a form.
Complementary: content that has meaning outside the page as well
(e.g. a sidebar with related articles).
Contentinfo: Metadata that applies to the parent document (e.g. copy
right disclaimers, company info).
Application: See next slide.
Using WAI ARIA Landmark Roles

Normally, Screen readers browse in ‘virtual mode’
o Screen reader navigates a virtual copy of the web page.
o Screen reader intercepts all keystrokes, and uses them for its
own virtual navigation (e.g. ‘H’ for heading navigation).

For dynamic web apps, virtual mode may need to be turned
off
o Interactive widgets need the keystrokes themselves.
o Content needs to be live, not a virtual copy.
o Normally, the user had to switch manually between virtual an
non-virtual mode.

role=“application”
o When applied a container element the screen reader will
automatically switch to non virtual mode.

Some parts of your application may actually be treated as a
document rather than application UI. For example:
o A web based email client has panes in which messages are read
or created.
o A blog viewer web application can load articles to read.

In these parts, the screen reader user needs virtual mode:
o To make use of the special navigation that comes with it.
o To be able to read non focusable content

role=“document”
o When applied to a container inside an application role, the
screen reader will switch back to virtual mode.
o Allows documents to be read or edited inside a web app.
HTML5Accessibility.com
Practical examples
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
27
1.
Start with HTML elements
o Any HTML element can be extended with ARIA. Examples:
• <span>, <div>, <table>, <td>, <ul>, <li>, <p>, <img>
2.
Add a ‘role’ attribute.
o Only one role is allowed per element,
• <span role=“checkbox”>
• <div role=“tab”>
3.
Add state /properties attributes if applicable.
o A single elements can have one or more states
• <span role=“checkbox” aria-checked=“true”>
• <div role=“button” aria-pressed=“true” aria-disabled=“true”>
o Attribute names always start with ‘aria-’
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
28

ARIA doesn’t change anything to your widget:
o It only provides semantic information for AT
o Behavior and styles still need to be provided by developer

Some HTML elements already have a default, ‘native’ role.
o e.g. <td> (role = ‘cell’), <a> (role=“link”), <input>, <li>
o Native role is always overridden by ARIA role
• E.g. <table role=“tab”> is announced as a tab by a screen reader rather than a table

Role values generally stay the same, state values can change
o Trough user input (event handlers),
o elem.setAttribute(‘aria-selected’, ‘false’);

Some roles have required state attributes
o E.g. A ‘radio’ role requires the ‘aria-checked’ state

Requirements for an ‘ARIA ready’ widget: Focusable & Keyboard Accessible!
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
29
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
30

To be accessible, ARIA input widgets need focus
o Use natively focusable elements, such as <a>, <input />, etc
o Add ‘tabindex’ attribute for non focusable elements, such as
<span>, <div>, etc.
• Tabindex=“0”: Element becomes part of the tab order
• Tabindex=“-1” (Element is not in tab order, but focusable)
o For composite widgets (menus, trees, grids, etc.):
• Every widget should only have 1 stop in the tab order.
• Keep track where your widget’s current tab stop is:
o Alternative for tabindex: ‘aria-activedescendant=“<idref>”
• Focus remains on outer container
• AT perceives element with the specified ID as being focused.
• You must manually highlight this active element, e.g. With CSS
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
31

Every Widget must be operable by keyboard

Create you own event handlers to manage
o For composite widgets (trees, menus, etc.) individual parts can be
reached using other keys, such as:
• Arrow keys
• Home, End, PgUp, PgDn
• Enter, Space

Keep in mind: how would I navigate this widget in a desktop
environment?

Mouse based actions must also be available through the keyboard.
For example:
o Write Key handlers trigger the same results mouse events
o Use context menus to make relevant options accessible.
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
32
 Not sure about how a widget should behave with the
keyboard?
o Use the DHTML Style Guide:
o http://dev.aol.com/dhtml_style_guide
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
33
 Make sure that all widgets are reachable through
keyboard
o Depend on Tab order (default or custom?)
o Support global keyboard shortcuts
• How do you notify your users?
o Implementing a custom focus manager
• Might be best solution for very complex UI's
• Let go of the traditional tab order idea ("all focusable elements
must be reachable by tab order")
• Provide intuitive skipping mechanisms
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
34

The ability to skip content is crucial for both screen
reader and keyboard users

Skip links are out of date, out of fashion and often is
misused

Better alternatives for skipping:
o Collapsible sections
o Consistent shortcuts (e.g. a shortcut that moves focus between
panes and dialogs)
o Custom focus manager that allows the user to move focus into
a container to skip its contents
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
35

More and more web apps use HTML based popup dialogs rather than actual
browser windows/dialogs
o Get a screen reader to perceive it properly using role="dialog"

Dialogs should have their own tab order
o Focus should "wrap"

For modal dialogs, it should not be possible to interact with the main page
o Prevent keyboard access
o Virtual mode access can't be prevented

For non modal dialogs, provide shortcut to switch between dialog and main page

If dialog supports moving or resizing, these features must be keyboard accessible

Support closing dialogs using Enter (OK) or Escape (Cancel) keys
o Focus should be placed back on a logical element, e.g. the button that triggered the dialog.
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
36
 Trees, Lists, Grids can support single or multiple
selection
o Multiple selection must be keyboard accessible, for
example:
• Shift + arrow keys: contiguous selection
• Ctrl + arrow keys: move focus without selection
• Ctrl + space: Toggle focused item in selection (discontiguous
selection)
 Editable grids need to support switching to edit
mode by keyboard
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
37

You can used ARIA to make your form validation easier to manage.
o aria-required & aria-invalid states
o Role="alert" to flag validation errors immediately

Use validation summaries with links to make invalid entries easier
to find
o Role="alertdialog" to mark up the summary

Visual tooltips: Useful for validation messages and formatting
instructions
o Tooltips must be keyboard accessible
o Tooltip text must be associated with the form control using ariadescribedby
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
38
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
39
 Every widget need some kind of ‘identity’, or
‘label’ that AT can use to announce it to the user:
o Singular interactive widgets, e.g. button, checkbox
o Composite widgets, such as trees or toolbars:
• Requires both a label for the widget as a whole and its
individual parts
o Container widgets:
• A window or Pane requires a title
 To label ARIA widgets:
o You could use standard HTML labeling techniques:
• Label element and title attributes.
o Or: Aria-labelledby, aria-label, & aria-describedby
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
40

Aria-labelledby=“IDREFS”
o Value is one or more IDs of elements that identifiy the widget.
o The elements ‘aria-labelledby’ targets can be any kind of text based element, anywhere
in the document.
o Add multiple Ids to concatinate label text:
• Multiple elements can label one widget, and one element can label multiple widgets. (example)

Aria-describedby=“IDREFS”
o Similar to labelledby, except used for additional description, e.g. Form hints,
instructions, etc.

Aria-label
o Simply takes a string to be used as label.
o Quick and dirty way of making the screen reader say what you want.
o Very easy to use, but only supported in Firefox at the moment.
<h2 id=“treeLbl”>My Folders</h2>
<p class=“hidden”>Each tree item has a context menu with more options</p>
<div role=“tree” aria-labelledby=“treeLbl” aria-describedby=“treeDesc”>
...
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
41
 Containers such as toolbars, dialogs, and regions
provide context for their contents
 When the user moves focus into the container,
the
screen reader should first announce the container
before announcing the focused control
<div role="dialog" aria-labelledby="dialogTitle" ariadescribedby="dialogDescription">
<h2 id="dialogTitle">Confirm</h2>
<p id="dialogDescription">
Are you sure you want to do that?
</p>
<button>Yes</button>
<button>No</button>
</div>
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
42
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
43
 Live regions
o Parts of a Web page that the author expects to change and
where new information maybe added updated or
removed.
o Examples of live regions:
•
•
•
•
•
03 / 15 / 11
Status updates
Changing stock information
Chat windows
Log windows (chat transcript logs),
notification areas (status, alerts)
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
44
 Live regions enable assistive technologies (such
as screen readers) to inform users of updates.
 Without live regions, AT users may not be aware
that content elsewhere on the page has changed.
o Users miss out on relevant info
o Users have to ‘search’ for updated page content
 With live regions, updated information is
announced automatically.
 Example: stock updater
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
45
 To identify a live region, add the aria-live attribute.
 One of the most important concepts behind live
regions is politeness.
 Politeness indicates how much priority a live region
has.
 The following politeness values are available for aria-
live: off, polite, and assertive.
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
46

Aria-live="off"
o Default value, identical to not setting aria-live. Examples:
• A DHTML clock
• Number of users currently online

Aria-live=“polite”
o Updates are announced but won’t interrupt the user
o Should be used in most situations involving live regions that present
new information to users:
• Updates to news headlines, twitter alerts, monitored stocks, etc.

Aria-live=“assertive”
o Updates are announced and interrupt what the user is doing
• Only use for important updates that require immediate attention.
• Warnings & error notifications.
• Session timeout notifications
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
47
 aria-atomic="true | false"
o Optional. Indicates if assistive technology should present
all or part of the changed region to the user.
• aria-atomic=“true”: assistive technology should announce the
entire region when part of it changes;
• aria-atomic=“false”: only the part of the region that changed should
be announced on its own.
 aria-busy="true | false"
o Optional. Indicates whether region has finished updating,
or whether certain parts are still expected to change.
• aria-busy=“true”: region not fully updated yet, AT should wait.
• aria-busy=“false”: region update is complete, AT can start
announcing the update.
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
48

Role=“alert”
o Used for one-time, high priority notifications.
o Should be shown for a period of time, or until the cause of the alert is
solved.
o Should contain a basic message, no complex content.
o The element with the alert role does not need to be focused to be
announced.
• Elements with role=“alert” receive aria-live=“assertive” and aria-atomic=“true” as
default values.
• Screen reader automatically announces the alert text, after saying ‘alert’
o Example: Form validation sample

Role=“alertdialog”
o Similar to Alert, but meant for actual (DHTML ) dialog windows .
o May contain other widgets, such as buttons or other form fields.
o Does require a sub element (such as a ‘confirm’ button) to receive focus.
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
49

Role=“status”
o Contains advisory information for the user but is not important enough to
justify an alert.
o Automatically receives aria-live=“polite”
o Should not receive focus

Role=“timer”
o A numerical counter which indicates an amount of elapsed time from a
start point, or the time remaining until an end point.
o Should be updated at regular intervals

Role=“marquee”
o A type of live region where non-essential information changes frequently
• E.g. stock tickers, banners

Role=“log”
o Like marquee, but information is added in meaningful order and old
information may disappear.
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
50
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
51

In IE, JAWS currently does not properly announce dialogs when moving
focus into them

It's possible to provide a fallback solution for IE to fix this, using hidden
fieldsets to apply the ARIA dialog markup to
o Hide fieldset's padding, margin, and border
o Move legend off-screen
<fieldset role="dialog" aria-labelledby="dialogTitle" ariadescribedby="dialogDescription">
<legend id="dialogTitle">Confirm</legend>
<p id="dialogDescription">
Are you sure you want to do that?
</p>
<button>Yes</button>
<button>No</button>
</fieldset>
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
52

Developers often use links as (icon) buttons
o Side effect: screen reader will announce them as a link, not a button

This can be made accessible by setting role="button"
o Screen reader announces link as button now, but also provides hint for
using a button ("press" space to activate)
• You lie! Links work through the Enter key, Space will scroll down the page
o To make sure JAWS is not lying, you'll have to manually add a key
event handler for the Space key.
<a role="button" onkeypress="handleKeyPress(event);">refresh</a>
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
53
 Sometimes a widget structure is not explicit via the
DOM and logical structure of a page.
 Aria-owns=“IDREFS”
o Indicates that the element(s) referenced by the IDs should
be considered a child of the element that has this
attribute.
<h3 id="header">Vegetables</h3>
<ul role="list" aria-labelledby="header" aria-owns="external_listitem">
<li role="listitem">Carrot</li>
<li role="listitem">Tomato</li>
<li role="listitem">Lettuce</li>
</ul>
…
<div role="listitem" id="external_listitem">Asparagus</div>
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
54

Some developers will use multiple HTML <table>
elements to create one single grid. For example:
o One <table> for the header row, one <table> for the body rows
o One <table> for every single row

Why? Because this is easier to manage, style, position,
drag & drop, etc.

Screen reader does not perceive one single table, but it
sees two ore more separate tables
o Association between column headers and cells is broken
o Screen reader's table navigation is broken
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
55
 If using a single table is not feasible, use ARIA to fix
the grid structure as perceived by the screen reader
o Use role="presentation" to hide the original table
elements form the screen readers
o Use a combination of "grid", "row", "gridcell",
"columnheader" roles to make the screen reader see one
big grid.
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
56
 Using ARIA to create a correct grid structure
<div role="grid">
<table role="presentation">
<tr role="row">
<th role="columnheader">Dog Names</th>
<th role="columnheader">Cat Names</th>
<th role="columnheader">Cow names</th>
</tr>
</table>
<table role="presentation">
<tr role="row">
<td role="gridcell">Fido</td>
<td role="gridcell">Whiskers</td>
<td role="gridcell">Clarabella</td>
</tr>
</table>
</div>
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
57
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
58

To be WCAG 2 compliant, background and foreground colors for
text needs to have sufficient contrast

If that's not possible, it's an option to design a high(er) contrast
theme that the user can enable
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
59

High Contrast Mode:
o Windows OS specific feature, inherited by browser
o Background & foreground colors are overridden
o Background images are stripped out

Problematic for widgets:
o They often use background color and images to indicate information (e.g.
icons & selection highlights)

Solution:
o Detect whether high contrast mode is active
o If so, provide workarounds:
• Inject html images or text to DOM
• Add additional visual indications, e.g. font weight, decoration & style
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
60
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
61
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
62

To test if your ARIA works:
o Use a screen reader to try out your aria widgets and roles.
• JAWS 10 has decent support, but misses certain things
• NVDA has better ARIA support, is free and has a ‘silent’ mode
• Compare with widgets in Desktop to know what to expect.

Using MSAA Tools
o Inspect32
• quick and effective
• Shows Focus role, states, name and description
o AccExplorer
• Lets you have a look at your page’s underlying ‘accessible tree

Using Browser Tools
o Firebug for firefox
o Developer Tools for IE8
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
63
 Get Started with ARIA:
o http://www.w3.org/WAI/intro/aria
 ARIA Best Practices:
o http://www.w3.org/TR/wai-aria-practices/
 DHTML Styleguide:
o http://dev.aol.com/dhtml_style_guide
03 / 15 / 11
Accessibility of HTML5 and Rich Internet Applications - CSUN 2011
64