<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Accessible Culture</title>
	<atom:link href="http://www.accessibleculture.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.accessibleculture.org</link>
	<description></description>
	<lastBuildDate>Wed, 28 Mar 2012 06:53:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Screen Readers and details/summary</title>
		<link>http://www.accessibleculture.org/articles/2012/03/screen-readers-and-details-summary/</link>
		<comments>http://www.accessibleculture.org/articles/2012/03/screen-readers-and-details-summary/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 09:50:56 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ChromeVox]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JAWS]]></category>
		<category><![CDATA[NVDA]]></category>
		<category><![CDATA[Orca]]></category>
		<category><![CDATA[screen readers]]></category>
		<category><![CDATA[VoiceOver]]></category>
		<category><![CDATA[WAI-ARIA]]></category>
		<category><![CDATA[Window-Eyes]]></category>

		<guid isPermaLink="false">http://www.accessibleculture.org/?p=1488</guid>
		<description><![CDATA[The HTML5 details and summary elements can be used to create a disclosure widget for showing and hiding content, something that typically has been done with JavaScript. For example, this type of interaction has often been used for things like FAQs: a list of questions is provided, but the answers hidden; clicking on any one of the questions toggles the&#8230; <a class="continue" href="http://www.accessibleculture.org/articles/2012/03/screen-readers-and-details-summary/">Continue reading<span class="hidden"> Screen Readers and <code>details</code>/<code>summary</code></span></a>]]></description>
			<content:encoded><![CDATA[<p>The HTML5 <a href="http://dev.w3.org/html5/spec/the-details-element.html#the-details-element"><code>details</code></a> and <a href="http://dev.w3.org/html5/spec/the-summary-element.html#the-summary-element"><code>summary</code></a> elements can be used to create a disclosure widget for showing and hiding content, something that typically has been done with JavaScript. For example, this type of interaction has often been used for things like FAQs: a list of questions is provided, but the answers hidden; clicking on any one of the questions toggles the display of the answer below it in accordion-like fashion. Check out the <a href="http://html5doctor.com/the-details-and-summary-elements/">HTML5 Doctor's article, "The details and summary elements"</a>, to learn more.</p>
<p>For straightforward <code>details</code>/<code>summary</code> pairs where the <code>summary</code> element contains only text, browsers and screen readers do pretty well, assuming appropriate keyboard focus and <a href="http://www.w3.org/TR/wai-aria/">WAI-ARIA</a> support is provided where necessary. However, where one or more links are nested in the <code>summary</code>, things get a little more cumbersome.</p>
<p>What follows is a very long and detailed account of some of the browser, screen reader, and accessibility <abbr title="Application Programming Interface">API</abbr> behaviours involved in that likely very limited use case where a <code>summary</code> element also contains nested links. For this, I'm happy to apologise up front, and if you're already thinking "TL;DR", you just might want to jump to the <a href="#upshot">overview and upshot</a> at the end. I won't be offended. The extensive detail is just me sharing what I've managed to grasp about how these things go together as part of an ever-continuing attempt to learn more about the ways screen readers, accessibility APIs, and browsers work. That, and somebody told me that blogging is making a comeback.</p> 
<h2>Current Browser Support</h2>
<p>Neither Internet Explorer 9, Firefox 11, nor Safari 5 provide native support for <code>details</code> and <code>summary</code>. While Chrome has supported them for several versions now, its current version 17 provides no default keyboard access, nor does it pass any meaningful semantics to the accessibility API. However, <a href="http://nightly.webkit.org/">recent WebKit nightly builds</a> support the elements with proper keyboard access, as do <a href="http://tools.google.com/dlpage/chromesxs">recent Chrome Canary builds</a>, but still neither provide any useful accessibility information. And <a href="http://my.opera.com/ODIN/blog/implementing-html5-details">Opera is working on it</a>.
<h2>How They Should Work</h2>
<p>The <code>summary</code> element should be natively keyboard focussable. Clicking or pressing the <kbd>Enter</kbd> or <kbd>Space</kbd> keys on the <code>summary</code> element should toggle the visibility of the <code>details</code> element's content.  When the <code>details</code> element is expanded, it should have an <code>open</code> attribute present, and its content should be available via the system's accessibility API. Conversely, when the <code>details</code> element is collapsed, which is its default state, the <code>open</code> attribute should be absent, and the <code>details</code>' content should not be present in the accessibility tree. That is, it should not be available to assistive technologies.</p>
<p>According to the <a href="https://dvcs.w3.org/hg/html-api-map/raw-file/tip/Overview.html">HTML to Platform Accessibility APIs Implementation Guide</a>, the <code>summary</code> element should be mapped to a typical button role, or, where available, as in the Mac Accessibility API, a disclosure triangle role. There's more to say about this below.</p>
<h2>Polyfill Required for Now</h2>
<p>Where a browser doesn't manage this itself, the <code>summary</code> element should be made keyboard focussable with <code>tabindex="0"</code>. Additionally, consistent with the proposed accessibility API mapping for the <code>summary</code> element, a <a href="http://www.w3.org/TR/wai-aria/roles#button">WAI-ARIA <code>role</code> of <code>button</code></a> should be added to the <code>summary</code> element, along with an <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-expanded"><code>aria-expanded</code> attribute</a> that changes based on the state of the <code>details</code> element. The non-<code>summary</code> content of the <code>details</code> element should be hidden using <code>display:none;</code> when the element is collapsed.</p>
<pre class="prettyprint box"><code>
&lt;details&gt;
   &lt;summary role="button" aria-expanded="false" tabindex="0"&gt;
      Summary element content
   &lt;/summary&gt;
   &lt;p&gt;Details element content&lt;/p&gt;
&lt;/details&gt;</code>
</pre>
<p>The good news is that with a polyfill of your own design, or using something like <a href="https://github.com/mathiasbynens/jquery-details">Mathias Bynens' jQuery plugin for <code>details</code>/<code>summary</code></a>, things work pretty well right now in most browsers and screen readers. One current exception with Mathias' plugin is Chrome 17, which, because it natively supports <code>details</code> and <code>summary</code>, doesn't get the plugin's keyboard support applied. But since Chrome 17's keyboard support for <code>summary</code> is non-existent, this leaves Chrome keyboard users without the ability to expand or collapse the <code>details</code>. This isn't a problem using the plugin in tandem with Chrome Canary 19.</p>
<p>Here is an example a simple <code>details</code>/<code>summary</code> element in action:</p>
<details><summary id="example1"><code>summary</code> element content</summary><p>This is the content of this <code>details</code> element.</p></details>
<p>The bad news is that, if you include links in the content of the <code>summary</code> element, a few screen readers show rather problematic behaviour in some cases. Some of this has to do with the way certain screen readers manage keyboard interaction. Some of it has to do with the use of the ARIA <code>role="button"</code>.</p>
<p>Note that when no screen reader is running, none of the browsers used in the tests below (namely Internet Explorer 9, Firefox 11, Safari 5, Chrome 17, and Opera 11) seem to have any difficulty providing access to both the <code>summary</code> and a nested link when using the <kbd>Tab</kbd> key (assuming keyboard access is supported either natively or through some polyfill).</p>
<p>Also note that the screen reader behaviour described below for the <code>summary</code> element goes for any other element you might use in a similar way. For example, if you're using a heading as the interactive element for showing and hiding other content, the same issues apply.</p> 
<h2>There's a Link in That <code>summary</code>!</h2>
<p>The <a href="http://dev.w3.org/html5/spec/the-button-element.html#the-button-element">HTML5 specification for the <code>button</code> element</a>, for instance, does not permit the nesting of other interactive content like links. This has always been the case, is expected given the typical use case of the <code>button</code> element, and so makes sense, I think. However, doing so, for better or worse, <em>is</em> permitted for the <code>summary</code> element, whose content model is <a href="http://dev.w3.org/html5/spec/content-models.html#phrasing-content">phrasing content</a>, which includes links.</p>
<p>I say "for better or worse" because, among other things, it could be easy enough, especially for sighted mouse users, to intend to expand or collapse the <code>details</code> element by clicking on the <code>summary</code>, but to accidentally click the nested link inside it instead. This would, of course, activate the nested link. However, it might be possible to mitigate this potentiality by clearly and visually distinguishing a link in the <code>summary</code> from the rest of the element, and providing a very obvious hover effect on the link to indicate the difference between clicking on it and clicking on the parent <code>summary</code>. Still, even then, I expect there remains some room for user confusion.</p>
<p>I've spoken to a few people who think it is a mistake to permit nested links, and that it is basically a bad design pattern. Personally, I have a feeling that it might be a potentially useful feature. My problem is that I'm unable to conjure a reasonable use case that argues well for this usefulness. Given the possible usability issue identified above, and the accessibility API and screen reader concerns discussed below, I don't know that I really have strong feelings about keeping nested links permitted in <code>summary</code>. It would, at least, be interesting to learn the reasoning behind permitting interactive content within the <code>summary</code> element.</p>
<p>Here's a <code>details</code> element with a <code>summary</code> containing a nested link surrounded by other inline text:</p>
<details><summary id="example2"><code>summary</code> element with a <a href="http://www.google.com/">link to google.com</a> nested within it</summary><p>This is the content of this <code>details</code> element.</p></details>
<h3>The Effect of <code>role="button"</code></h3>
<p>In setting <code>role="button"</code> on the <code>summary</code>, we are effectively telling user agents to identify the <code>summary</code> as a <code>button</code> in the accessibility API. As such, we might reasonably expect that, as per the specification for the <code>button</code> element, any interactive content, such as links, nested in the <code>summary</code> would not be passed through as accessible objects to the accessibility API. In this case, of course, links nested in a <code>summary</code> would not be available to assistive technologies relying on the accessibility API. This is how it works at the moment with Safari and the Mac Accessibility API. Things aren't the same with Internet Explorer and Firefox, which leads to some especially interesting effects in JAWS and NVDA.</p>
<h4>Safari 5 and VoiceOver</h4>
<p>Safari 5 identifies our <code>summary</code> element with <code>role="button"</code> to the Mac Accessibility API as having an AXRole of AXButton, and any nested links are not passed to the accessibility tree. That is, as far as VoiceOver is concerned, there are no nested links, and the contents of the <code>summary</code> are flattened to basic text. The <code>summary</code> element content is read and announced as a "button". It is not possible to navigate to a nested link using the standard VoiceOver keyboard commands. You can set focus to a nested link via the <kbd>TAB</kbd> key, and you can follow the link, but the link text is not announced, and the link is not listed in VoiceOver Web Rotor's list of links.</p>
<h4>Internet Explorer and Firefox</h4>
<p>With Internet Explorer 9 and Firefox 11, on the other hand, even while a <code>summary</code> element with <code>role="button"</code> is identified to the accessibility APIs with a role of "pushButton", which is the same as a regular <code>button</code> element, links nested within the <code>summary</code> <em>are</em> passed through to the accessibility APIs, and thereby available to a screen reader <em>should it wish or be able to use them</em>. This last bit is important.</p>
<p>Just because the accessibility API provides certain information doesn't mean that an assistive technology can or will necessarily make use of it. For instance, both <abbr title="Internet Explorer">IE</abbr> and <abbr title="Firefox">FF</abbr> pass the nested links to the accessibility tree as accessible objects, albeit somewhat differently. While IE identifies a nested link to the <abbr title="Microsoft Active Accessibility">MSAA</abbr> API as an MsaaAccessible link object, FF identifies it through the <abbr title="IAccessible2">IA2</abbr> API as an IA2Accessible link object. For this reason, based on how they interact with the accessibility APIs, JAWS 13 and NVDA 2012.1 exhibit different behaviour in these two browsers where links nested in a <code>summary</code> element with <code>role="button"</code> are concerned.</p>
<h3>Is <code>role="button"</code> Appropriate?</h3>
<p>Unfortunately, accessibility APIs like MSAA and IA2 don't provide accessible roles fully suited to a <code>summary</code> element that contains nested links. Out of all the roles they offer, a role of button seems the most appropriate option. To the degree that a user agent deals with <code>role="button"</code> in a way that is consistent with the specification for the <code>button</code> element, i.e., disallowing the nesting of other interactive content, this presents a problem.</p>
<p><a href="http://lists.w3.org/Archives/Public/public-html-a11y/2012Mar/0076.html">Steve Faulkner has called the situation "suboptimal"</a>, and proposed that the HTML5 specification be changed to <q>disallow the inclusion of interactive elements</q>. I rely on Steve's knowledge and expertise in these areas, and while I have no alternative solution to offer, I can't help wonder if, assuming that there is a potential usefulness to links in <code>summary</code>, that this proposal doesn't suggest a change in order to provide for what is really a current limitation of accessibility APIs.</p>
<p>Might there be another way to allow the <code>summary</code> element to contain other interactive elements while still providing reasonable access to assistive technologies? Perhaps something along the lines of the approach taken by IE and FF is the way to go, namely, identifying elements with <code>role="button"</code> to the accessibility API as having a button role, but nonetheless passing nested interactive content through to the accessibility APIs and thereby leaving it up to the assistive technology to determine how to handle it based on context?</p>
<p>As I noted above, I don't really have strong feelings either way, should the specification change to disallow nested interactive content. It certainly would address the problems with screen readers described below.</p>
<h3>Nested Link Following Other Inline Text</h3>
<p>We have two possible scenarios for links nested inside a <code>summary</code> element. In this first scenario to be examined, the nested link follows some other inline text, as is the case with our <a href="#example2"><code>details</code>/<code>summary</code> with nested link example</a> from above.</p>
<p>In the second scenario, which we'll look at afterwards, the nested link is the first item in the <code>summary</code> element. This proves to be the most problematic scenario, at least with JAWS and NVDA.</p>
<p>The screen readers used to produce the results discussed below are:</p>
<ul>
<li>JAWS 13.0.718</li>
<li>NVDA 2012.1</li>
<li>Window-Eyes 7.5.3</li>
<li>VoiceOver in Mac OS X Snow Leopard and Lion</li>
<li>ChromeVox 1.16.0</li>
<li>Orca 3.2.1 in Ubuntu 11.10</li>
</ul>
<h4>A Note on Browse versus Focus Mode</h4>
<p>For what follows, it helps to understand the difference between the two main ways JAWS and NVDA (and some other screen readers) provide for interacting with web content. Browse Mode is the default navigation mode in which keyboard commands are intercepted by the screen reader enabling users to navigate  a virtual representation of the page's content and structure. For example, in Browse Mode, the user can press the up or down arrow keys to move a virtual cursor up or down a line in the page content and have it read, or they can press certain keys and move to the next or previous link, or call up a list of all the links on the page.</p>
<p>Browse Mode is distinct from what is sometimes called Focus Mode, or often Forms Mode in JAWS, wherein keyboard commands are passed directly through to the browser, allowing users to do such things as input text into form fields.</p>
<h4>JAWS and IE9</h4>
<p>When in Browse Mode, JAWS and IE users navigating with the up or down arrow keys can move the virtual, or Browse Mode, cursor to a <code>summary</code> element. If the <code>summary</code> element contains nothing but text, all that text will be read and called a "button", but the expanded/collapsed state of the <code>details</code> element will not be identified, even though the <code>aria-expanded</code> attribute is present. If there is a link in the <code>summary</code>, however, JAWS will read it as a separate node, as it were.</p>
<p>If we take our <code>details</code>/<code>summary</code> with nested link example from above, upon arrowing down to the <code>summary</code> element, JAWS will read "summary</code> element with a, button". Another down arrow keypress is required to move the Browse Mode cursor to the link and hear "link, link to google.com". A third down arrow keypress gets us to the remaining text in the <code>summary</code>, and we hear "nested within it, button". At this point it sounds like we've got two buttons and one link between them. And in fact, we do. If the Browse Mode cursor is on the link, pressing <kbd>Enter</kbd> or <kbd>Space</kbd> will indeed expand or collapse the <code>details</code>, but it will also activate the link. Consistent with this behaviour is the fact that the link nested in our <code>summary</code> element with <code>role="button"</code> is included in JAWS' links dialog listing all the links it finds on the page.</p>
<p>On the other hand, using the <kbd>Tab</kbd> key to move focus to the <code>summary</code> element, JAWS in IE will read its entire contents, so we get something like "summary element with a link to google.com nested within it, button". Activating it with <kbd>Enter</kbd> or <kbd>Space</kbd> simply expands or collapses the <code>details</code> element as we would hope. One can also use the <kbd>Tab</kbd> key to move focus to the nested link itself and then follow the link as usual, although this equally expands/collapses the <code>details</code> element prior to the nested link's URL being loaded.</p>
<h4>JAWS and FF11</h4>
<p>JAWS in FF11 similarly announces the <code>summary</code> as a "button", and doesn't identify the <code>details</code> element's expanded/collapsed state. Otherwise, it behaves a little differently. When moving the Browse Mode cursor to the <code>summary</code> element via the down arrow key, JAWS reads all of the element's content just as it does in IE9 using the <kbd>Tab</kbd> key, at which point pressing <kbd>Enter</kbd> or <kbd>Space</kbd> expands or collapses the <code>details</code> element without also activating the nested link. It's not possible with JAWS and FF in Browse Mode to use the up or down arrow keys to move the cursor to the nested link. Even using the left or right arrow keys to move the Browse Mode cursor onto the link text doesn't get JAWS to recognise the link.</p>
<p>Using the <kbd>Tab</kbd> key in Browse Mode, you can move focus to the <code>summary</code> and to the nested link, but even when focus is on the nested link, pressing <kbd>Enter</kbd> or <kbd>Space</kbd> does not activate the link, and only serves to expand or collapse the <code>details</code> element. The only way in FF to get JAWS to activate the nested link is to manually switch to Focus Mode (<kbd>Insert</kbd> + <kbd>z</kbd>), at which point, after setting focus to the nested link using the <kbd>Tab</kbd> key, one can fire and follow the link.</p>
<p>Considering this behaviour of JAWS in FF, compared with its behaviour in IE, it might come as no surprise that links nested in a <code>summary</code> element are not listed in JAWS' links list dialog. As far as JAWS in Browse Mode with FF is concerned, there are no links inside a <code>summary</code> element set with <code>role="button"</code>.</p>
<h4>NVDA, IE9 and FF11</h4>
<p>NVDA behaves somewhat differently from JAWS, but more or less the same in both IE9 and FF11. The <code>summary</code> is announced as a "button", but NVDA respects the <code>aria-expanded</code> attribute, and so identifies the expanded/collapsed state of the <code>details</code> element. When navigating by the up or down arrow keys and setting the Browse Mode cursor to the <code>summary</code> element, NVDA treats it as a complete item and reads its entire contents: "summary element with a link to google.com, link, nested within it, button, collapsed".</p>
<p>One can use the right or left arrow keys as required to move the Browse Mode cursor to the link, at which point it gains focus and can be activated via the <kbd>Enter</kbd> or <kbd>Space</kbd> keys. The <code>details</code> element will at the same time be expanded or collapsed, but this hardly matters since the browser is already fetching the nested link's URL. Focus can also be variously set to the <code>summary</code> or the nested link using the <kbd>Tab</kbd> key, and the activation behaviour in both cases is the same. There's no need, as there is with JAWS in FF, to switch to Focus Mode.</p>
<p>Consistent with the above behaviour is that regardless of which browser is being used, NVDA's links list dialog includes any link nested within a <code>summary</code> attribute, even if the latter is set with <code>role="button"</code>.</p>
<h3>Nested Link as the <code>summary</code>'s First Item</h3>
<p>In this second scenario, the nested link is the first bit of content inside the <code>summary</code> element. Here's an example of that:</p>
<details><summary id="example3"><a href="http://www.google.com/">Link to google.com</a> nested at the beginning of a <code>summary</code> element</summary><p>This is the content of this <code>details</code> element.</p></details>
<h4>JAWS and IE9</h4>
<p>In IE9, as was noted above, when the <code>summary</code> element contains a link, JAWS parses its content as separate nodes in Browse Mode. If we use the down arrow to move the Browse Mode cursor to the <code>summary</code> element, the cursor moves to the first item in the <code>summary</code>. In this scenario, it lands on the nested link, and we hear, using the <a href="#example3">third <code>details</code>/<code>summary</code> example</a> above, "Link, Link to google.com", with no indication that we are in a <code>summary</code> element as "button". Pressing <kbd>Enter</kbd> or <kbd>Space</kbd> obviously activates the link.</p>
<p>Another press of the down arrow and we hear "nested at the beginning of a summary element, button". At this point pressing <kbd>Enter</kbd> or <kbd>Space</kbd> will expand or collapse the <code>details</code> element without activating the link, but the relationship between what is read as the description of the "button" and the content that we are expanding or collapsing is hardly ideal.</p>
<p>If we use the <kbd>Tab</kbd> key to move focus to the <code>summary</code> element, the whole <code>summary</code> element's contents are read and called a "button". Pressing <kbd>Enter</kbd> or <kbd>Space</kbd> expands or collapses the <code>details</code> element, but it equally fires the nested link. The only way I've found to prevent this happening is to include some other inline text before the nested link. Even something like a non-breaking space character reference (<code>&amp;nbsp;</code>) will do.</p>
<h4>JAWS and FF11</h4>
<p>Since we already know that in Browse Mode, and whether we use the up/down arrow or the <kbd>Tab</kbd> keys, JAWS doesn't recognise any nested links in the <code>summary</code> element with <code>role="button"</code>, there is no real difference between scenarios one and two. Whether the link is nested at the beginning of the <code>summary</code> element or following some other inline text, the Browse Mode cursor and focus cannot be moved to the nested link. The only way to get to the link is to enter Focus Mode.</p>
<h4>NVDA, IE9 and FF11</h4>
<p>Just as with JAWS in IE, moving the Browse Mode cursor to the <code>summary</code> element and pressing <kbd>Enter</kbd> or <kbd>Space</kbd> to expand/collapse the <code>details</code> element ends up activating the nested link. And if we move focus to the <code>summary</code> using the <kbd>Tab</kbd> key, the same thing happens. James Teh, Director of NV Access Limited, makers of NVDA, kindly offered the following explanation:</p>
<blockquote><p>This happens because when the [<code>summary</code>] gains focus, NVDA moves the Browse Mode cursor to the start of the [<code>summary</code>]. Unfortunately, the start of the [<code>summary</code>] is the link, so the Browse Mode cursor moves to the link. In Browse Mode, the <kbd>Space</kbd> and <kbd>Enter</kbd> keys always operate on the object under the Browse Mode cursor, not the focused object. (We need to do this because it's sometimes necessary to activate elements which aren't focusable; not every site is marked up as well as it should be.) Thus, pressing <kbd>Enter</kbd> activates the link.</p></blockquote>
<p>James additionally noted that while he agrees this is a problem, a workable solution that won't also break a lot of other more common use cases is not easily had at this point. I have <a href="http://www.nvda-project.org/ticket/2169">filed a bug report with NVDA</a> (and another bug report for the same behaviour in JAWS).</p>
<p>Another pesky detail to mention here is that in IE9, even a nested link preceded by a non-breaking space character reference won't prevent the nested link from being followed. It takes actual text.</p>
<p>Also note that, while in Browse Mode, it is possible with NVDA in both IE9 and FF11 to move the cursor to the right of the nested link onto some non-link text, should it exist, and thereby expand/collapse the <code>details</code> element without activating the nested link. This is probably a little less intuitive than we should like, but it does provide the possibility of access. However, if the <code>summary</code> element contains nothing but a link, then we are totally out of luck, it would seem.</p>
<h3>What About Other Screen Readers?</h3>
<h4>Window-Eyes 7.5.3</h4>
<p>In both IE and FF, <abbr title="Window-Eyes">W-E</abbr> 7.5.3 behaves the same. It announces the <code>summary</code> with <code>role="button"</code> as a "button", but doesn't identify its expanded/collapsed state. Links nested in the <code>summary</code> are not present in Browse Mode, nor are they to be found in the screen reader's links list dialog. Yet, apparently because of the <code>role="button"</code>, W-E enters Focus Mode as soon as the <code>summary</code> element is activated, and then the links are accessible using the <kbd>Tab</kbd> key. But then reading the content using normal W-E's normal keyboard navigation commands requires manually turning Browse Mode back on.</p>
<p>With W-E, however, where focus is set to a <code>summary</code> element whose content begins with a nested link, activating the <code>summary</code> does not also fire the link.</p>
<h4>ChromeVox 1.16.0</h4>
<p>In Chrome 17.0.963.79, the <code>summary</code> element is not focussable. Links nested within it, however, can take focus and be followed. Interestingly, when setting focus to such a nested link, it is announced as a "button" and its expanded/collapsed state is noted. Nonetheless, it's not possible to expand or collapse the <code>details</code> content.</p>
<h4>Orca 3.2.1 (Ubuntu 11.10)</h4>
<p>Orca in FF11 provides full keyboard support to <code>summary</code> elements and any links nested within them. The <code>summary</code> is announced as "button", but its expanded/collapsed state is not identified. If a link is the first item nested within a <code>summary</code>, navigating by the up or down arrows will put the cursor to the link, and not the <code>summary</code>. In order to move focus to the <code>summary</code> parent, one can use the right arrow key to move to other non-link text if it exists. Otherwise, the only way is to use the <kbd>Tab</kbd> key.</p> 
<h2 id="upshot">Overview and Upshot</h2>
<p>If you are using the HTML5 <code>details</code> and <code>summary</code> elements, and providing appropriate keyboard focus (i.e., <code>tabindex="0"</code>) and WAI-ARIA support (i.e., <code>role="button"</code> and <code>aria-expanded</code>), users of most screen readers and browsers, at least more recent ones, will have little to no problem interacting with them. <a href="https://github.com/mathiasbynens/jquery-details">Mathias Bynens' jquery-details plugin</a> works well.</p>
<p>Where <code>role="button"</code> and <code>aria-expanded</code> are applied to the <code>summary</code> element, JAWS 13, NVDA 2012.1, Window-Eyes 7.5.3, VoiceOver in Snow Leopard or Lion, and even Orca 3.2.1, all announce the <code>summary</code> element as a "button". Of these, only NVDA explicitly identifies the expanded/collapsed state of the element.</p> 
<p>Chrome 17 is currently the only browser that supports <code>details</code> and <code>summary</code>. However, it does not provide keyboard support, which may leave keyboard-only Chrome users without access. However, recent nightly builds of WebKit and Chrome Canary support these elements with keyboard access.</p>
<h3>Beware of Links in the <code>summary</code></h3>
<p>Things get tricky when we start to nest links within the <code>summary</code> element, which, no matter how you might feel about such a design pattern, is currently permitted according to its specification.</p>
<p>Links in a <code>summary</code> won't be clearly available to VoiceOver users with Safari. While such links are available to JAWS users in IE, they are not available to JAWS users with Firefox, nor to Window-Eyes users in either browser, unless one switches from Browse to Forms/Focus Mode, which likely won't be obvious to many. However, Window-Eyes does automatically enter Focus Mode as soon as the <code>summary</code> is activated, and then the links are accessible via the <kbd>Tab</kbd> key. And in NVDA, these nested links are available to users in both browsers.</p>
<p>It's also worth noting that links in the <code>summary</code> will change the way JAWS announces the <code>summary</code>'s content in IE, reading it as separate nodes when accessed via the typical up or down arrow keys in Browse Mode. Using the <kbd>Tab</kbd> key gets past this, however.</p>
<h4>When the <code>summary</code> Begins With a Nested Link</h4>
<p>In JAWS with IE, and in NVDA with both IE and FF, setting focus directly to and activating a <code>summary</code> element whose first bit of content is a nested link will expand or collapse the <code>details</code> element, but at the same time cause that link to fire, which is likely to cause some serious disorientation. While NVDA users can play with the left or right arrow keys to move the Browse Mode cursor to any non-link text within the <code>summary</code> that might exist and then singularly expand/collapse the <code>details</code> element without also activating the nested link, this may not be intuitive. And if the <code>summary</code> contains nothing but a nested link, the user is pretty much out of luck: the nested link will always be fired when trying to expand or collapse the <code>details</code>.
<h3>The Upshot</h3>
<p>Go ahead and use <code>details</code> and <code>summary</code> (with an appropriate polyfill). If you must have one or more links nested in the <code>summary</code>, arrange them so that they are not the first things within the <code>summary</code> element. And even if you manage this, you should recognise that:</p>
<ul>
<li>these links still won't be in any way clearly identifiable to users of VoiceOver in Safari;</li>
<li>these links still won't be available to JAWS in FF or Window-Eyes in both FF and IE when these screen readers are in Browse Mode; and,
<li>JAWS users with IE will have a less than ideal experience reading the <code>summary</code>'s content.</li>
</ul> 
<h2>Acknowledgements</h2>
<p>Thanks to <a href="https://twitter.com/#!/stevefaulkner">Steve Faulkner</a> and <a href="https://twitter.com/#!/jcsteh">Jamie Teh</a> for their help and opinions, and for answering my technical questions about browsers, accessibility APIs, and screen readers.</p>  ]]></content:encoded>
			<wfw:commentRss>http://www.accessibleculture.org/articles/2012/03/screen-readers-and-details-summary/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Videos of Screen Readers with Basic HTML5 and ARIA Landmarks</title>
		<link>http://www.accessibleculture.org/articles/2012/01/videos-of-screen-readers-html5-and-aria-landmarks/</link>
		<comments>http://www.accessibleculture.org/articles/2012/01/videos-of-screen-readers-html5-and-aria-landmarks/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 11:30:20 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JAWS]]></category>
		<category><![CDATA[NVDA]]></category>
		<category><![CDATA[screen readers]]></category>
		<category><![CDATA[WAI-ARIA]]></category>
		<category><![CDATA[Window-Eyes]]></category>

		<guid isPermaLink="false">http://www.accessibleculture.org/?p=1469</guid>
		<description><![CDATA[With the rapid development in certain user agents (take that, Firefox!), I'm a little late in getting these up, but I figure some of them are still useful to share. In any case, I posted to YouTube five videos of various screen readers interacting with basic HTML5 section elements and ARIA landmarks. These are videos I presented at the 2011&#8230; <a class="continue" href="http://www.accessibleculture.org/articles/2012/01/videos-of-screen-readers-html5-and-aria-landmarks/">Continue reading<span class="hidden"> Videos of Screen Readers with Basic HTML5 and ARIA Landmarks</span></a>]]></description>
			<content:encoded><![CDATA[<p>With the rapid development in certain user agents (take that, Firefox!), I'm a little late in getting these up, but I figure some of them are still useful to share. In any case, I <a href="http://www.youtube.com/user/AccessibleCulture">posted to YouTube</a> five videos of various screen readers interacting with basic HTML5 section elements and ARIA landmarks. These are videos I presented at the <a href="http://environmentsforhumans.com/2011/accessibility-summit/">2011 Accessibility Summit</a> and <a href="http://www.ozewai.org/">OZeWAI 2011</a> conferences.</p>
<p>The test pages used in the videos are:</p>
<ul>
<li><a href="/research-files/ozewai2011/html5OnlyTestCase.html">HTML5 Only Test Case</a></li>
<li><a href="/research-files/ozewai2011/html5AriaTestCase.html">HTML5 Plus ARIA Roles Test Case</a></li>
</ul>
<p>For more on screen reader behaviour with HTML5 and ARIA landmarks, see my post <a href="/articles/2011/04/html5-aria-2011/">HTML5, ARIA Roles, and Screen Readers in March 2011</a>, as well as <a href="http://www.html5accessibility.com/tests/landmarks.html">Steve Faulkner's ARIA Landmark role support tests from November 2011</a>.</p>
<h2>NVDA 2011.2 in FF6 with basic HTML5 section elements</h2>
<iframe width="320" height="240" src="http://www.youtube.com/embed/C13z5iVdFRA" frameborder="0" allowfullscreen></iframe>
<p>In Firefox only, the <code>header</code>, <code>footer</code>, and <code>nav</code> elements are identified as landmarks. Note that in Firefox versions 7, 8 , and 9, <code>header</code> elements are no longer identified as banner landmarks, and <code>aside</code> elements are now identified as complementary landmarks. Otherwise, the behaviour is identical.</p>
<h2>NVDA 2011.2 in FF6 with HTML5 and ARIA Landmark Roles</h2>
<iframe width="320" height="240" src="http://www.youtube.com/embed/-Ze9IdfB-dY" frameborder="0" allowfullscreen></iframe>
<p>With the exception of the application and form landmarks, all landmark roles are recognised by NVDA in both Firefox and Internet Explorer. In this test case, Firefox 6 identifies the <code>header</code> and <code>footer</code> elements inside the <code>article</code> as banner and contentinfo landmarks, even though they do not have express ARIA landmark role attributes. In Firefox 7&#8211;9, the <code>header</code> element is no longer registered as a landmark, but <code>footer</code> still is.</p>
<h2>JAWS 13 in IE9 with HTML5 and ARIA Landmark Roles</h2>
<iframe width="320" height="240" src="http://www.youtube.com/embed/jiA9RJBwXvw" frameborder="0" allowfullscreen></iframe>
<p>JAWS recognises all landmark roles. However, both region and article ARIA document structure roles are also announced as landmarks. JAWS also misrepresents the heading structure: see <a href="/articles/2011/10/jaws-ie-and-headings-in-html5/">JAWS, IE and Headings in HTML5</a>.</p>
<h2>VoiceOver in Safari 5.1 with HTML5 and ARIA Landmark Roles</h2>
<iframe width="320" height="240" src="http://www.youtube.com/embed/EVs50BwLGuI" frameborder="0" allowfullscreen></iframe>
<p>VoiceOver announces all landmark roles except for form landmarks.</p>
<h2>Window-Eyes 7.5.0 in IE9 with HTML5 and ARIA Landmark Roles</h2>
<iframe width="320" height="240" src="http://www.youtube.com/embed/iI1WLGYzJvk" frameborder="0" allowfullscreen></iframe>
<p>Window-Eyes 7.5.0 has serious problems in Internet Explorer where HTML5 and ARIA landmarks are concerned, but not in Firefox. Fortunately, these issues have been corrected in Window-Eyes version 7.5.1.</p>]]></content:encoded>
			<wfw:commentRss>http://www.accessibleculture.org/articles/2012/01/videos-of-screen-readers-html5-and-aria-landmarks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slides from OZeWAI 2011</title>
		<link>http://www.accessibleculture.org/articles/2012/01/slides-from-ozewai-2011/</link>
		<comments>http://www.accessibleculture.org/articles/2012/01/slides-from-ozewai-2011/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 11:16:34 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[screen readers]]></category>
		<category><![CDATA[WAI-ARIA]]></category>

		<guid isPermaLink="false">http://www.accessibleculture.org/?p=1465</guid>
		<description><![CDATA[My slides from the OZeWAI 2011 conference:]]></description>
			<content:encoded><![CDATA[<p>My slides from the <a href="http://www.ozewai.org/">OZeWAI 2011 conference</a>:</p>
<a href="/research-files/ozewai2011/basic-html5-aria-screenreaders-presentation.html"><img src="/research-files/ozewai2011/images/Basic-HTML5-ARIA-and-Screen-Readers.jpg" alt="HTML5 and ARIA: Accessibility Benefits and Support &#8212; Basic HTML5, ARIA, and Screen Readers, Jason Kiss, OZeWAI 2011, Nov. 30, 2011" width="320" height="257"></a>]]></content:encoded>
			<wfw:commentRss>http://www.accessibleculture.org/articles/2012/01/slides-from-ozewai-2011/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JAWS, IE and Headings in HTML5</title>
		<link>http://www.accessibleculture.org/articles/2011/10/jaws-ie-and-headings-in-html5/</link>
		<comments>http://www.accessibleculture.org/articles/2011/10/jaws-ie-and-headings-in-html5/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 02:10:12 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[headings]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JAWS]]></category>
		<category><![CDATA[screen readers]]></category>

		<guid isPermaLink="false">http://www.accessibleculture.org/?p=1420</guid>
		<description><![CDATA[If you use explicitly ranked h1 to h6 headings nested in HTML5 sectioning elements, as opposed to using exclusively h1 elements, JAWS 12.0.1170, as well as the JAWS 13.0.171 beta, will misrepresent the heading hierarchy. Headings in HTML5 The HTML5 outline algorithm allows us to use the h1 element for every heading on a page, and depending on the nesting&#8230; <a class="continue" href="http://www.accessibleculture.org/articles/2011/10/jaws-ie-and-headings-in-html5/">Continue reading<span class="hidden"> JAWS, IE and Headings in HTML5</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you use explicitly ranked <code>h1</code> to <code>h6</code> headings nested in <a href="http://dev.w3.org/html5/spec/content-models.html#sectioning-content">HTML5 sectioning elements</a>, as opposed to using exclusively <code>h1</code> elements, JAWS 12.0.1170, as well as the JAWS 13.0.171 beta, will misrepresent the heading hierarchy.</p>
<h2>Headings in HTML5</h2>
<p>The <a href="http://dev.w3.org/html5/spec/sections.html#outlines">HTML5 outline algorithm</a> allows us to use the <code>h1</code> element for every heading on a page, and depending on the nesting of the sectioning element in which the <code>h1</code> is found, the heading's rank will be redefined accordingly. While the <a href="http://dev.w3.org/html5/spec/sections.html#sectioning-root">HMTL5 specification encourages us</a> to use only <code>h1</code> elements, we are permitted to <q cite="http://dev.w3.org/html5/spec/sections.html#sectioning-root">use [<code>h1</code> to <code>h6</code>] elements of the appropriate rank for the section's nesting level.</q></p>
<p>The sectioning elements are <code>article</code>, <code>aside</code>, <code>nav</code>, and <code>section</code>. As such, according to the algorithm, the following two structures create identical outlines:</p>
<h3>Using <code>h1</code>s Only</h3>
<pre class="prettyprint box"><code>
&lt;h1&gt;Level 1&lt;/h1&gt;
&lt;nav&gt;
   &lt;h1&gt;Level 2&lt;/h1&gt;
&lt;/nav&gt;
&lt;section&gt;
   &lt;h1&gt;Level 2&lt;/h1&gt;
   &lt;article&gt;
      &lt;h1&gt;Level 3&lt;/h1&gt;
      &lt;aside&gt;
         &lt;h1&gt;Level 4&lt;/h1&gt;
      &lt;/aside&gt;
   &lt;/article&gt;
&lt;/section&gt;</code>
</pre>
<h3>Using Explicitly Ranked Headings</h3>
<pre class="prettyprint box"><code>
&lt;h1&gt;Level 1&lt;/h1&gt;
&lt;nav&gt;
   &lt;h2&gt;Level 2&lt;/h2&gt;
&lt;/nav&gt;
&lt;section&gt;
   &lt;h2&gt;Level 2&lt;/h2&gt;
   &lt;article&gt;
      &lt;h3&gt;Level 3&lt;/h3&gt;
      &lt;aside&gt;
         &lt;h4&gt;Level 4&lt;/h4&gt;
      &lt;/aside&gt;
   &lt;/article&gt;
&lt;/section&gt;</code>
</pre>
<h2>Use Explicitly Ranked Headings For Now</h2>
<p>It's a good thing that we have a choice of which approach to take, as support for the HTML5 outline algorithm in current browsers and assistive technologies is not quite there yet.</p>
<p>Where only <code>h1</code> elements are used, a non-supporting browser or assistive technology will find nothing but <code>h1</code> headings, which does not help a user understand the document's structure or heading hierarchy. For now, it is probably best to continue using explicitly ranked <code>h1</code> to <code>h6</code> elements as appropriate.</p>
<p>However, at least one screen reader in one browser is now supporting the <code>h1</code>-only approach to using headings in HTML5. But as good as this sounds, the particular support it has introduced is problematic.</p>
<h2>JAWS 12 and 13 in Internet Explorer</h2>
<p>If you use an <code>h1</code> for every heading, JAWS 12 and 13 beta will, in Internet Explorer but not Firefox, correctly rank the heading in accordance with its section's nesting level. For example, an <code>h1</code> nested two sectioning elements deep will effectively become a third level heading. JAWS appears to be simply adding the required number of levels to the heading as appropriate.</p>
<p>At the same time, and this is the problematic part, JAWS appears to be doing this even if you've taken the alternative approach and have used explicitly ranked <code>h1</code> to <code>h6</code> elements. That is, if you've correctly used an <code>h3</code> element nested two sectioning levels deep, it becomes an <code>h5</code> as far as JAWS in IE is concerned. Obviously, this can significantly alter the page's document outline or heading hierarchy as represented to the user.</p>
<p>If we take the second HTML5 structure we saw above, where the heading levels are explicitly set using appropriately ranked heading elements, JAWS in IE effectively interprets it as follows:
<pre class="prettyprint box"><code>
&lt;h1&gt;Level 1&lt;/h1&gt;
&lt;nav&gt;
   &lt;h2&gt;Level 3&lt;/h2&gt;
&lt;/nav&gt;
&lt;section&gt;
   &lt;h2&gt;Level 3&lt;/h2&gt;
   &lt;article&gt;
      &lt;h3&gt;Level 5&lt;/h3&gt;
      &lt;aside&gt;
         &lt;h4&gt;Level 7&lt;/h4&gt;
      &lt;/aside&gt;
   &lt;/article&gt;
&lt;/section&gt;</code>
</pre>
<p>Not only does the heading hierarchy now jump from a level one, to a level three, to a level five heading, the <code>h4</code> heading in the <code>aside</code> element, nested three sectioning elements deep, becomes a 7th level heading. Since there is no such thing as an <code>h7</code> element, JAWS does not even identify it as a heading. When moving from heading to heading through the page, as JAWS permits using the <kbd>h</kbd> key, this heading is simply skipped over. Nor does the heading appear in JAWS' headings list dialog.</p>
<ins id="testPages" datetime="2011-10-09">
<p><em>Update: If you want to check for yourself, here are the actual test pages I used:</em></p>
<ul>
<li><a href="/research-files/jaws-ie-headings-html5/h1Only.php">H1 Headings Only</a></li>
<li><a href="/research-files/jaws-ie-headings-html5/explicitlyRanked.php">Explicitly Ranked Headings</a></li>
</ul>
</ins>
<h3>All Versions of IE Affected</h3>
<p>Interestingly, this behaviour occurs in all versions of IE, from IE6 and above. With IE6 to IE8, which have no native support for HTML5, this behaviour depends on those versions of IE being forced to recognise the HTML5 elements through a now common JavaScript hack, e.g., the <a href="http://en.wikipedia.org/wiki/HTML5_Shiv">HTML5 Shiv</a>. Without it, JAWS presents each heading at a level defined by the heading element used. So every <code>h1</code> remains a level one heading, every <code>h2</code> a level two heading, and so on, regardless of the relevant sectioning element's nesting level. Of course, without the JavaScript shim, there's no styling of HTML5 elements in IE8 and below, so this scenario is rather moot, unless the page's developer has decided to not bother supporting those browsers.</p> 
<ins id="jawsInFirefox" datetime="2011-10-17">
<h2><em>Update (Oct. 17, 2011): </em>JAWS 13 in Firefox</h2>
<p>The latest release of the JAWS 13 beta, 13.0.241, behaves the same in Internet Explorer, but now also incorrectly represents explicitly ranked headings in Firefox. In fact, it's even worse.</p>
<p>In Firefox, the <code>h4</code> nested three sectioning levels deep in the <code>aside</code> from our example is identified as a second level heading. If you use an <code>h1</code>, it is properly considered a fourth level heading, since one plus three equals four. If you use an <code>h2</code>, you get a fifth level heading, and an <code>h3</code> gets you a sixth level heading. The <code>h4</code> to <code>h6</code> elements, however, all become second level headings.</p>
<p>This behaviour is wrong. According to the HTML5 spec, no matter what explicitly ranked heading element is used, a user agent that supports the HTML5 outline algorithm should assign an appropriate level for the heading based on the nesting of sectioning elements in which the heading is found.</p>  
</ins>
<h2>A Bug and a Dilemma</h2>
<p>I'm happy calling this behaviour a bug. While it's great that JAWS now supports the <code>h1</code>-only approach to headings in HTML5, it's hardly reasonable to start misrepresenting properly ranked <code>h1</code> to <code>h6</code> elements. Using explicitly ranked heading elements is clearly permitted by the HTML5 specification, and remains the only way to provide most current user agents a representative and meaningful document outline.</p>
<p>The dilemma is that using only <code>h1</code> headings to provide a meaningful document outline for users of what is possibly the most popular screen reader and browser combination today means providing users of all other current screen reader and browser combinations effectively no meaningful heading hierarchy. Or, conversely, where headings in HTML5 are concerned, supporting most screen readers and browsers means not supporting JAWS 12 and 13 in Internet Explorer.</p>
<p>These are the sorts of decisions we don't want and shouldn't have to make when building accessible web pages, but they are a reality that we unfortunately get used to. On the other hand, screen reader and browser development is moving very quickly these days, so this particular problem may not exist for long.</p>
<p>You'll have to make up your own mind on how you deal with this issue. For me, until there's broad support for the <code>h1</code>-only approach across most screen readers and browsers in use, I'll take the more backwards-compatible route and use appropriately ranked <code>h1</code> to <code>h6</code> elements in my HTML5 pages.</p> ]]></content:encoded>
			<wfw:commentRss>http://www.accessibleculture.org/articles/2011/10/jaws-ie-and-headings-in-html5/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Small Change to Site Architecture</title>
		<link>http://www.accessibleculture.org/articles/2011/10/small-change-to-site-architecture/</link>
		<comments>http://www.accessibleculture.org/articles/2011/10/small-change-to-site-architecture/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 06:33:42 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.accessibleculture.org/?p=1414</guid>
		<description><![CDATA[When I first rolled out this site, I figured I would write protracted research articles on accessibility, as well as shorter blog posts of an ad hoc nature, hence the previous and separate "Research" and "Blog" sections of the site. Turns out I'm hardly that prolific, and the distinction between research articles and blog posts soon became rather arbitrary. So&#8230; <a class="continue" href="http://www.accessibleculture.org/articles/2011/10/small-change-to-site-architecture/">Continue reading<span class="hidden"> Small Change to Site Architecture</span></a>]]></description>
			<content:encoded><![CDATA[<p>When I first rolled out this site, I figured I would write protracted research articles on accessibility, as well as shorter blog posts of an ad hoc nature, hence the previous and separate "Research" and "Blog" sections of the site. Turns out I'm hardly that prolific, and the distinction between research articles and blog posts soon became rather arbitrary.</p>
<p>So now everything is an article, and found under the <a href="/articles/">"Articles" section of the site</a>.</p>
<p>Old links to bits that were once either in the "Research" or "Blog" sections of the site should be properly redirected to the appropriate article, but if not, they should still be easy enough to find using the site's search functionality or the tag links in the sidebar.</p>
<p>If not, <a href="/contact/">let me know</a>, and I'll happily try to rectify the situation.</p> ]]></content:encoded>
			<wfw:commentRss>http://www.accessibleculture.org/articles/2011/10/small-change-to-site-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Responsive Data Tables and Screen Reader Accessibility</title>
		<link>http://www.accessibleculture.org/articles/2011/08/responsive-data-tables-and-screen-reader-accessibility/</link>
		<comments>http://www.accessibleculture.org/articles/2011/08/responsive-data-tables-and-screen-reader-accessibility/#comments</comments>
		<pubDate>Wed, 17 Aug 2011 07:12:57 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JAWS]]></category>
		<category><![CDATA[NVDA]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[screen readers]]></category>
		<category><![CDATA[tables]]></category>

		<guid isPermaLink="false">http://www.accessibleculture.org/?p=1206</guid>
		<description><![CDATA[When Chris Coyier presented his approach to responsive data tables, I wondered about the implications for accessibility, particularly for screen readers. This was especially so since the approach involves replicating each of the table's column headers as CSS-generated content for the relevant table cell, and presenting each data cell, together with this generated header text, as a block-level element. In&#8230; <a class="continue" href="http://www.accessibleculture.org/articles/2011/08/responsive-data-tables-and-screen-reader-accessibility/">Continue reading<span class="hidden"> Responsive Data Tables and Screen Reader Accessibility</span></a>]]></description>
			<content:encoded><![CDATA[<p>When Chris Coyier presented his approach to <a href="http://css-tricks.com/9096-responsive-data-tables/">responsive data tables</a>, I wondered about the implications for accessibility, particularly for screen readers. This was especially so since the approach involves replicating each of the table's column headers as CSS-generated content for the relevant table cell, and presenting each data cell, together with this generated header text, as a block-level element. In this way, the table's data is presented in a single column, as it were, with each data cell appearing on a new line alongside its associated, CSS-generated header text.</p>
<p>I wondered, assuming that the CSS-generated column headers were read by screen readers, if the screen readers would repeat the header text when navigating the table using their table navigation commands, once for the actual column header in the HTML, and once for the CSS-generated header text.</p>
<h2>NVDA and VoiceOver</h2>
<p>It turns out that NVDA with Firefox and VoiceOver with Safari both read the CSS-generated content. More importantly, in both cases the responsive data tables are not registered as tables at all. In the end, interacting with and reading responsive tables like this seems fairly straightforward with these screen reader and browser combinations.</p>
<p>From what I can tell, because the responsive version of the <code>table</code>, as well as its <code>thead</code>, <code>tbody</code>, <code>th</code>, <code>td</code>, and <code>tr</code> elements, are all set to <code>display:block;</code>, the table isn't recognised as an actual table. In fact, this seems to be the case even if just the <code>table</code> element itself is set to <code>display:block;</code>.</p>
<p>I don't fully understand the ins and outs of accessibility APIs, so what follows is my best effort. In Firefox, the <a href="http://css-tricks.com/examples/ResponsiveTables/">regular data table</a> that is not set to <code>display:block;</code> is identified to the IAccessible2 API with a role of "table", while the <a href="http://css-tricks.com/examples/ResponsiveTables/responsive.php">responsive version of the table</a> with <code>display:block;</code> seems to end up with a role of "paragraph".</p>
<p>In Safari, things are a little stranger. Even the non-responsive regular table doesn't get registered as a table by VoiceOver for some reason. That is, VoiceOver doesn't recognise that there is a table present, and the <kbd>Control</kbd>+<kbd>Option</kbd>+<kbd>Command</kbd>+<kbd>T</kbd> keystroke for moving to the next table on a page does nothing.</p>
<p>Checking Apple's Accessibility Inspector, the regular table's cells are identified to the Mac Accessibility API as having an "AXRole" of "AXGroup", presumably some more generic and non-tabular type of role. However, after adding a <code>caption</code> to the <code>table</code>, all of a sudden VoiceOver is able to find it. In this case, Safari identifies each table cell to the Mac Accessibility API as having an "AXRole" of "AXCell", which makes sense, and the table itself has an "AXRole" of "AXTable", whereas previously I was unable to determine what "AXRole" the table had, if any.</p>
<p>With the responsive data table set to <code>display:block;</code>, even after adding a <code>caption</code>, the table is not identified as such. So in Safari, the use of <code>display:block;</code> on a table seems to have the same effect as it does in Firefox.</p>
<p>I figure this is why, with those screen readers in those browsers, the responsive tables tend to work so nicely. The screen readers don't consider them tables and don't enable their table navigation commands. They simply read each (generated) header as text and then read its associated value, without identifying any tabular structure. There is no repetition of both the HTML and CSS-generated column headers when moving from cell to cell. For all intents and purposes, there are no data tables or cells to navigate.</p>
<p>So I'm impressed with the responsive table's behaviour in these screen reader and browser combinations. As far as I can tell, however, this has as much to do with how the browser is identifying the table with <code>display:block;</code> to the relevant accessibility API, as it does with the use of the media queries and CSS-generated content.</p>
<h2>What About JAWS?</h2>
<p>Note: Because of a problematic rendering issue in Internet Explorer 9 with tables set to <code>display:block;</code>, Chris' example does not work with IE.</p>
<p>JAWS 12 in Firefox doesn't behave the same. It appears to treat the responsive data table as a data table, and enables its typical table navigation commands. At the same time, JAWS doesn't seem to be reading the CSS-generated column header text. As a result, using JAWS' regular table navigation commands, the table's content is navigable as if it were a normal data table. This is probably fine for a blind user, who won't realise the disjunction between what is presented on screen and what JAWS is telling her. But for a sighted user working with JAWS, I imagine there could some confusion since the table's content is not visually laid out as a table, and the CSS-generated column headers that are visibly repeated for every cell will not be read out loud.</p>
<p>Obviously, in the case of an iPhone or iPad, or similar, for which the CSS media queries are largely intended, the behaviour of JAWS for Windows is not an issue. Still, for the admittedly very few users that might be using JAWS with Firefox set to a narrow enough viewport to engage the CSS media query that changes the table's layout, what's going on may not be very clear.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.accessibleculture.org/articles/2011/08/responsive-data-tables-and-screen-reader-accessibility/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JAWS, Window-Eyes and display:none: Return to 2007</title>
		<link>http://www.accessibleculture.org/articles/2011/08/jaws-window-eyes-and-display-none/</link>
		<comments>http://www.accessibleculture.org/articles/2011/08/jaws-window-eyes-and-display-none/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 09:32:24 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JAWS]]></category>
		<category><![CDATA[screen readers]]></category>
		<category><![CDATA[Window-Eyes]]></category>

		<guid isPermaLink="false">http://www.accessibleculture.org/?p=1199</guid>
		<description><![CDATA[I was recently asked if JAWS and Window-Eyes still displayed the bugs described by Gez Lemon in 2007 whereby content hidden using display:none was read by the screen readers under certain conditions. The JAWS Bug Back then, the situation with JAWS 7.1 was that it announces content in a span element hidden with display: none if it is in an&#8230; <a class="continue" href="http://www.accessibleculture.org/articles/2011/08/jaws-window-eyes-and-display-none/">Continue reading<span class="hidden"> JAWS, Window-Eyes and <code>display:none</code>: Return to 2007</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitter.com/#!/necolas/status/101085930680631296">I was recently asked</a> if JAWS and Window-Eyes still displayed the <a href="http://juicystudio.com/article/screen-readers-display-none.php">bugs described by Gez Lemon in 2007</a> whereby content hidden using <code>display:none</code> was read by the screen readers under certain conditions.</p>
<h2>The JAWS Bug</h2>
<p>Back then, <a href="http://juicystudio.com/article/screen-readers-display-none.php#jawsdisplaynone">the situation with JAWS 7.1</a> was that it <q cite="http://juicystudio.com/article/screen-readers-display-none.php#jawsdisplaynone">announces content in a <code>span</code> element hidden with <code>display: none</code> if it is in an anchor element. This only works with a <code>span</code> element; other inline elements used in an anchor element, such as <code>em</code>, <code>strong</code>, <code>abbr</code>, <code>code</code>, and so on, are not announced in JAWS.</q> Additionally, this only happened with JAWS in Internet Explorer.</p>
<p>Having just tested this, I can confirm that this bug no longer affects JAWS 12 in Internet Explorer 9. After all, it has been about four years since that bug was discovered. In which specific version of JAWS this was fixed I can't say, having only tested the latest version.</p>
<h2>The Window-Eyes Bug</h2>
<p>While Window-Eyes 5.5 worked as expected with such hidden content, as soon as you added a CSS background image to the anchor itself or any other ancestor, up to but excluding the <code>body</code> element, Window-Eyes would announce the hidden content. Even if the link itself was hidden using <code>display:none</code>, if an ancestor element had a background image applied, Window-Eyes would read the link.</p>
<p>Using <a href="/research-files/we-display-none/">this test page</a>, it is clear that Window-Eyes 7.5 in Internet Explorer 9, but not in Firefox 5, still exhibits the same bug. That is, content hidden using <code>display:none</code> is read by Window-Eyes in IE9 if the element itself or an ancestor has a CSS background image.</p>
<p>As was <a href="http://juicystudio.com/article/screen-readers-display-none.php#wedisplaynone">noted by Jared Smith all those years ago</a>, doubling up <code>display:none</code> with <code>visibility:hidden</code> solves this problem with Window-Eyes. So if you are applying CSS background images and want to keep hidden children hidden from Window-Eyes in IE, this is what you'll need to do.</p>
<h2>Browser Complicity?</h2>
<p>Working with <a href="http://www.paciellogroup.com/blog/2011/06/aviewer-beta-updated/">AViewer</a>, the very useful tool from <a href="http://www.paciellogroup.com/">the Paciello Group</a>, it seems that the accessible name that Internet Explorer 9 passes to the <abbr title="Microsoft Active Accessibility">MSAA</abbr> accessibility API for each of the anchors in the <a href="/research-files/we-display-none/">test page</a> includes both the visible link text and the nested <code>span</code> hidden using <code>display:none</code>. On the other hand, Firefox 5 passes only the visible link text to both the MSAA and IAccessible2 APIs, leaving out the hidden <code>span</code> content.</p>
<p>This leads me, without completely understanding it all, to wonder if this might have something to do with Window-Eyes' behaviour where both the visible and hidden link text is read in certain conditions in IE9, but not in Firefox. If you can shed any light on this, please do.</p>]]></content:encoded>
			<wfw:commentRss>http://www.accessibleculture.org/articles/2011/08/jaws-window-eyes-and-display-none/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Take the Time with Quick Reviews to Go Into Detail</title>
		<link>http://www.accessibleculture.org/articles/2011/05/take-the-time-with-quick-reviews-to-go-into-detail/</link>
		<comments>http://www.accessibleculture.org/articles/2011/05/take-the-time-with-quick-reviews-to-go-into-detail/#comments</comments>
		<pubDate>Tue, 10 May 2011 10:35:06 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[best practices]]></category>

		<guid isPermaLink="false">http://www.accessibleculture.org/?p=1190</guid>
		<description><![CDATA[Are you, at least in a professional capacity, occasionally asked to provide rather ad hoc comments on this or that web page markup? I am. Regularly, though, I make the mistake of assuming that the developers who will be receiving my comments are aware of web standards and accessibility concerns that I typically consider part of good development. This is&#8230; <a class="continue" href="http://www.accessibleculture.org/articles/2011/05/take-the-time-with-quick-reviews-to-go-into-detail/">Continue reading<span class="hidden"> Take the Time with Quick Reviews to Go Into Detail</span></a>]]></description>
			<content:encoded><![CDATA[<p>Are you, at least in a professional capacity, occasionally asked to provide rather <i>ad hoc</i> comments on this or that web page markup? I am. Regularly, though, I make the mistake of assuming that the developers who will be receiving my comments are aware of web standards and accessibility concerns that I typically consider part of good development.</p>
<p>This is a mistake because there is an entire range of differently skilled and concerned developers out there. Some are full-time developers who should really know better, but don't. Others simply find themselves having to markup web content, in which case I don't think we can really expect them to be fully aware of and up-to-date with best practices.</p>
<p>In either case, I'm finding that it's worth it to take the few extra minutes to follow through in my comments with detailed explanations of every step involved and the reasons behind my suggestions. When I forego this step, and assume that the developer will, on their own, get the picture and follow through in implementing best practices to their proper end, I too regularly find myself getting frustrated and later having to provide a second set of comments that more clearly provide the detailed instructions and explanations that I reasonably could and should have offered the first time around.</p>
<p>Granted, this situation may just be up to laziness on my part, or it may be that old saying about what happens when you assume coming to fruition, but from now on, when asked for these one-off and informal types of reviews, I'm going to try to offer detailed explanations of the steps to take from beginning to end, and not just assume that identifying the problem and providing general instructions will do. For instance, when I suggest that headings on a page are not properly nested, I'll take the extra minute or two to identify what heading should be at what level, and why this matters.</p>
<p>Not only does this capitalise on a potential learning moment for the developer, and, I think, show some additional professionalism and concern for doing a good job, but it will, often enough I expect, save me from doing more work later.</p>]]></content:encoded>
			<wfw:commentRss>http://www.accessibleculture.org/articles/2011/05/take-the-time-with-quick-reviews-to-go-into-detail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML5, ARIA Roles, and Screen Readers in March 2011</title>
		<link>http://www.accessibleculture.org/articles/2011/04/html5-aria-2011/</link>
		<comments>http://www.accessibleculture.org/articles/2011/04/html5-aria-2011/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 08:10:03 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[JAWS]]></category>
		<category><![CDATA[NVDA]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[SAToGo]]></category>
		<category><![CDATA[screen readers]]></category>
		<category><![CDATA[VoiceOver]]></category>
		<category><![CDATA[WAI-ARIA]]></category>
		<category><![CDATA[Window-Eyes]]></category>

		<guid isPermaLink="false">http://www.accessibleculture.org/?page_id=1169</guid>
		<description><![CDATA[Last year, in HTML5, ARIA Roles, and Screen Readers in March 2010, I took a look at how then current screen readers behaved with some of the HTML5 section elements and related WAI-ARIA document and landmark roles. Now that the major screen readers have all seen some significant updates, and both Firefox 4 and Internet Explorer 9 have officially been&#8230; <a class="continue" href="http://www.accessibleculture.org/articles/2011/04/html5-aria-2011/">Continue reading<span class="hidden"> HTML5, ARIA Roles, and Screen Readers in March 2011</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last year, in <a href="/articles/2010/05/html5-aria/">HTML5, ARIA Roles, and Screen Readers in March 2010</a>, I took a look at how then current screen readers behaved with some of the  <a href="http://www.w3.org/TR/html5/sections.html">HTML5 section elements</a> and related <a href="http://www.w3.org/TR/wai-aria/roles#document_structure_roles">WAI-ARIA document and landmark roles</a>. Now that the major screen readers have all seen some significant updates, and both Firefox 4 and Internet Explorer 9 have officially been released, I figure it's time to perform the review again and see what, if anything, has changed.</p>
<p><ins datetime="2011-08-21"><em>Update (August 21, 2011): </em> See <a href="http://www.html5accessibility.com/tests/landmarks.html">Steve Faulkner's recent update on screen readers and ARIA landmarks</a>.</ins></p>
<h2>The Screen Readers</h2>
<p>This time around, the tests were performed using the following screen readers:</p>
<ul>
<li><a href="http://www.freedomscientific.com/products/fs/jaws-product-page.asp">JAWS 12</a></li>
<li><a href="http://www.nvda-project.org/">NVDA 2011.1</a></li>
<li><a href="http://www.gwmicro.com/Window-Eyes/">Window-Eyes 7.5</a></li>
<li><a href="http://www.satogo.com/en/">SAToGo 3.2.197</a></li>
<li><a href="http://www.apple.com/accessibility/voiceover/">VoiceOver 3</a></li>
</ul>
<p>Each of the Windows-based screen readers were tested in both <abbr title="Firefox 4">FF4</abbr> and <abbr title="Internet Explorer 9">IE9</abbr>, with the exception of SAToGo, which only works with Internet Explorer.</p>
<p>The latest version of VoiceOver in Mac OS X 10.6.7 was tested in Safari 5.0.4.</p>  
<h2>The Test Cases</h2>
<nav role="navigation">
<ul>
<li><a href="/research-files/html5-aria-2011/html5.php">HTML5 Only</a></li>
<li><a href="/research-files/html5-aria-2011/html5Aria.php">HTML5 Plus ARIA Roles</a></li>
</ul>
</nav>
<p>As was the case with the <a href="/articles/2010/05/html5-aria/">previous research</a>, there are two test cases. The first features a simple page using just HTML5 sectioning and a few other semantic elements. The second effectively reproduces the same page, but applies ARIA landmark roles, and two document structure roles.</p>
<p>In particular, the HTML5 elements employed in the test cases are:</p>
<ul>
<li><code>header</code></li>
<li><code>nav</code></li>
<li><code>section</code></li>
<li><code>article</code></li>
<li><code>aside</code></li>
<li><code>footer</code></li>
</ul>
<p>The ARIA roles used in the second test case are:</p>
<ul>
<li><code>application</code></li>
<li><code>article</code></li>
<li><code>banner</code></li>
<li><code>complementary</code></li>
<li><code>contentinfo</code></li>
<li><code>main</code></li>
<li><code>navigation</code></li>
<li><code>region</code></li>
</ul>
<p>I included the one landmark role that I left out last time, namely, <code>application</code>. Additionally, because the <a href="http://www.w3.org/TR/html5/content-models.html#annotations-for-assistive-technology-products-aria">HTML5 Annotations for assistive technology products</a> specifies <code>region</code> as the default implied ARIA role for the <code>section</code> element, I've explicitly assigned this document structure role to one of the <code>section</code>s in the second test case. It's doubtful that this role will see much usage, but for the sake of testing what happens when it is used, I've gone ahead and added it. Also note that, as suggested in the <a href="http://www.w3.org/TR/wai-aria/roles#region">specification for <code>region</code></a>, I've added an <code>aria-labelledby</code> attribute that references the <code>region</code>'s associated heading.</p>
<p>Finally, I've trimmed much of the extraneous text and needless duplication of certain elements that was present in the previous versions of these test cases.</p>
<h2>Result Summaries</h2>
<p>The following presents some comments on FF4's new behaviour, along with summarised reviews of the major findings for each screen reader. <a href="#detailedResults">Detailed results</a> for each test case are available further below.</p>
<h3>Firefox 4's New Behaviour</h3>
<p>Things with FF4 are somewhat interesting, as it now exposes, via the <a href="http://www.linuxfoundation.org/collaborate/workgroups/accessibility/iaccessible2">IAccessible2</a> accessibility API, all <code>nav</code>, <code>header</code>, and <code>footer</code> elements as <code>navigation</code>, <code>banner</code>, and <code>contentinfo</code> landmarks, respectively. While this behaviour is fine for <code>nav</code> elements, it is not quite correct for <code>header</code> and <code>footer</code>.</p>
<p>The ARIA specification clearly notes that each document should only have one <code>banner</code> and one <code>contentinfo</code> landmark. By exposing every <code>header</code> and <code>footer</code> in this way, pages with more than one of either of these, which is not uncommon, will effectively have multiple <code>banner</code> and/or <code>contentinfo</code> landmarks as far as supporting assistive technology is concerned. Such is the case with NVDA 2011.1.</p>
<p>Fortunately, Mozilla is well-aware of this situation, for which there is a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=610650">bug report</a>, and it's probably reasonable to expect that this will be addressed soon enough in an upcoming release. Ideally, only the <code>header</code> and <code>footer</code> elements found at the document's root sectioning element will be exposed as <code>banner</code> and <code>contentinfo</code> landmarks. In any case, Mozilla deserves praise for starting to implement this kind of accessibility support for basic HTML5 elements with default implied ARIA semantics.</p>
<h3>How the Screen Readers Do</h3>
<h4>NVDA 2011.1</h4>
<p>NVDA is again the clear winner this time around. While its behaviour in FF4 with the <code>header</code> and <code>footer</code> elements, namely identifying each and every one as <code>banner</code> and <code>contentinfo</code> landmarks, is less than ideal, it's important to note that this is a Firefox issue, and not an NVDA issue. Otherwise, NVDA happily reads all content from both test cases in FF4.</p>
<p>NVDA in IE9 is not bad, but things are hardly great. With the <a href="/research-files/html5-aria-2011/html5Aria.php">HTML5 Plus ARIA Roles</a> test case, NVDA in IE9 says the word "edit" before reading each line of text, e.g., <q>Edit, Heading Level Two, Articles Section; Edit, Link, Skip to Link in Article A; Edit, Heading Level 3, Article A&hellip;</q>.</p>
<p>NVDA also provides navigation by landmark (via the <kbd>D</kbd> key), moving focus to and announcing the implied <code>navigation</code>, <code>banner</code>, and <code>contentinfo</code> landmarks in the <a href="/research-files/html5-aria-2011/html5.php">HTML5 Only</a> test case, as well as all explicitly identified landmarks in the second <a href="/research-files/html5-aria-2011/html5Aria.php">HTML5 Plus ARIA Roles</a> test case.</p>
<p><ins datetime="2011-08-21"><em>Update (August 21, 2011): Note that NVDA 2011.1 in FF4 (and NVDA 2011.2 in FF6 for that matter) does not provide landmark navigation to or announce <code>application</code> landmarks.</em></ins></p>
<h4>JAWS 12</h4>
<p>JAWS behaves identically in both FF4 and IE9. It doesn't do anything special with the simple HTML5 elements from the first test case, but does, in the second test case, announce all explicitly identified landmark roles: <code>application</code>, <code>banner</code>, <code>complementary</code>, <code>contentinfo</code>, <code>main</code>, and <code>navigation</code>. Further, JAWS also announces the ARIA document structure roles, <code>article</code> and <code>region</code>, as landmarks.</p>
<p>Like NVDA, in the second test case, JAWS offers landmark navigation (via the <kbd>;</kbd> key) to all explicitly identified ARIA landmark roles, as well as to the two document structure roles, <code>article</code> and <code>region</code>, which JAWS equally considers landmarks.</p>
<p>Crucially, JAWS 12 fixes the <a href="/blog/2010/09/header-elements-removed/">Firefox and <code>header</code> bug</a> from which JAWS 10 and 11 suffer, whereby all content contained in that element was effectively invisible to JAWS when used with Firefox.</p>
<h4>Window-Eyes 7.5</h4>
<p>With its latest version, Window-Eyes is still struggling with HTML5. In FF4, the results were fine with both test cases, in that all content was accessible and read as expected, even if Window-Eyes doesn't announce either the HTML5 elements or ARIA roles.</p>
<p>Where Window-Eyes in IE9 is concerned, however, the results are very disconcerting. So disconcerting, in fact, that I would very much appreciate their confirmation by other users. Briefly, Window-Eyes appears to suffer some serious difficulties with both test cases. With the <a href="/research-files/html5-aria-2011/html5.php">HTML5 Only test case</a>, it completely misrepresents the lists on the page, of which there are only two, while Window-Eyes finds five. It also finds only one heading, which isn't actually a heading, while the page actually contains six headings.</p>
<p>With the <a href="/research-files/html5-aria-2011/html5Aria.php">second test case with ARIA roles</a>, Window-Eyes correctly identifies the two lists, but doesn't quite properly recognise those lists' content. It finds two headings on the page in this test case, but again, neither of the headings it identifies are actual headings on the page. Finally, it finds three non-existent frames, to only two of which it provides navigational access.</p>
<p>Window-Eyes does not provide keyboard shortcuts for navigation by landmark.</p>
<p>Needless to say, Window-Eyes 7.5 in IE9 is an iffy combination where HTML5 or HTML5 combined with ARIA roles are concerned. What exactly is going on requires further research, but <a href="/articles/2010/05/html5-aria/">Window-Eyes' problem with lists</a>, particularly when ARIA roles are applied, has been noted before.</p>
<h4>SAToGo 3.2.197</h4>
<p>Since SAToGo clearly announces that it <q>can only provide complete spoken prompts if you use Internet Explorer</q>, I tested it in IE9 only. With the first test case, it read and provided easy access to all content. However, with the <a href="/research-files/html5-aria-2011/html5Aria.php">HTML5 Plus ARIA Roles page</a>, when reading through the whole page using the "say all" command or the arrow keys, the two <code>article</code> elements are not read, but each is announced as <q>editable text, blank</q>. Yet, if using the <kbd>Tab</kbd> key to move through the focussable items on the page, SAToGo stops at each <code>article</code>, reads its contents as if it were all just simple text, and then finishes by saying <q>editable text, blank</q>.</p>
<p>SAToGo offers landmark navigation (via the <kbd>;</kbd> key) for the <code>banner</code>, <code>navigation</code>, <code>main</code>, <code>application</code>, and <code>contentinfo</code> landmarks, but not the <code>complementary</code> landmark. And it does not announce the type of landmark when so navigating.</p>
<h4>VoiceOver 3</h4>
<p>With the first test case, VoiceOver reads and provides access to all content, but does not announce or do anything special with the HTML5 elements.</p>
<p>Its behaviour with the second test case is the same, except that, when reading through the page using the "Read All" command (<kbd>Ctrl</kbd>+<kbd>Option</kbd>+<kbd>A</kbd>), the <code>aria-labelledby</code> attribute on the <code>section</code> with <code>role="region"</code> seems to cause VoiceOver to repeatedly announce the value of the referenced label, in this case, "Articles Section", after practically each node within that <code>section</code>. Removing the <code>aria-labelledby</code> attribute prevents this.</p>
<p>While <a href="http://www.marcozehe.de/2010/06/22/apples-ios-4-supports-wai-aria-landmarks/">VoiceOver in iOS 4 provides landmark navigation</a>, this functionality does not appear to be available in the Mac OS X version of VoiceOver.</p>
<h2 id="detailedResults">Detailed Results</h2>
<p>Unless noted otherwise, the screen reader reads and provides access to all content on the page in each test case.</p>
<h3><a href="/research-files/html5-aria-2011/html5.php">HTML5 Only Test Case</a></h3>
<table>
<caption class="hidden">Detailed Results for the HTML5 Only Test Case</caption>
<thead>
<tr>
<th scope="col">Screen Reader</th>
<th scope="col" abbr="Firefox 4">FF4</th>
<th scope="col" abbr="Internet Explorer 9">IE9</th>
<th scope="col">Safari 5.0.4</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">NVDA</th>
<td>
<ul>
<li>announces <code>nav</code> elements as <q>navigation landmark</q></li>
<li>announces every <code>header</code> element as <q>banner landmark</q></li>
<li>announces every <code>footer</code> element as <q>contentinfo landmark</q></li>
<li>does not announce <code>section</code>, <code>article</code>, or <code>aside</code> elements</li>
<li>navigation by landmark to implied <code>nav</code>, <code>header</code>, and <code>footer</code> landmarks</li>
</ul>
</td>
<td><ul><li>does nothing special with the HTML5 elements</li></ul></td>
<td>N/A</td>
</tr>
<tr>
<th scope="row">JAWS</th>
<td><ul><li>does nothing special with the HTML5 elements</li></ul></td>
<td><ul><li>does nothing special with the HTML5 elements</li></ul></td>
<td>N/A</td>
</tr>
<tr>
<th scope="row">Window-Eyes</th>
<td><ul><li>does nothing special with the HTML5 elements</li></ul></td>
<td>
<ul>
<li>There are only two lists on the page, but <abbr title="Window-Eyes">WE</abbr> identifies five lists:
<ul>
<li>the first list item under the "Test Cases" heading is not identified as part of a list, while the second list item is (List 1 with 1 item)
<li>the list under the "HTML5 Only" heading is identified as a list of two items (List 2 with 2 items)
<li>just before the "Article A" heading, <abbr title="Window-Eyes">WE</abbr> identifies an empty list (List 3 with 0 items)
<li>just before the <code>aside</code> in "Article A", <abbr title="Window-Eyes">WE</abbr> identifies an empty list (List 4 with 0 items)
<li>just before the last <code>footer</code> on the page, WE identifies an empty list (List 5 with 0 items)
</ul>
</li>
<li>recognises one heading on the page, an empty first-level heading somewhere between the link and <code>footer</code> in "Article B"</li>
</ul>
</td>
<td>N/A</td>
</tr>
<tr>
<th scope="row">SAToGo</th>
<td>N/A</td>
<td><ul><li>does nothing special with the HTML5 elements</li></ul></td>
<td>N/A</td>
</tr>
<tr>
<th scope="row">VoiceOver</th>
<td>N/A</td>
<td>N/A</td>
<td><ul><li>does nothing special with the HTML5 elements</li></ul></td>
</tr>
</tbody>
</table>
<h3><a href="/research-files/html5-aria-2011/html5Aria.php">HTML5 Plus ARIA Roles Test Case</a></h3>
<table>
<caption class="hidden">Detailed Results for the HTML5 Plus ARIA Roles Test Case</caption>
<thead>
<tr>
<th scope="col">Screen Reader</th>
<th scope="col" abbr="Firefox 4">FF4</th>
<th scope="col" abbr="Internet Explorer 9">IE9</th>
<th scope="col">Safari 5.0.4</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">NVDA</th>
<td>
<ul>
<li>same behaviour as HTML5 Only</li>
<li>additionally announces all explicitly identified landmark roles: <del datetime="2011-08-21"><code>application</code>, </del><code>banner</code>, <code>complementary</code>, <code>contentinfo</code>, <code>main</code>, and <code>navigation</code></li>
<li><ins datetime="2011-08-31">does not announce <code>application</code> landmark</ins></li>
<li>does not announce document structure roles: <code>article</code>, <code>region</code></li>
<li>navigation by landmark to the implied <code>nav</code>, <code>header</code>, and <code>footer</code> landmarks, as well as all explicitly identified landmarks</li>
</ul>
</td>
<td>
<ul>
<li>same behaviour as HTML5 Only</li>
<li>additionally says "edit" before reading each line of text, e.g., <q>Edit, Heading Level Two, Articles Section; Edit, Link, Skip to Link in Article A; Edit, Edit, Heading Level 3, Article A&hellip;</q></li>
</ul>
</td>
<td>N/A</td>
</tr>
<tr>
<th scope="row">JAWS</th>
<td><ul><li>same as in IE9</li></ul></td>
<td>
<ul>
<li>announces all explicitly identified landmark roles: <code>application</code>, <code>banner</code>, <code>complementary</code>, <code>contentinfo</code>, <code>main</code>, and <code>navigation</code></li>
<li>also announces the document structure roles, <code>article</code> and <code>region</code>, as landmarks</li>
<li>navigation by landmark to all landmark roles as well as the two document structure roles which JAWS considers landmarks</li>
</ul>
</td>
<td>N/A</td>
</tr>
<tr>
<th scope="row">Window-Eyes</th>
<td><ul><li>same as in HTML5 Only</li></ul></td>
<td>
<ul>
<li><abbr title="Window-Eyes">WE</abbr> properly identifies only two lists, but:
<ul>
<li><abbr title="Window-Eyes">WE</abbr> considers the first list under "Test Cases" to contain only one item, the one with the link</li>
<li>the second list is correctly recognised as a two item list</li>
</ul>
</li>
<li><abbr title="Window-Eyes">WE</abbr> incorrectly recognises two headings on this page: the non-heading text "Vivamus placerat" in "Article A" is considered an <code>h3</code>, as is the text "Aliquam vehicula justo ut metus" in "Article B"</li>
<li>additionally, while <abbr title="Window-Eyes">WE</abbr> announces that the page has three frames, it only provides navigational access to two, one being the "Articles Section" <code>section</code> element, and one it calls the <q>Application Section Button that does nothing frame</q></li>
</ul>
</td>
<td>N/A</td>
</tr>
<tr>
<th scope="row">SAToGo</th>
<td>N/A</td>
<td>
<ul>
<li>same as HTML5 Only, except that, when reading through the page using the "say all" command or the arrow keys, each <code>article</code> elements' content is not read, but collectively announced only as <q>editable text, blank</q></li>
<li>however, if using the <kbd>Tab</kbd> key, SAToGo stops at each <code>article</code>, reads its contents as if it were just simple text, finishing with <q>editable text, blank</q></li>
<li>navigation by landmark to the <code>application</code>, <code>banner</code>, <code>contentinfo</code>, <code>main</code>, and <code>navigation</code> landmarks, but not the <code>complementary</code> landmark</li>
<li>does not announce the type of landmark when navigating by landmark</li>
</ul>
</td>
<td>N/A</td>
</tr>
<tr>
<th scope="row">VoiceOver</th>
<td>N/A</td>
<td>N/A</td>
<td>
<ul>
<li>same as HTML5 Only, except that in "Read All" mode, the <code>aria-labelledby</code> on the <code>section</code> with <code>role="region"</code> makes VoiceOver announce the value of the referenced label after practically each node within that <code>section</code>. For example, VoiceOver reads <q>Articles Section; Skip to link in Article A, Articles Section, link; Article A, Vivamus placerat, Articles Section; libero ut convallis elementum, Articles Section, link, Articles Section; This is some text in an aside, Articles Section&hellip;</q>. Once it gets to the end of the <code>section</code>, it says the word "region", which is the ARIA document structure role assigned to the <code>section</code>. Removing the <code>aria-labelledby</code> attribute prevents VoiceOver from doing this, and from mentioning that the <code>section</code> is a "region"</li>
</ul>
</td>
</tr>
</tbody>
</table>]]></content:encoded>
			<wfw:commentRss>http://www.accessibleculture.org/articles/2011/04/html5-aria-2011/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>It&#039;s Spelled aria-labelledby</title>
		<link>http://www.accessibleculture.org/articles/2011/03/its-spelled-aria-labelledby/</link>
		<comments>http://www.accessibleculture.org/articles/2011/03/its-spelled-aria-labelledby/#comments</comments>
		<pubDate>Sat, 05 Mar 2011 22:27:48 +0000</pubDate>
		<dc:creator>Jason</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[JAWS]]></category>
		<category><![CDATA[NVDA]]></category>
		<category><![CDATA[WAI-ARIA]]></category>

		<guid isPermaLink="false">http://www.accessibleculture.org/?p=1056</guid>
		<description><![CDATA[This is just a quick note on spelling. The specification for aria-labelledby identifies the attribute's correct spelling as "aria-labelledby", as opposed to what might be its expected U.S. English spelling, "aria-labeledby". Apparently, the approved spelling was selected to minimize the difficulty for developers. However, seeing as how easy it is to find examples in the wild where the attribute is&#8230; <a class="continue" href="http://www.accessibleculture.org/articles/2011/03/its-spelled-aria-labelledby/">Continue reading<span class="hidden"> It's Spelled <code>aria-labelledby</code></span></a>]]></description>
			<content:encoded><![CDATA[<p>This is just a quick note on spelling. The <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-labelledby">specification for <code>aria-labelledby</code></a> identifies the attribute's correct spelling as "aria-labelledby", as opposed to what might be its expected U.S. English spelling, "aria-labeledby". Apparently, the approved spelling was selected to <q cite="http://www.w3.org/TR/wai-aria/states_and_properties#aria-labelledby">minimize the difficulty for developers</q>. However, seeing as how easy it is to find examples in the wild where the attribute is spelled "aria-labeledby" suggests that perhaps some difficulty for developers remains.</p>
<h2>Browser and Accessiblity API Support</h2>
<p><del datetime="2011-03-07">Internet Explorer 8 supports both spellings, i.e., "aria-labelledby" and "aria-labeledby". No matter the attribute's spelling, <abbr title="Internet Explorer 8">IE8</abbr> passes the attribute value to the <abbr title="Microsoft Active Accessibility">MSAA</abbr> accessibility <abbr title="Application Programming Interface">API</abbr>, which allows supporting assistive technologies, such as screen readers, to construct the relevant component's accessible name using that value.</del></p>
<p><ins datetime="2011-03-07"><em>Update (March 7, 2011): Thanks to Steve Faulkner for setting things straight (see <a href="http://www.accessibleculture.org/blog/2011/03/its-spelled-aria-labelledby/#comment-1">Steve's comment below</a>). Turns out, in fact, that IE <em>does not</em> support the incorrect spelling "aria-labeledby", but instead, in the absence of a proper label, builds the component's accessible name using whatever text exists within the component. You can read <a href="">my reply to Steve</a> which explains how I ended up coming to this false conclusion about IE. This is good news, in the end.</em></ins></p>
<p>Firefox 3.6, on the other hand, only supports the attribute when it is spelled correctly as per the specification. The attribute's value is passed along to both the MSAA and <abbr title="IAccessible2">IA2</abbr> accessibility APIs that Firefox supports only when the attribute is spelled "aria-labelledby". Otherwise, if the attribute is spelled "aria-labeledby", assistive technologies running on top of Firefox are not able to construct an accessible name for the associated component.</p>
<h2>It's in the Spelling</h2>
<p>If you need an additional reason to spell the attribute according to spec, let it be that that Firefox only supports it when it's spelled "aria-labelledby". If it's spelled "aria-labeledby", any accessibility benefits intended by using the attribute will be lost to those using Firefox, which is the preferred browser for many, especially those using the <abbr title="NonVisual Desktop Access">NVDA</abbr> screen reader.</p>
<p>This difference in how the two browsers behave and the information they provide accessibility APIs also helps to explain the results from the two tests provided below.</p>
<div class="alertdialogtest">
<h2>Test #1: <code>aria-labelledby</code> spelled correctly</h2>
<p>Below is an ARIA <code>alertdialog</code> whose label is referenced using <code>aria-labelledby</code> spelled according to the specification.</p>
<p class="jswarning">This <code>alertdialog</code> example requires that JavaScript be enabled.</p>
<button class="opendialog">Open alertdialog #1</button>
<div class="alertdialog" role="alertdialog" aria-labelledby="title1" aria-describedby="desc1">
<div id="title1" class="dialog-title">alertdialog #1 label</div>
<div id="desc1" class="dialog-desc"><p>Text for alertdialog #1</p></div>
<button class="closedialog">Close</button>
</div>
<h3>Test #1 Results</h3>
<ul>
<li>In Firefox 3.6, both the NVDA 2011.1b2 and JAWS 12 screen readers announce the referenced label, "alertdialog #1 label," when reading the dialog.</li>
<li>In IE8, JAWS 12 announces the referenced label when reading the dialog, but NVDA 2011.1b2 announces neither the dialog's label nor its text content.</li>
</ul>
</div>
<div class="alertdialogtest">
<h2>Test #2: <code>aria-labeledby</code> spelled incorrectly</h2>
<p>An <code>alertdialog</code> whose label is referenced using <code>aria-labeledby</code> spelled incorrectly, according to the specification.</p>
<p class="jswarning">This <code>alertdialog</code> example requires that JavaScript be enabled.</p>
<button class="opendialog">Open alertdialog #2</button>
<div class="alertdialog" role="alertdialog" aria-labeledby="title2" aria-describedby="desc2">
<div id="title2" class="dialog-title">alertdialog #2 label</div>
<div id="desc2" class="dialog-desc"><p>Text for alertdialog #2</p></div>
<button class="closedialog">Close</button>
</div>
<h3>Test #2 Results</h3>
<ul>
<li>In Firefox 3.6, NVDA 2011.1b2 and JAWS 12 <strong>do not</strong> announce the referenced label, "alertdialog #2 label," when reading the dialog.</li>
<li><del datetime="2011-03-07">In IE8, JAWS 12 announces the referenced label, "alertdialog #2 label," while</del> NVDA 2011.1b2 announces neither the dialog's label nor its text content. <ins datetime="2011-03-07"><em>Update (March 7, 2011): It's now clear, based on <a href="http://www.html5accessibility.com/tests/alertdialog.html">tests by Steve Faulkner</a>, that JAWS in IE reads the label text only as part of the larger sequence of all the text contained in the dialog, and is not announcing it as an explicit label, per se.</em></ins></li>
</ul>
</div>
<h2>Spell it as Specified</h2>
<p>Despite the fact that, in some instances, <code>aria-labelledby</code> is supported when it's spelled "aria-labeledby", it is probably best just to play it safe and spell it "aria-labelledby" as defined by the specification. You'll not only be following the standard, but, and more importantly, users of Firefox with assistive technologies that support ARIA will benefit. <ins datetime="2011-03-07"><em>Update (March 7, 2011): While contrary to my initial conclusion, IE does not support the "aria-labeledby" spelling. Apparently, however, <a href="https://sites.google.com/a/chromium.org/dev/developers/design-documents/accessibility#TOC-aria-labelledby-and-aria-describedb">a development version of Google Chrome supports both spellings</a>. I've not looked at this, but Chrome's accessibility support is still very much in development at this stage.</em></ins></p>]]></content:encoded>
			<wfw:commentRss>http://www.accessibleculture.org/articles/2011/03/its-spelled-aria-labelledby/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

