Skip to content

Latest commit

 

History

History
executable file
·
319 lines (265 loc) · 14.8 KB

File metadata and controls

executable file
·
319 lines (265 loc) · 14.8 KB
id 0ssw9k
name Scrollable content can be reached with sequential focus navigation
rules_format 1.1
rule_type atomic
description This rule checks that scrollable elements or their descendants can be reached with sequential focus navigation so that they can be scrolled by keyboard
accessibility_requirements
wcag20:2.1.1 wcag20:2.1.3 wcag-technique:G202
forConformance failed passed inapplicable
true
not satisfied
further testing needed
further testing needed
forConformance failed passed inapplicable
true
not satisfied
further testing needed
further testing needed
forConformance failed passed inapplicable
false
not satisfied
further testing needed
further testing needed
input_aspects
DOM Tree
CSS Styling
acknowledgments
authors funding
Wilco Fiers
WAI-Tools

Applicability

This rule applies to any HTML element that has visible children in the flat tree, and for which at least one of the following is true:

Expectation

For each target element, at least one of the following is true:

Background

To ensure there is some element from which arrow keys can be used to control the scroll position, focus must be on or in a scrollable region. If scripts are used to prevent the keyboard events from reaching the scrollable region, this could still cause a keyboard accessibility issue. This must be tested separately.

This rule only applies to elements who scroll content in the same document. Elements such as iframes that embed other documents may also be scrollable, but for them it is the embedded document that scrolls, not the content in the same document. Such scenarios are tested separately with rules such as Iframe with negative tabindex has no interactive elements.

Assumptions

This rule assumes that all scrollable elements with visible content need to be keyboard accessible. Scrollable elements that do not need to be keyboard accessible, perhaps because their content is purely decorative, the scroll area is whitespace, or because scroll can be controlled in some other keyboard accessible way such as through a button or custom scrollbar, may fail this rule but still satisfy success criterion 2.1.1 Keyboard.

Accessibility Support

Some browsers will automatically make any scrollable element focusable to ensure keyboard accessibility. However, the browser does not include these elements in sequential focus navigation when it has a negative number as a tabindex attribute value.

Some browsers restrict scrolling to the content box of elements; while others allow to scroll the full border box, hence including the element's padding. This results in some elements being scrollable with a browser but not with another.

Other Resources

Examples

Passed

Passed Example 1

This scrollable section element is included in sequential focus navigation because it has a tabindex attribute set to 0.

<section style="height: 100px; width: 500px; overflow: scroll;" tabindex="0">
	<h1>WCAG 2.1 Abstract</h1>
	<p>
		Web Content Accessibility Guidelines (WCAG) 2.1 covers a wide range of recommendations for making Web content more
		accessible. Following these guidelines will make content more accessible to a wider range of people with
		disabilities, including accommodations for blindness and low vision, deafness and hearing loss, limited movement,
		speech disabilities, photosensitivity, and combinations of these, and some accommodation for learning disabilities
		and cognitive limitations; but will not address every user need for people with these disabilities. These guidelines
		address accessibility of web content on desktops, laptops, tablets, and mobile devices. Following these guidelines
		will also often make Web content more usable to users in general.
	</p>
</section>

Passed Example 2

This scrollable section element contains a link that is included in sequential focus navigation.

<section style="height: 100px; width: 500px; overflow: scroll;">
	<h1>
		<a href="https://www.w3.org/TR/WCAG22/#abstract">
			WCAG 2.1 Abstract
		</a>
	</h1>
	<p>
		Web Content Accessibility Guidelines (WCAG) 2.1 covers a wide range of recommendations for making Web content more
		accessible. Following these guidelines will make content more accessible to a wider range of people with
		disabilities, including accommodations for blindness and low vision, deafness and hearing loss, limited movement,
		speech disabilities, photosensitivity, and combinations of these, and some accommodation for learning disabilities
		and cognitive limitations; but will not address every user need for people with these disabilities. These guidelines
		address accessibility of web content on desktops, laptops, tablets, and mobile devices. Following these guidelines
		will also often make Web content more usable to users in general.
	</p>
</section>

Passed Example 3

This scrollable section element is inert because of the modal dialog, so neither the section nor its descendant elements are included in sequential focus navigation.

<style>
	dialog:-internal-dialog-in-top-layer::backdrop {
		background: rgba(1, 1, 1, 0.8);
	}
</style>
<section style="height: 100px; width: 500px; overflow: scroll;" tabindex="0">
	<h1>WCAG 2.1 Abstract</h1>
	<p>
		Web Content Accessibility Guidelines (WCAG) 2.1 covers a wide range of recommendations for making Web content more
		accessible. Following these guidelines will make content more accessible to a wider range of people with
		disabilities, including accommodations for blindness and low vision, deafness and hearing loss, limited movement,
		speech disabilities, photosensitivity, and combinations of these, and some accommodation for learning disabilities
		and cognitive limitations; but will not address every user need for people with these disabilities. These guidelines
		address accessibility of web content on desktops, laptops, tablets, and mobile devices. Following these guidelines
		will also often make Web content more usable to users in general.
		<button id="ppButton" onclick="openDialog()">Read more about WCAG 2.2</button>
	</p>
</section>
<dialog id="ppDialog" aria-labelledby="dialogLabel">
	<h2 id="dialogLabel">WCAG 2.2</h2>
	<p>
		<a href="https://www.w3.org/TR/WCAG22/">WCAG 2.2</a>
	</p>
	<button id="cancel" onclick="ppDialog.close()">Cancel</button>
