320 likes | 504 Views
Accessible Rich Internet Applications (ARIA) . A-Tag, Wien, 21. November 2008 Martin Kliehm, Senior Frontend Engineer. http://www.flickr.com/photos/950/2116094803/. Accessible Rich Internet Applications. ARIA ist ein W3C-Entwurf für barrierefreies Web 2.0 . Es fügt hinzu :
E N D
Accessible Rich Internet Applications (ARIA) A-Tag, Wien, 21. November 2008 Martin Kliehm, Senior Frontend Engineer http://www.flickr.com/photos/950/2116094803/
Accessible Rich Internet Applications. ARIA istein W3C-Entwurf fürbarrierefreies Web 2.0. Es fügthinzu: • Fokusierbarkeit • Semantik • den aktuellerZustand • BeziehungenzwischenElementen • informiertüberdynamischeAktualisierungen
Accessible Rich Internet Applications. • Februar 2005: Jesse James Garrett prägt den Begriff„Ajax“ (Asynchronous JavaScript and XML) • März 2005: Richard Schwerdtfeger und Becky Gibson stellen ARIA auf CSUN vor • August 2005: IBM spendet eine große Menge Quellcode für den Mozilla Browser • August 2005: Die ersten Standardentwürfe für ARIA werden veröffentlicht • Juli 2006: Das Role-Attribut wird als XHTML-Modul veröffentlicht • 2008: Opera, Apple und Microsoft unterstützen ARIA
Wo bin ich? • Assistive Technologien (AT) müssen wissen, wo sie sich gerade befinden. • Problem: bisher konnten nur Links und Texteingabefelder den Tab-Fokus erhalten
Die Lösung: tabindex <h1tabindex="0">Chris Heilmann</h1>
Was ist das? • So kann man hintabben, aber was ist das?<h1tabindex="0">Chris Heilmann</h1>
Semantischer Zuckerguss • Das role-Attribut fügt semantische Bedeutung hinzu:<h1role="textfield heading" tabindex="0">Chris Heilmann</h1>
Semantischer Zuckerguss • Das role Attribut ermöglicht es, den Zweck eines Elements mit maschinenlesbarer, semantischer Information auszustatten. • Der User Agent mappt die Rolle in die Accessibility API des zugrundeliegenden Frameworks. Tool zur Überprüfung z.B. MsaaVerify • Assistive Technologien (z.B. Screenreader wie Window Eyes 5.5+, JAWS 7.0+, ZoomText, NVDA, Orca) können die Rolle dann verwenden.
Rollentypen • Es gibt Landmarkroles wiebanner, main, navigation, searchodersecondary • Document Structureroles wiedescription, directory, group, presentation, region, section, separator • User Input Controlroles wieinput,select,listbox, combobox, option, checkbox, radio, radiogroup, textbox, range, spinbutton • User Interface Elementroles wiebutton, link, menu, menubar, toolbar, menuitem, slider, tooltip, tabpanel, tablist, tab, tree, treeitem • Specializedroles wiealert, application, dialog, marquee, log, status, progressbar, timer
Semantischer Zuckerguss <h1tabindex="0" role="textfield">Chris Heilmann</h1> <ulrole="navigation"> […] </ul> <imgsrc="checkbox-with-rounded-corners-and-dropshadow.gif" role="checkbox" />
Semantischer Zuckerguss role="dialog"
Semantischer Zuckerguss role="dialog"
Welchen Zustand hat dieses Element? <imgsrc="checkbox-with-rounded-corners-and-dropshadow.gif" role="checkbox" />
ARIA States and Properties. <imgsrc="checkbox-with-rounded-corners-and-dropshadow.gif" role="checkbox"aria-checked="true" /> <input type="text" name="email"aria-required="true" /> <divrole="wairole:button"aria-controls="price">Change sortorder</div> <h2id="price" aria-sort="descending">price</h2>
ARIA labelled-by und described-by. <label for="shutdown-minutes" id="sd-label">Herunterfahrennach</label> <inputtype="text" name="shutdown“id="shutdown-minutes" value=""aria-labelled-by="sd-label sd-unit"aria-described-by="sd-description" /> <span id="sd-unit">Minuten</span>
Live Regions: Ajax Support <divrole="status" aria-live="polite">Nachname ist erforderlich</div>
Implementierung <?xmlversion="1.0"?> <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML+ARIA 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-aria-1.dtd"> <htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"> […] </html>
Beispiele http://www.flickr.com/photos/adactio/89778576/
Erforderliches Eingabefeld <input type="text" name="name-family"aria-required="true" value="" />
Fehler im Eingabefeld <input type="text" name="email"aria-required="true" aria-invalid="true" value="foo bar" />
Reiternavigation / Registerkarte <ulrole="tablist"> <lirole="tab" id="tab-1"aria-controls="panel-1">Aktuelles</li><lirole="tab">Projekte</li><lirole="tab">Ansprechpartner</li><lirole="tab">Institute</li> </ul> <divrole="tabpanel" id="panel-1">[…]</div>
Reiternavigation / Registerkarte mit Link als Fallback ohne JavaScript <ulrole="tablist"> <lirole="presentation"> <ahref="#aktuelles" role="tab"id="tab-1"aria-controls="panel-1"> Aktuelles </a> </li> […] </ul>
JavaScript für Reiternavigation / Registerkarte. • Dem aktiven Reitereinentabindex="0"zuweisen, den inkativentabindex="-1" • Event Listenerfüronclick, onkeydown, onkeypresssetzen, Event Delegation einsetzen • Tastaturbedienbarkeiteinarbeiten:Pfeiltasten, strg + Tab, strg + Shift + Tab • BeiKlick den aktiven Reiter per class="active" und tabindex="0"kennzeichnen, bei den inaktiven die Klasseentfernen und tabindex="-1"setzen, aktivesTabpaneleinblenden • DenScreenreaderbufferaktualisieren http://www.w3.org/TR/wai-aria-practices/#TabPanel
JavaScript für Reiternavigation / Registerkarte. … odereinJavaScript-Frameworkverwenden: • dōjō • YUI • jQuery UI In jQuery UI ist ARIA nochsehrneu und derzeitnichtvollständigimplementiert.
Fortschrittbalken <div role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="50" />
Links • WAI ARIA 1.0www.w3.org/TR/wai-aria/ • Introduction to WAI ARIAdev.opera.com/articles/view/introduction-to-wai-aria/ • WAI ARIA Best Practiceswww.w3.org/TR/wai-aria-practices/ • Mozilla ARIA FAQdeveloper.mozilla.org • Mein Bloglearningtheworld.eu
Besten Dank für Ihre Aufmerksamkeit. martin.kliehm (at) namics.com http://www.flickr.com/photos/delay_tactics/207364039/