</dialog>
<script>
	const openDialog = () => {
		ppDialog.showModal()
		myFrame.tabIndex = '-1'
	}
	ppDialog.addEventListener('close', () => (myFrame.tabIndex = 0))
	window.addEventListener('DOMContentLoaded', openDialog)
</script>

Failed

Failed Example 1

This vertically scrollable section element is not included in sequential focus navigation, nor does it have any descendants that are.

<section style="height: 100px; width: 500px; overflow-y: scroll">
	<h1>WCAG 2.1 Abstract</h1>
	<p>
		Web Content Accessibility Guidelines (WCAG) 2.1 covers a wide range of recommendations for making Web content more
		accessible. Following these guidelines will make content more accessible to a wider range of people with
		disabilities, including accommodations for blindness and low vision, deafness and hearing loss, limited movement,
		speech disabilities, photosensitivity, and combinations of these, and some accommodation for learning disabilities
		and cognitive limitations; but will not address every user need for people with these disabilities. These guidelines
		address accessibility of web content on desktops, laptops, tablets, and mobile devices. Following these guidelines
		will also often make Web content more usable to users in general.
	</p>
</section>

Failed Example 2

This horizontally scrollable section element is not included in sequential focus navigation, nor does it have any descendants that are.

<style>
	section {
		height: 100px;
		width: 400px;
		overflow-y: auto;
		white-space: nowrap;
	}
	section > img {
		display: inline-block;
		width: 80px;
	}
</style>
<h1>Our sponsors:</h1>
<section>
	<img src="/test-assets/shared/w3c-logo.png" alt="W3C" />
	<img src="/test-assets/shared/eu-logo.svg" alt="EU" />
	<img src="/test-assets/shared/w3c-logo.png" alt="W3C" />
	<img src="/test-assets/shared/eu-logo.svg" alt="EU" />
	<img src="/test-assets/shared/w3c-logo.png" alt="W3C" />
	<img src="/test-assets/shared/eu-logo.svg" alt="EU" />
	<img src="/test-assets/shared/w3c-logo.png" alt="W3C" />
</section>

Inapplicable

Inapplicable Example 1

This section element has a computed overflow of visible. Because of this its scroll distance will be 0, regardless of the element's content.

<section style="height: 95px; width: 500px;">
	<h1>WCAG 2.1 Abstract</h1>
	<p>
		Web Content Accessibility Guidelines (WCAG) 2.1 covers a wide range of recommendations for making Web content more
		accessible. Following these guidelines will make content more accessible to a wider range of people with
		disabilities, including accommodations for blindness and low vision, deafness and hearing loss, limited movement,
		speech disabilities, photosensitivity, and combinations of these, and some accommodation for learning disabilities
		and cognitive limitations; but will not address every user need for people with these disabilities. These guidelines
		address accessibility of web content on desktops, laptops, tablets, and mobile devices. Following these guidelines
		will also often make Web content more usable to users in general.
	</p>
</section>

Inapplicable Example 2

This section element has a scroll distance of 0 in both directions.

<section style="height: 95px; width: 500px; overflow: auto;">
	<p>
		<a href="https://www.w3.org/TR/WCAG22/#abstract">
			WCAG 2.1 Abstract
		</a>
	</p>
</section>

Inapplicable Example 3

This section element is not scrollable because it has a computed overflow of hidden.

<h1>
	<a href="https://www.w3.org/TR/WCAG22/#abstract">
		WCAG 2.1 Abstract
	</a>
</h1>
<section style="height: 95px; width: 500px; overflow: hidden;">
	<p>
		Web Content Accessibility Guidelines (WCAG) 2.1 covers a wide range of recommendations for making Web content more
		accessible. Following these guidelines will make content more accessible to a wider range of people with
		disabilities, including accommodations for blindness and low vision, deafness and hearing loss, limited movement,
		speech disabilities, photosensitivity, and combinations of these, and some accommodation for learning disabilities
		and cognitive limitations; but will not address every user need for people with these disabilities. These guidelines
		address accessibility of web content on desktops, laptops, tablets, and mobile devices. Following these guidelines
		will also often make Web content more usable to users in general.
	</p>
</section>

Inapplicable Example 4

This scrollable section element has no visible content.

<p>This is what a scrollbar looks like:</p>
<section style="height: 20px; width: 500px; overflow-x:scroll;">
	<div style="width: 1000px; height: 1px;"></div>
</section>

Inapplicable Example 5

This section element has a horizontal scroll distance that is less than its horizontal padding, and vertical scroll distance that is less than its vertical padding.

<section style="height: 210px; width: 530px; overflow: scroll; padding: 30px 0 30px 30px;">
	<div role="heading" aria-level="1">WCAG 2.1 Abstract</div>
	<div style="width: 520px">
		Web Content Accessibility Guidelines (WCAG) 2.1 covers a wide range of recommendations for making Web content more
		accessible. Following these guidelines will make content more accessible to a wider range of people with
		disabilities, including accommodations for blindness and low vision, deafness and hearing loss, limited movement,
		speech disabilities, photosensitivity, and combinations of these, and some accommodation for learning disabilities
		and cognitive limitations; but will not address every user need for people with these disabilities. These guidelines
		address accessibility of web content on desktops, laptops, tablets, and mobile devices. Following these guidelines
		will also often make Web content more usable to users in general.
	</div>
</section>

Inapplicable Example 6

This iframe element is not a scrollable element, but instead contains a nested browsing context that is scrollable. These must be tested separately.

<iframe src="https://www.w3.org/TR/WCAG22/#abstract" width="500" height="200"></iframe>