diff --git a/.eleventyignore b/.eleventyignore
new file mode 100644
index 0000000000..752acaedf1
--- /dev/null
+++ b/.eleventyignore
@@ -0,0 +1,25 @@
+*.md
+11ty/
+acknowledgements.html
+acknowledgements/
+conformance-challenges/
+guidelines/
+lib/
+requirements/
+script/
+wcag20/
+# working-examples is directly copied; it should not be processed as templates
+working-examples/
+xslt/
+
+# These files under understanding don't end up in output in the old build
+understanding/*/accessibility-support-documenting.html
+understanding/*/identify-changes.html
+understanding/*/interruptions-minimum.html
+understanding/*/seizures.html
+
+# Ignore templates used for creating new documents
+**/*-template.html
+
+# HTML files under img will be passthrough-copied
+**/img/*
diff --git a/.github/workflows/11ty-publish.yaml b/.github/workflows/11ty-publish.yaml
new file mode 100644
index 0000000000..adbb274be0
--- /dev/null
+++ b/.github/workflows/11ty-publish.yaml
@@ -0,0 +1,45 @@
+name: CI
+
+# Reference documentation: https://docs.github.com/en/actions/reference
+
+# See https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestbranchestags
+on:
+ push:
+ branches: [main]
+
+jobs:
+ main:
+ name: deploy (11ty)
+ runs-on: ubuntu-20.04
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v4
+ - name: Checkout gh-pages
+ uses: actions/checkout@v4
+ with:
+ ref: gh-pages
+ path: _site
+ token: ${{ secrets.W3CGRUNTBOT_TOKEN }}
+ - name: Install Node.js and dependencies
+ uses: actions/setup-node@v4
+ with:
+ cache: npm
+ node-version-file: '.nvmrc'
+ - name: Build
+ env:
+ WCAG_MODE: editors
+ run: |
+ npm i
+ npm run build
+ cp guidelines/guidelines.css guidelines/relative-luminance.html _site/guidelines/22
+ curl https://labs.w3.org/spec-generator/?type=respec"&"url=https://raw.githack.com/$GITHUB_REPOSITORY/main/guidelines/index.html -o _site/guidelines/22/index.html -f --retry 3
+ curl https://labs.w3.org/spec-generator/?type=respec"&"url=https://raw.githack.com/$GITHUB_REPOSITORY/main/requirements/22/index.html -o _site/requirements/22/index.html -f --retry 3
+ curl https://labs.w3.org/spec-generator/?type=respec"&"url=https://raw.githack.com/$GITHUB_REPOSITORY/main/conformance-challenges/index.html -o _site/conformance-challenges/index.html -f --retry 3
+ - name: Push
+ working-directory: _site
+ run: |
+ git config user.email 87540780+w3cgruntbot@users.noreply.github.com
+ git config user.name w3cgruntbot
+ git add -A .
+ git commit -m ":robot: Deploy to GitHub Pages: $GITHUB_SHA from branch $GITHUB_REF"
+ git push origin gh-pages
diff --git a/.gitignore b/.gitignore
index c23c97841c..598250a1d5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -220,3 +220,28 @@ pip-log.txt
#############
build.properties
+
+#######
+## Node
+#######
+
+node_modules/
+
+#############
+## Output
+#############
+
+/output/
+/output.html
+/techniques/toc.html
+/techniques/techniques.xml
+/techniques/technique-associations.xml
+/techniques/index-flat.html
+/techniques/about-flat.html
+/understanding/toc.html
+/understanding/index-flat.html
+/understanding/about-flat.html
+/guidelines/wcag.xml
+/guidelines/versions.xml
+/guidelines/index-flat.html
+/_site/
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000000..209e3ef4b6
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+20
diff --git a/.prettierignore b/.prettierignore
new file mode 100644
index 0000000000..2c49d868d2
--- /dev/null
+++ b/.prettierignore
@@ -0,0 +1,3 @@
+*.*
+!*.ts
+!*.11tydata.js
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000000..12c91d0119
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,4 @@
+{
+ "printWidth": 100,
+ "trailingComma": "es5"
+}
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 79c0284299..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-language: java
-env:
- global:
- - GH_REF: github.com/w3c/wcag.git
-
-git:
- depth: 3
-
-before_install:
- - tar -xzvf lib/apache-ant-1.10.6-bin.tar.gz
- - export PATH=`pwd`/apache-ant-1.10.6/bin:$PATH
-
-script:
- - mkdir output
- - git clone --depth=1 --branch=gh-pages https://github.com/w3c/wcag.git output
- - curl https://labs.w3.org/spec-generator/?type=respec"&"url=https://raw.githack.com/w3c/wcag/master/guidelines/index.html -o output/guidelines/22/index.html -f --retry 3
- - curl https://labs.w3.org/spec-generator/?type=respec"&"url=https://raw.githack.com/w3c/wcag/master/requirements/22/index.html -o output/requirements/22/index.html -f --retry 3
- - curl https://labs.w3.org/spec-generator/?type=respec"&"url=https://raw.githack.com/w3c/wcag/master/conformance-challenges/index.html -o output/conformance-challenges/index.html -f --retry 3
- - ant deploy
-
-deploy:
- provider: pages
- skip-cleanup: true
- github-token: $GITHUB_TOKEN
- keep-history: true
- local-dir: output
- on:
- branch: master
diff --git a/11ty/CustomLiquid.ts b/11ty/CustomLiquid.ts
new file mode 100644
index 0000000000..9afe6829a3
--- /dev/null
+++ b/11ty/CustomLiquid.ts
@@ -0,0 +1,582 @@
+import type { Cheerio, Element } from "cheerio";
+import { Liquid, type Template } from "liquidjs";
+import type { RenderOptions } from "liquidjs/dist/liquid-options";
+import compact from "lodash-es/compact";
+import uniq from "lodash-es/uniq";
+
+import { basename } from "path";
+
+import type { GlobalData } from "eleventy.config";
+
+import { flattenDom, load } from "./cheerio";
+import { generateId } from "./common";
+import { getTermsMap } from "./guidelines";
+import { resolveTechniqueIdFromHref, understandingToTechniqueLinkSelector } from "./techniques";
+import { techniqueToUnderstandingLinkSelector } from "./understanding";
+
+const titleSuffix = " | WAI | W3C";
+
+/** Matches index and about pages, traditionally processed differently than individual pages */
+const indexPattern = /(techniques|understanding)\/(index|about)\.html$/;
+const techniquesPattern = /\btechniques\//;
+const understandingPattern = /\bunderstanding\//;
+
+const termsMap = await getTermsMap();
+const termLinkSelector = "a:not([href])";
+
+/** Generates {% include "foo.html" %} directives from 1 or more basenames */
+const generateIncludes = (...basenames: string[]) =>
+ `\n${basenames.map((basename) => `{% include "${basename}.html" %}`).join("\n")}\n`;
+
+/**
+ * Determines whether a given string is actually HTML,
+ * not e.g. a data value Eleventy sent to the templating engine.
+ */
+const isHtmlFileContent = (html: string) => !html.startsWith("(((11ty") && !html.endsWith(".html");
+
+/**
+ * Performs common cleanup of in-page headings, and by extension, table of contents links,
+ * for final output.
+ */
+const normalizeHeading = (label: string) =>
+ label
+ .trim()
+ .replace(/In brief/, "In Brief")
+ .replace(/^(\S+) (of|for) .*$/, "$1")
+ .replace(/^Techniques and Failures .*$/, "Techniques")
+ .replace(/^Specific Benefits .*$/, "Benefits")
+ .replace(/^.* Examples$/, "Examples")
+ .replace(/^(Related )?Resources$/i, "Related Resources");
+
+/**
+ * Performs additional common cleanup for table of contents links for final output.
+ * This is expected to piggyback off of normalizeHeading, which should be called on
+ * headings prior to processing the table of contents from them.
+ */
+const normalizeTocLabel = (label: string) =>
+ label.replace(/ for this Guideline$/, "").replace(/ \(SC\)$/, "");
+
+/**
+ * Replaces a link with a technique URL with a Liquid tag which will
+ * expand to a link with the full technique ID and title.
+ * @param $el a $()-wrapped link element
+ */
+function expandTechniqueLink($el: Cheerio) {
+ const href = $el.attr("href");
+ if (!href) throw new Error("expandTechniqueLink: non-link element encountered");
+ const id = resolveTechniqueIdFromHref(href);
+ // id will be empty string for links to index, which we don't need to modify
+ if (id) $el.replaceWith(`{{ "${id}" | linkTechniques }}`);
+}
+
+const stripHtmlComments = (html: string) => html.replace(//g, "");
+
+// Dev note: Eleventy doesn't expose typings for its template engines for us to neatly extend.
+// Fortunately, it passes both the content string and the file path through to Liquid#parse:
+// https://github.com/11ty/eleventy/blob/9c3a7619/src/Engines/Liquid.js#L253
+
+/**
+ * Liquid class extension that adds support for parts of the existing build process:
+ * - flattening data-include directives prior to parsing Liquid tags
+ * (permitting Liquid even inside data-included files)
+ * - inserting header/footer content within the body of pages
+ * - generating/expanding sections with auto-generated content
+ */
+export class CustomLiquid extends Liquid {
+ public parse(html: string, filepath?: string) {
+ // Filter out Liquid calls for computed data and includes themselves
+ if (filepath && !filepath.includes("_includes/") && isHtmlFileContent(html)) {
+ const isIndex = indexPattern.test(filepath);
+ const isTechniques = techniquesPattern.test(filepath);
+ const isUnderstanding = understandingPattern.test(filepath);
+
+ if (!isTechniques && !isUnderstanding) return super.parse(html);
+
+ const $ = flattenDom(html, filepath);
+
+ // Clean out elements to be removed
+ // (e.g. editors.css & sources.css, and leftover template paragraphs)
+ // NOTE: some paragraphs with the "instructions" class actually have custom content,
+ // but for now this remains consistent with the XSLT process by stripping all of them.
+ $(".remove, p.instructions, section#meta, section.meta").remove();
+
+ const prependedIncludes = ["header"];
+ const appendedIncludes = ["wai-site-footer", "site-footer"];
+
+ if (isUnderstanding)
+ prependedIncludes.push(
+ isIndex ? "understanding/navigation-index" : "understanding/navigation"
+ );
+
+ if (isIndex) {
+ if (isTechniques) $("section#changelog li a").each((_, el) => expandTechniqueLink($(el)));
+ } else {
+ $("head").append(generateIncludes("head"));
+ appendedIncludes.push("waiscript");
+
+ // Remove resources section if it only has a placeholder item
+ const $resourcesOnlyItem = $("section#resources li:only-child");
+ if (
+ $resourcesOnlyItem.length &&
+ ($resourcesOnlyItem.html() === "Resource" || $resourcesOnlyItem.html() === "Link")
+ )
+ $("section#resources").remove();
+
+ // Fix incorrect level-2 and first-child level-3 headings
+ // (avoid changing h3s that are appropriate but aren't nested within a subsection)
+ $("body > section section h2").each((_, el) => {
+ el.tagName = "h3";
+ });
+ $("body > section > h3:first-child").each((_, el) => {
+ el.tagName = "h2";
+ });
+
+ if (isTechniques) {
+ // Expand related technique links to include full title
+ // (the XSLT process didn't handle this in this particular context)
+ const siblingCode = basename(filepath).replace(/^([A-Z]+).*$/, "$1");
+ $("section#related li")
+ .find(`a[href^='../'], a[href^=${siblingCode}]`)
+ .each((_, el) => expandTechniqueLink($(el)));
+
+ // XSLT orders related and tests last, but they are not last in source files
+ $("body")
+ .append("\n", $(`body > section#related`))
+ .append("\n", $(`body > section#tests`));
+
+ $("h1")
+ .after(generateIncludes("techniques/about"))
+ .replaceWith(generateIncludes("techniques/h1"));
+
+ const sectionCounts: Record = {};
+ let hasDuplicates = false;
+ $("body > section[id]").each((_, el) => {
+ const id = el.attribs.id.toLowerCase();
+ // Fix non-lowercase top-level section IDs (e.g. H99)
+ el.attribs.id = id;
+ // Track duplicate sections, to be processed next
+ if (id in sectionCounts) {
+ hasDuplicates = true;
+ sectionCounts[id]++;
+ } else {
+ sectionCounts[id] = 1;
+ }
+ });
+
+ // Avoid loop altogether in majority of (correct) cases
+ if (hasDuplicates) {
+ for (const [id, count] of Object.entries(sectionCounts)) {
+ if (count === 1) continue;
+ console.warn(
+ `${filepath}: Merging duplicate ${id} sections; please fix this in the source file.`
+ );
+ const $sections = $(`section[id='${id}']`);
+ const $first = $sections.first();
+ $sections.each((i, el) => {
+ if (i === 0) return;
+ const $el = $(el);
+ $el.find("> h2:first-child").remove();
+ $first.append($el.contents());
+ $el.remove();
+ });
+ }
+ }
+
+ $("section#resources h2").after(generateIncludes("techniques/intro/resources"));
+ $("section#examples section.example").each((i, el) => {
+ const $el = $(el);
+ const exampleText = `Example ${i + 1}`;
+ // Check for multiple h3 under one example, which should be h4 (e.g. SCR33)
+ $el.find("h3:not(:only-of-type)").each((_, el) => {
+ el.tagName = "h4";
+ });
+
+ const $h3 = $el.find("h3");
+ if ($h3.length) {
+ const h3Text = $h3.text(); // Used for comparisons below
+ // Some examples really have an empty h3...
+ if (!h3Text) $h3.text(exampleText);
+ // Only prepend "Example N: " if it won't be redundant (e.g. C31, F83)
+ else if (!/example \d+$/i.test(h3Text) && !/^example \d+/i.test(h3Text))
+ $h3.prepend(`${exampleText}: `);
+ } else {
+ $el.prepend(`
${exampleText}
`);
+ }
+ });
+ } else if (isUnderstanding) {
+ // Add numbers to figcaptions
+ $("figcaption").each((i, el) => {
+ const $el = $(el);
+ if (!$el.find("p").length) $el.wrapInner("");
+ $el.prepend(`Figure ${i + 1}`);
+ });
+
+ // Remove spurious copy-pasted content in 2.5.3 that doesn't belong there
+ if ($("section#benefits").length > 1) $("section#benefits").first().remove();
+ // Some pages nest Benefits inside Intent; XSLT always pulls it back out
+ $("section#intent section#benefits")
+ .insertAfter("section#intent")
+ .find("h3:first-child")
+ .each((_, el) => {
+ el.tagName = "h2";
+ });
+
+ // XSLT orders resources then techniques last, opposite of source files
+ $("body")
+ .append("\n", $(`body > section#resources`))
+ .append("\n", $(`body > section#techniques`));
+
+ // Expand top-level heading and add box for guideline/SC pages
+ if ($("section#intent").length) $("h1").replaceWith(generateIncludes("understanding/h1"));
+ $("section#intent").before(generateIncludes("understanding/about"));
+
+ $("section#techniques h2").after(generateIncludes("understanding/intro/techniques"));
+ if ($("section#sufficient .situation").length) {
+ $("section#sufficient h3").after(
+ generateIncludes("understanding/intro/sufficient-situation")
+ );
+ }
+ // success-criteria section should be auto-generated;
+ // remove any handwritten ones (e.g. Input Modalities)
+ const $successCriteria = $("section#success-criteria");
+ if ($successCriteria.length) {
+ console.warn(
+ `${filepath}: success-criteria section will be replaced with ` +
+ "generated version; please remove this from the source file."
+ );
+ $successCriteria.remove();
+ }
+ // success-criteria template only renders content for guideline (not SC) pages
+ $("body").append(generateIncludes("understanding/success-criteria"));
+
+ // Remove unpopulated techniques subsections
+ for (const id of ["sufficient", "advisory", "failure"]) {
+ $(`section#${id}:not(:has(:not(h3)))`).remove();
+ }
+
+ // Normalize subsection names for Guidelines (h2) and/or SC (h3)
+ $("section#sufficient h3").text("Sufficient Techniques");
+ $("section#advisory").find("h2, h3").text("Advisory Techniques");
+ $("section#failure h3").text("Failures");
+
+ // Add intro prose to populated sections
+ $("section#advisory")
+ .find("h2, h3")
+ .after(generateIncludes("understanding/intro/advisory"));
+ $("section#failure h3").after(generateIncludes("understanding/intro/failure"));
+ $("section#resources h2").after(generateIncludes("understanding/intro/resources"));
+
+ // Expand techniques links to always include title
+ $(understandingToTechniqueLinkSelector).each((_, el) => expandTechniqueLink($(el)));
+
+ // Add key terms by default, to be removed in #parse if there are no terms
+ $("body").append(generateIncludes("understanding/key-terms"));
+ }
+
+ // Remove h2-level sections with no content other than heading
+ $("body > section:not(:has(:not(h2)))").remove();
+
+ $("body")
+ .attr("dir", "ltr") // Already included in index/about pages
+ .append(generateIncludes("test-rules", "back-to-top"))
+ .wrapInner(``)
+ .prepend(generateIncludes("sidebar"))
+ .append(generateIncludes("help-improve"))
+ // index/about pages already include this wrapping; others do not, and need it.
+ // This wraps around table of contents & help improve, but not other includes
+ .wrapInner(``);
+ }
+
+ $("body")
+ .prepend(generateIncludes(...prependedIncludes))
+ .append(generateIncludes(...appendedIncludes));
+
+ return super.parse($.html(), filepath);
+ }
+ return super.parse(html);
+ }
+
+ public async render(templates: Template[], scope: GlobalData, options?: RenderOptions) {
+ // html contains markup after Liquid tags/includes have been processed
+ const html = (await super.render(templates, scope, options)).toString();
+ if (!isHtmlFileContent(html) || !scope) return html;
+
+ const $ = load(html);
+
+ if (indexPattern.test(scope.page.inputPath)) {
+ // Remove empty list items due to obsolete technique link removal
+ if (scope.isTechniques) $("ul.toc-wcag-docs li:empty").remove();
+ } else {
+ const $title = $("title");
+
+ if (scope.isTechniques) {
+ const isObsolete =
+ scope.technique.obsoleteSince && scope.technique.obsoleteSince <= scope.version;
+ if (isObsolete) $("body").addClass("obsolete");
+
+ $title.text(
+ (isObsolete ? "[Obsolete] " : "") +
+ `${scope.technique.id}: ${scope.technique.title}${titleSuffix}`
+ );
+
+ const aboutBoxSelector = "section#technique .box-i";
+
+ // Strip applicability paragraphs with metadata IDs (e.g. H99)
+ $("section#applicability").find("p#id, p#technology, p#type").remove();
+ // Check for custom applicability paragraph before removing the section
+ const customApplicability = $("section#applicability p")
+ .html()
+ ?.trim()
+ .replace(/^th(e|is) (technique|failure)s? (is )?/i, "")
+ .replace(/^general( technique|ly applicable)?(\.|$).*$/i, "all technologies")
+ .replace(/^appropriate to use for /i, "")
+ .replace(/^use this technique on /i, "")
+ // Work around redundant sentences (e.g. F105)
+ .replace(/\.\s+This technique relates to Success Criterion [\d\.]+\d[^\.]+\.$/, "");
+ if (customApplicability) {
+ const appliesPattern = /^(?:appli(?:es|cable)|relates) (to|when(?:ever)?)\s*/i;
+ const rephrasedApplicability = customApplicability.replace(appliesPattern, "");
+
+ // Failure pages have no default applicability paragraph, so append one first
+ if (scope.technique.technology === "failures")
+ $("section#technique .box-i").append("");
+
+ const noun = scope.technique.technology === "failures" ? "failure" : "technique";
+ const appliesMatch = appliesPattern.exec(customApplicability);
+ const connector = /^not/.test(customApplicability)
+ ? "is"
+ : `applies ${appliesMatch?.[1] || "to"}`;
+ $("section#technique .box-i p:last-child").html(
+ `This ${noun} ${connector} ` +
+ // Uncapitalize original sentence, except for all-caps abbreviations or titles
+ (/^[A-Z]{2,}/.test(rephrasedApplicability) ||
+ /^([A-Z][a-z]+(\s+|\.?$))+(\/|$)/.test(rephrasedApplicability)
+ ? rephrasedApplicability
+ : rephrasedApplicability[0].toLowerCase() + rephrasedApplicability.slice(1)) +
+ (/(\.|:)$/.test(rephrasedApplicability) ? "" : ".")
+ );
+
+ // Append any relevant subsequent paragraphs or lists from applicability section
+ const $additionalApplicability = $("section#applicability").find(
+ "p:not(:first-of-type), ul, ol"
+ );
+ const additionalApplicabilityText = $additionalApplicability.text();
+ const excludes = [
+ "None listed.", // Template filler
+ "This technique relates to:", // Redundant of auto-generated content
+ ];
+ if (excludes.every((exclude) => !additionalApplicabilityText.includes(exclude)))
+ $additionalApplicability.appendTo(aboutBoxSelector);
+ }
+ $("section#applicability").remove();
+
+ // Remove any effectively-empty techniques/resources sections,
+ // due to template boilerplate or obsolete technique removal
+ $("section#related:not(:has(a))").remove();
+ $("section#resources:not(:has(a, li))").remove();
+
+ // Update understanding links to always use base URL
+ // (mainly to avoid any case-sensitivity issues)
+ $(techniqueToUnderstandingLinkSelector).each((_, el) => {
+ el.attribs.href = el.attribs.href.replace(/^.*\//, scope.understandingUrl);
+ });
+ } else if (scope.isUnderstanding) {
+ if (scope.guideline) {
+ const type = scope.guideline.type === "SC" ? "Success Criterion" : scope.guideline.type;
+ $title.text(
+ `Understanding ${type} ${scope.guideline.num}: ${scope.guideline.name}${titleSuffix}`
+ );
+ } else {
+ $title.text(
+ $title.text().replace(/WCAG 2( |$)/, `WCAG ${scope.versionDecimal}$1`) + titleSuffix
+ );
+ }
+
+ // Remove Techniques section from obsolete SCs (e.g. Parsing in 2.2)
+ if (scope.guideline?.level === "") $("section#techniques").remove();
+ }
+
+ // Process defined terms within #render,
+ // where we have access to global data and the about box's HTML
+ const $termLinks = $(termLinkSelector);
+ const extractTermName = ($el: Cheerio) => {
+ const name = $el
+ .text()
+ .toLowerCase()
+ .trim()
+ .replace(/\s*\n+\s*/, " ");
+ const term = termsMap[name];
+ if (!term) {
+ console.warn(`${scope.page.inputPath}: Term not found: ${name}`);
+ return;
+ }
+ // Return standardized name for Key Terms definition lists
+ return term.name;
+ };
+
+ if (scope.isTechniques) {
+ $termLinks.each((_, el) => {
+ const $el = $(el);
+ const termName = extractTermName($el);
+ $el
+ .attr("href", `${scope.guidelinesUrl}#${termName ? termsMap[termName].trId : ""}`)
+ .attr("target", "terms");
+ });
+ } else if (scope.isUnderstanding) {
+ const $termsList = $("section#key-terms dl");
+ const extractTermNames = ($links: Cheerio) =>
+ compact(uniq($links.toArray().map((el) => extractTermName($(el)))));
+
+ if ($termLinks.length) {
+ let termNames = extractTermNames($termLinks);
+ // This is one loop but effectively multiple passes,
+ // since terms may reference other terms in their own definitions.
+ // Each iteration may append to termNames.
+ for (let i = 0; i < termNames.length; i++) {
+ const term = termsMap[termNames[i]];
+ if (!term) continue; // This will already warn via extractTermNames
+
+ const $definition = load(term.definition);
+ const $definitionTermLinks = $definition(termLinkSelector);
+ if ($definitionTermLinks.length) {
+ termNames = uniq(termNames.concat(extractTermNames($definitionTermLinks)));
+ }
+ }
+
+ // Iterate over sorted names to populate alphabetized Key Terms definition list
+ termNames.sort((a, b) => {
+ if (a.toLowerCase() < b.toLowerCase()) return -1;
+ if (a.toLowerCase() > b.toLowerCase()) return 1;
+ return 0;
+ });
+ for (const name of termNames) {
+ const term = termsMap[name]; // Already verified existence in the earlier loop
+ $termsList.append(
+ `
${term.name}
` +
+ `
${term.definition}
`
+ );
+ }
+
+ // Iterate over non-href links once more in now-expanded document to add hrefs
+ $(termLinkSelector).each((_, el) => {
+ const name = extractTermName($(el));
+ el.attribs.href = `#${name ? termsMap[name].id : ""}`;
+ });
+ } else {
+ // No terms: remove skeleton that was placed in #parse
+ $("section#key-terms").remove();
+ }
+ }
+
+ // Remove items that end up empty due to invalid technique IDs during #parse
+ // (e.g. removed/deprecated)
+ if (scope.isTechniques) {
+ $("section#related li:empty").remove();
+ } else if (scope.isUnderstanding) {
+ // :empty doesn't work here since there may be whitespace
+ // (can't trim whitespace in the liquid tag since some links have more text after)
+ $(`section#techniques li`)
+ .filter((_, el) => !$(el).text().trim())
+ .remove();
+
+ // Prepend guidelines base URL to non-dfn anchor links in guidelines-derived content
+ // (including both the guideline/SC box at the top and Key Terms at the bottom)
+ $("#guideline, #success-criterion, #key-terms")
+ .find("a[href^='#']:not([href^='#dfn-'])")
+ .each((_, el) => {
+ el.attribs.href = scope.guidelinesUrl + el.attribs.href;
+ });
+ }
+ }
+
+ // Expand note paragraphs after parsing and rendering,
+ // after Guideline/SC content for Understanding pages is rendered.
+ // (This is also needed for techniques/about)
+ $("div.note").each((_, el) => {
+ const $el = $(el);
+ $el.replaceWith(`
+
Note
+
${$el.html()}
+
`);
+ });
+ // Handle p variant after div (the reverse would double-process)
+ $("p.note").each((_, el) => {
+ const $el = $(el);
+ $el.replaceWith(`
+
Note
+
${$el.html()}
+
`);
+ });
+
+ // Add header to example sections in Key Terms (aside) and Conformance (div)
+ $("aside.example, div.example").each((_, el) => {
+ const $el = $(el);
+ $el.prepend(`
Example
`);
+ });
+
+ // We don't need to do any more processing for index/about pages other than stripping comments
+ if (indexPattern.test(scope.page.inputPath)) return stripHtmlComments($.html());
+
+ // Handle new-in-version content
+ $("[class^='wcag']").each((_, el) => {
+ // Just like the XSLT process, this naively assumes that version numbers are the same length
+ const classVersion = +el.attribs.class.replace(/^wcag/, "");
+ const buildVersion = +scope.version;
+ if (isNaN(classVersion)) throw new Error(`Invalid wcagXY class found: ${el.attribs.class}`);
+ if (classVersion > buildVersion) {
+ $(el).remove();
+ } else if (classVersion === buildVersion) {
+ $(el).prepend(`New in WCAG ${scope.versionDecimal}: `);
+ }
+ // Output as-is if content pertains to a version older than what's being built
+ });
+
+ if (!scope.isUnderstanding || scope.guideline) {
+ // Fix inconsistent heading labels
+ // (another pass is done on top of this for table of contents links below)
+ $("h2").each((_, el) => {
+ const $el = $(el);
+ $el.text(normalizeHeading($el.text()));
+ });
+ }
+
+ // Allow autogenerating missing top-level section IDs in understanding docs,
+ // but don't pick up incorrectly-nested sections in some techniques pages (e.g. H91)
+ const sectionSelector = scope.isUnderstanding ? "section" : "section[id]:not(.obsolete)";
+ const sectionH2Selector = "h2:first-child";
+ const $h2Sections = $(`${sectionSelector}:has(${sectionH2Selector})`);
+ if ($h2Sections.length) {
+ // Generate table of contents after parsing and rendering,
+ // when we have sections and sidebar skeleton already reordered
+ const $tocList = $(".sidebar nav ul");
+ $h2Sections.each((_, el) => {
+ if (!el.attribs.id) el.attribs.id = generateId($(el).find(sectionH2Selector).text());
+ $("")
+ .attr("href", `#${el.attribs.id}`)
+ .text(normalizeTocLabel($(el).find(sectionH2Selector).text()))
+ .appendTo($tocList)
+ .wrap("");
+ $tocList.append("\n");
+ });
+ } else {
+ // Remove ToC sidebar that was added in #parse if there's nothing to list in it
+ $(".sidebar").remove();
+ }
+
+ // Autogenerate remaining IDs after constructing table of contents.
+ // NOTE: This may overwrite some IDs set in HTML (for techniques examples),
+ // and may result in duplicates; this is consistent with the XSLT process.
+ const sectionHeadingSelector = ["h3", "h4", "h5"]
+ .map((tag) => `> ${tag}:first-child`)
+ .join(", ");
+ const autoIdSectionSelectors = ["section:not([id])"];
+ if (scope.isTechniques) autoIdSectionSelectors.push("section.example");
+ $(autoIdSectionSelectors.join(", "))
+ .filter(`:has(${sectionHeadingSelector})`)
+ .each((_, el) => {
+ el.attribs.id = generateId($(el).find(sectionHeadingSelector).text());
+ });
+
+ return stripHtmlComments($.html());
+ }
+}
diff --git a/11ty/README.md b/11ty/README.md
new file mode 100644
index 0000000000..168db395e5
--- /dev/null
+++ b/11ty/README.md
@@ -0,0 +1,91 @@
+# Eleventy Infrastructure for WCAG Techniques and Understanding
+
+This subdirectory contains ES Modules re-implementing pieces of the
+XSLT-based build process using Eleventy.
+
+## Usage
+
+Make sure you have Node.js installed. This has primarily been tested with v20,
+the current LTS at time of writing.
+
+If you use [fnm](https://github.com/Schniz/fnm) or [nvm](https://github.com/nvm-sh/nvm) to manage multiple Node.js versions,
+you can switch to the recommended version by typing `fnm use` or `nvm use`
+(with no additional arguments) while in the repository directory.
+
+Otherwise, you can download an installer from [nodejs.org](https://nodejs.org/).
+
+First, run `npm i` in the root directory of the repository to install dependencies.
+
+Common tasks:
+
+- `npm run build` runs a one-time build
+- `npm start` runs a local server with hot-reloading to preview changes as you make them:
+ - http://localhost:8080/techniques
+ - http://localhost:8080/understanding
+
+Maintenance tasks (for working with Eleventy config and supporting files under this subdirectory):
+
+- `npm run check` checks for TypeScript errors
+- `npm run fmt` formats all TypeScript files
+
+## Environment Variables
+
+### `WCAG_CVSDIR`
+
+**Usage context:** `publish-w3c` script only
+
+Indicates top-level path of W3C CVS checkout, for WAI site updates (via `publish-w3c` script).
+
+**Default:** `../../../w3ccvs` (same as in Ant/XSLT build process)
+
+### `WCAG_VERBOSE`
+
+**Usage context:** Local development, debugging
+
+Prints more log messages that are typically noisy and uninteresting,
+but may be useful if you're not seeing what you expect in the output files.
+
+**Default:** Unset (set to any non-empty value to enable)
+
+### `WCAG_VERSION`
+
+**Usage context:** currently this should not be changed, pending future improvements to `21` support
+
+Indicates WCAG version being built, in `XY` format (i.e. no `.`).
+Influences base URLs for links to guidelines, techniques, and understanding pages.
+
+**Default:** `22`
+
+### `WCAG_MODE`
+
+**Usage context:** should not need to be set manually except in specific testing scenarios
+
+Influences base URLs for links to guidelines, techniques, and understanding pages.
+Typically set by specific npm scripts or CI processes.
+
+Note that setting `WCAG_MODE` to any non-empty value (even one not listed below) will also result
+in page footers referencing last modified times based on git, rather than the local filesystem.
+
+Possible values:
+
+- Unset **(default)** - Sets base URLs appropriate for local testing
+- `editors` - Sets base URLs appropriate for `gh-pages` publishing; used by deploy action
+- `publication` - Sets base URLs appropriate for WAI site publishing; used by `publish-w3c` script
+
+### `GITHUB_REPOSITORY`
+
+**Usage context:** Automatically set during GitHub workflows; should not need to be set manually
+
+Influences base URLs for links to guidelines, techniques, and understanding pages,
+when `WCAG_MODE=editors` is also set.
+
+**Default:** `w3c/wcag`
+
+## Other points of interest
+
+- The main configuration can be found in top-level `eleventy.config.ts`
+- Build commands are defined in top-level `package.json` under `scripts`,
+ and can be run via `npm run `
+- If you see files named `*.11tydata.*`, these contribute data to the Eleventy build
+ (see Template and Directory Data files under
+ [Sources of Data](https://www.11ty.dev/docs/data/#sources-of-data))
diff --git a/11ty/cheerio.ts b/11ty/cheerio.ts
new file mode 100644
index 0000000000..f1292be14b
--- /dev/null
+++ b/11ty/cheerio.ts
@@ -0,0 +1,64 @@
+import { load, type CheerioOptions } from "cheerio";
+import { readFileSync } from "fs";
+import { readFile } from "fs/promises";
+import { dirname, resolve } from "path";
+
+export { load } from "cheerio";
+
+/** Convenience function that combines readFile and load. */
+export const loadFromFile = async (
+ inputPath: string,
+ options?: CheerioOptions | null,
+ isDocument?: boolean
+) => load(await readFile(inputPath, "utf8"), options, isDocument);
+
+/**
+ * Retrieves content for a data-include, either from _includes,
+ * or relative to the input file.
+ * Operates synchronously for simplicity of use within Cheerio callbacks.
+ *
+ * @param includePath A data-include attribute value
+ * @param inputPath Path (relative to repo root) to file containing the directive
+ * @returns
+ */
+function readInclude(includePath: string, inputPath: string) {
+ const relativePath = resolve(dirname(inputPath), includePath);
+ if (includePath.startsWith("..")) return readFileSync(relativePath, "utf8");
+
+ try {
+ // Prioritize any match under _includes (e.g. over local toc.html built via XSLT)
+ return readFileSync(resolve("_includes", includePath), "utf8");
+ } catch (error) {
+ return readFileSync(relativePath, "utf8");
+ }
+}
+
+/**
+ * Resolves data-include directives in the given file, a la flatten-document.xslt.
+ * This is a lower-level version for use in Eleventy configuration;
+ * you'd probably rather use flattenDomFromFile in other cases.
+ *
+ * @param content String containing HTML to process
+ * @param inputPath Path (relative to repo root) to file containing the HTML
+ * (needed for data-include resolution)
+ * @returns Cheerio instance containing "flattened" DOM
+ */
+export function flattenDom(content: string, inputPath: string) {
+ const $ = load(content);
+
+ $("body [data-include]").each((_, el) => {
+ const replacement = readInclude(el.attribs["data-include"], inputPath);
+ // Replace entire element or children, depending on data-include-replace
+ if (el.attribs["data-include-replace"]) $(el).replaceWith(replacement);
+ else $(el).removeAttr("data-include").html(replacement);
+ });
+
+ return $;
+}
+
+/**
+ * Convenience version of flattenDom that requires only inputPath to be passed.
+ * @see flattenDom
+ */
+export const flattenDomFromFile = async (inputPath: string) =>
+ flattenDom(await readFile(inputPath, "utf8"), inputPath);
diff --git a/11ty/common.ts b/11ty/common.ts
new file mode 100644
index 0000000000..ade5d87f14
--- /dev/null
+++ b/11ty/common.ts
@@ -0,0 +1,30 @@
+/** @fileoverview Common functions used by multiple parts of the build process */
+
+import type { Guideline, Principle, SuccessCriterion } from "./guidelines";
+
+/** Generates an ID for heading permalinks. Equivalent to wcag:generate-id in base.xslt. */
+export function generateId(title: string) {
+ if (title === "Parsing (Obsolete and removed)") return "parsing";
+ return title
+ .replace(/\s+/g, "-")
+ .replace(/[,\():]+/g, "")
+ .toLowerCase();
+}
+
+/** Given a string "xy", returns "x.y" */
+export const resolveDecimalVersion = (version: `${number}`) => version.split("").join(".");
+
+/** Sort function for ordering WCAG principle/guideline/SC numbers ascending */
+export function wcagSort(
+ a: Principle | Guideline | SuccessCriterion,
+ b: Principle | Guideline | SuccessCriterion
+) {
+ const aParts = a.num.split(".").map((n) => +n);
+ const bParts = b.num.split(".").map((n) => +n);
+
+ for (let i = 0; i < 3; i++) {
+ if (aParts[i] > bParts[i] || (aParts[i] && !bParts[i])) return 1;
+ if (aParts[i] < bParts[i] || (bParts[i] && !aParts[i])) return -1;
+ }
+ return 0;
+}
diff --git a/11ty/cp-cvs.ts b/11ty/cp-cvs.ts
new file mode 100644
index 0000000000..3adf39bb7c
--- /dev/null
+++ b/11ty/cp-cvs.ts
@@ -0,0 +1,53 @@
+/** @fileoverview script to copy already-built output to CVS subfolders */
+
+import { glob } from "glob";
+import { mkdirp } from "mkdirp";
+
+import { copyFile, unlink } from "fs/promises";
+import { dirname, join } from "path";
+
+import { assertIsWcagVersion } from "./guidelines";
+
+const outputBase = "_site";
+const cvsBase = process.env.WCAG_CVSDIR || "../../../w3ccvs";
+const wcagVersion = process.env.WCAG_VERSION || "22";
+assertIsWcagVersion(wcagVersion);
+const wcagBase = `${cvsBase}/WWW/WAI/WCAG${wcagVersion}`;
+
+// Map (git) sources to (CVS) destinations, since some don't match case-sensitively
+const dirs = {
+ techniques: "Techniques",
+ understanding: "Understanding",
+ "working-examples": "working-examples",
+};
+
+for (const [srcDir, destDir] of Object.entries(dirs)) {
+ const cleanPaths = await glob(`**`, {
+ cwd: join(wcagBase, destDir),
+ ignore: ["**/CVS/**"],
+ nodir: true,
+ });
+
+ for (const path of cleanPaths) await unlink(join(wcagBase, destDir, path));
+
+ const indexPaths = await glob(`**/index.html`, { cwd: join(outputBase, srcDir) });
+ const nonIndexPaths = await glob(`**`, {
+ cwd: join(outputBase, srcDir),
+ ignore: ["**/index.html"],
+ nodir: true,
+ });
+
+ for (const path of indexPaths) {
+ const srcPath = join(outputBase, srcDir, path);
+ const destPath = join(wcagBase, destDir, path.replace(/index\.html$/, "Overview.html"));
+ await mkdirp(dirname(destPath));
+ await copyFile(srcPath, destPath);
+ }
+
+ for (const path of nonIndexPaths) {
+ const srcPath = join(outputBase, srcDir, path);
+ const destPath = join(wcagBase, destDir, path);
+ await mkdirp(dirname(destPath));
+ await copyFile(srcPath, destPath);
+ }
+}
diff --git a/11ty/guidelines.ts b/11ty/guidelines.ts
new file mode 100644
index 0000000000..08c4ec1c3e
--- /dev/null
+++ b/11ty/guidelines.ts
@@ -0,0 +1,227 @@
+import type { Cheerio, Element } from "cheerio";
+import { glob } from "glob";
+
+import { readFile } from "fs/promises";
+import { basename } from "path";
+
+import { flattenDomFromFile, load } from "./cheerio";
+import { generateId } from "./common";
+
+export type WcagVersion = "20" | "21" | "22";
+export function assertIsWcagVersion(v: string): asserts v is WcagVersion {
+ if (!/^2[012]$/.test(v)) throw new Error(`Unexpected version found: ${v}`);
+}
+
+/**
+ * Interface describing format of entries in guidelines/act-mapping.json
+ */
+interface ActRule {
+ deprecated: boolean;
+ permalink: string;
+ proposed: boolean;
+ successCriteria: string[];
+ title: string;
+ wcagTechniques: string[];
+}
+
+type ActMapping = {
+ "act-rules": ActRule[];
+};
+
+/** Data used for test-rules sections, from act-mapping.json */
+export const actRules = (
+ JSON.parse(await readFile("guidelines/act-mapping.json", "utf8")) as ActMapping
+)["act-rules"];
+
+/**
+ * Returns an object with keys for each existing WCAG 2 version,
+ * each mapping to an array of basenames of HTML files under understanding/
+ * (Functionally equivalent to "guidelines-versions" target in build.xml)
+ */
+export async function getGuidelinesVersions() {
+ const paths = await glob("*/*.html", { cwd: "understanding" });
+ const versions: Record = { "20": [], "21": [], "22": [] };
+
+ for (const path of paths) {
+ const [version, filename] = path.split("/");
+ assertIsWcagVersion(version);
+ versions[version].push(basename(filename, ".html"));
+ }
+
+ for (const version of Object.keys(versions)) {
+ assertIsWcagVersion(version);
+ versions[version].sort();
+ }
+ return versions;
+}
+
+/**
+ * Like getGuidelinesVersions, but mapping each basename to the version it appears in
+ */
+export async function getInvertedGuidelinesVersions() {
+ const versions = await getGuidelinesVersions();
+ const invertedVersions: Record = {};
+ for (const [version, basenames] of Object.entries(versions)) {
+ for (const basename of basenames) {
+ invertedVersions[basename] = version;
+ }
+ }
+ return invertedVersions;
+}
+
+export interface DocNode {
+ id: string;
+ name: string;
+ /** Helps distinguish entity type when passed out-of-context; used for navigation */
+ type?: "Principle" | "Guideline" | "SC";
+}
+
+export interface Principle extends DocNode {
+ content: string;
+ num: `${number}`; // typed as string for consistency with guidelines/SC
+ version: "WCAG20";
+ guidelines: Guideline[];
+ type: "Principle";
+}
+
+export interface Guideline extends DocNode {
+ content: string;
+ num: `${Principle["num"]}.${number}`;
+ version: `WCAG${"20" | "21"}`;
+ successCriteria: SuccessCriterion[];
+ type: "Guideline";
+}
+
+export interface SuccessCriterion extends DocNode {
+ content: string;
+ num: `${Guideline["num"]}.${number}`;
+ /** Level may be empty for obsolete criteria */
+ level: "A" | "AA" | "AAA" | "";
+ version: `WCAG${WcagVersion}`;
+ type: "SC";
+}
+
+export function isSuccessCriterion(criterion: any): criterion is SuccessCriterion {
+ return !!(criterion?.type === "SC" && "level" in criterion);
+}
+
+/**
+ * Returns HTML content used for Understanding guideline/SC boxes.
+ * @param $el Cheerio element of the full section from flattened guidelines/index.html
+ */
+const getContentHtml = ($el: Cheerio) => {
+ // Load HTML into a new instance, remove elements we don't want, then return the remainder
+ const $ = load($el.html()!, null, false);
+ $("h1, h2, h3, h4, h5, h6, section, .change, .conformance-level").remove();
+ return $.html();
+};
+
+/**
+ * Resolves information from guidelines/index.html;
+ * comparable to the principles section of wcag.xml from the guidelines-xml Ant task.
+ */
+export async function getPrinciples() {
+ const versions = await getInvertedGuidelinesVersions();
+ const $ = await flattenDomFromFile("guidelines/index.html");
+
+ const principles: Principle[] = [];
+ $(".principle").each((i, el) => {
+ const guidelines: Guideline[] = [];
+ $(".guideline", el).each((j, guidelineEl) => {
+ const successCriteria: SuccessCriterion[] = [];
+ $(".sc", guidelineEl).each((k, scEl) => {
+ const resolvedVersion = versions[scEl.attribs.id];
+ assertIsWcagVersion(resolvedVersion);
+
+ successCriteria.push({
+ content: getContentHtml($(scEl)),
+ id: scEl.attribs.id,
+ name: $("h4", scEl).text().trim(),
+ num: `${i + 1}.${j + 1}.${k + 1}`,
+ level: $("p.conformance-level", scEl).text().trim() as SuccessCriterion["level"],
+ type: "SC",
+ version: `WCAG${resolvedVersion}`,
+ });
+ });
+
+ guidelines.push({
+ content: getContentHtml($(guidelineEl)),
+ id: guidelineEl.attribs.id,
+ name: $("h3", guidelineEl).text().trim(),
+ num: `${i + 1}.${j + 1}`,
+ type: "Guideline",
+ version: guidelineEl.attribs.id === "input-modalities" ? "WCAG21" : "WCAG20",
+ successCriteria,
+ });
+ });
+
+ principles.push({
+ content: getContentHtml($(el)),
+ id: el.attribs.id,
+ name: $("h2", el).text().trim(),
+ num: `${i + 1}`,
+ type: "Principle",
+ version: "WCAG20",
+ guidelines,
+ });
+ });
+
+ return principles;
+}
+
+/**
+ * Returns a flattened object hash, mapping shortcodes to each principle/guideline/SC.
+ */
+export function getFlatGuidelines(principles: Principle[]) {
+ const map: Record = {};
+ for (const principle of principles) {
+ map[principle.id] = principle;
+ for (const guideline of principle.guidelines) {
+ map[guideline.id] = guideline;
+ for (const criterion of guideline.successCriteria) {
+ map[criterion.id] = criterion;
+ }
+ }
+ }
+ return map;
+}
+export type FlatGuidelinesMap = ReturnType;
+
+interface Term {
+ definition: string;
+ /** generated id for use in Understanding pages */
+ id: string;
+ name: string;
+ /** id of dfn in TR, which matches original id in terms file */
+ trId: string;
+}
+
+/**
+ * Resolves term definitions from guidelines/index.html organized for lookup by name;
+ * comparable to the term elements in wcag.xml from the guidelines-xml Ant task.
+ */
+export async function getTermsMap() {
+ const $ = await flattenDomFromFile("guidelines/index.html");
+ const terms: Record = {};
+
+ $("dfn").each((_, el) => {
+ const $el = $(el);
+ const term: Term = {
+ // Note: All applicable s have explicit id attributes for TR,
+ // but the XSLT process generates id from the element's text which is not always the same
+ id: `dfn-${generateId($el.text())}`,
+ definition: getContentHtml($el.parent().next()),
+ name: $el.text(),
+ trId: el.attribs.id,
+ };
+
+ // Include both original and all-lowercase version to simplify lookups
+ // (since most synonyms are lowercase) while preserving case in name
+ const names = [term.name, term.name.toLowerCase()].concat(
+ (el.attribs["data-lt"] || "").toLowerCase().split("|")
+ );
+ for (const name of names) terms[name] = term;
+ });
+
+ return terms;
+}
diff --git a/11ty/techniques.ts b/11ty/techniques.ts
new file mode 100644
index 0000000000..94820e7784
--- /dev/null
+++ b/11ty/techniques.ts
@@ -0,0 +1,278 @@
+import type { Cheerio } from "cheerio";
+import { glob } from "glob";
+import matter from "gray-matter";
+import capitalize from "lodash-es/capitalize";
+import uniqBy from "lodash-es/uniqBy";
+
+import { readFile } from "fs/promises";
+import { basename } from "path";
+
+import { load, loadFromFile } from "./cheerio";
+import {
+ assertIsWcagVersion,
+ isSuccessCriterion,
+ type FlatGuidelinesMap,
+ type SuccessCriterion,
+ type WcagVersion,
+} from "./guidelines";
+import { wcagSort } from "./common";
+
+/** Maps each technology to its title for index.html */
+export const technologyTitles = {
+ aria: "ARIA Techniques",
+ "client-side-script": "Client-Side Script Techniques",
+ css: "CSS Techniques",
+ failures: "Common Failures",
+ flash: "Flash Techniques", // Deprecated in 2020
+ general: "General Techniques",
+ html: "HTML Techniques",
+ pdf: "PDF Techniques",
+ "server-side-script": "Server-Side Script Techniques",
+ smil: "SMIL Techniques",
+ silverlight: "Silverlight Techniques", // Deprecated in 2020
+ text: "Plain-Text Techniques",
+};
+export type Technology = keyof typeof technologyTitles;
+export const technologies = Object.keys(technologyTitles) as Technology[];
+
+function assertIsTechnology(
+ technology: string
+): asserts technology is keyof typeof technologyTitles {
+ if (!(technology in technologyTitles)) throw new Error(`Invalid technology name: ${technology}`);
+}
+
+const associationTypes = ["sufficient", "advisory", "failure"] as const;
+type AssociationType = (typeof associationTypes)[number];
+
+interface TechniqueAssociation {
+ criterion: SuccessCriterion;
+ type: Capitalize;
+ /** Indicates this technique must be paired with specific "child" techniques to fulfill SC */
+ hasUsageChildren: boolean;
+ /**
+ * Technique ID of "parent" technique(s) this is paired with to fulfill SC.
+ * This is typically 0 or 1 technique, but may be multiple in rare cases.
+ */
+ usageParentIds: string[];
+ /**
+ * Text description of "parent" association, if it does not reference a specific technique;
+ * only populated if usageParentIds is empty.
+ */
+ usageParentDescription: string;
+ /** Technique IDs this technique must be implemented with to fulfill SC, if any */
+ with: string[];
+}
+
+function assertIsAssociationType(type?: string): asserts type is AssociationType {
+ if (!associationTypes.includes(type as AssociationType))
+ throw new Error(`Association processed for unexpected section ${type}`);
+}
+
+/**
+ * Pulls the basename out of a technique link href.
+ * This intentionally returns empty string (falsy) if a directory link happens to be passed.
+ */
+export const resolveTechniqueIdFromHref = (href: string) =>
+ href.replace(/^.*\//, "").replace(/\.html$/, "");
+
+/**
+ * Selector that can detect relative and absolute technique links from understanding docs
+ */
+export const understandingToTechniqueLinkSelector = [
+ "[href^='../Techniques/' i]",
+ "[href^='../../techniques/' i]",
+ "[href^='https://www.w3.org/WAI/WCAG' i][href*='/Techniques/' i]",
+]
+ .map((value) => `a${value}`)
+ .join(", ") as "a";
+
+/**
+ * Returns object mapping technique IDs to SCs that reference it;
+ * comparable to technique-associations.xml but in a more ergonomic format.
+ */
+export async function getTechniqueAssociations(guidelines: FlatGuidelinesMap) {
+ const associations: Record = {};
+ const itemSelector = associationTypes.map((type) => `section#${type} li`).join(", ");
+
+ const paths = await glob("understanding/*/*.html");
+ for (const path of paths) {
+ const criterion = guidelines[basename(path, ".html")];
+ if (!isSuccessCriterion(criterion)) continue;
+
+ const $ = await loadFromFile(path);
+ $(itemSelector).each((_, liEl) => {
+ const $liEl = $(liEl);
+ const $parentListItem = $liEl.closest("ul, ol").closest("li");
+ // Identify which expected section the list was found under
+ const associationType = $liEl
+ .closest(associationTypes.map((type) => `section#${type}`).join(", "))
+ .attr("id");
+ assertIsAssociationType(associationType);
+
+ /** Finds matches only within the given list item (not under child lists) */
+ const queryNonNestedChildren = ($el: Cheerio, selector: string) =>
+ $el.find(selector).filter((_, aEl) => $(aEl).closest("li")[0] === $el[0]);
+
+ const $techniqueLinks = queryNonNestedChildren($liEl, understandingToTechniqueLinkSelector);
+ $techniqueLinks.each((_, aEl) => {
+ const usageParentIds = queryNonNestedChildren(
+ $parentListItem,
+ understandingToTechniqueLinkSelector
+ )
+ .toArray()
+ .map((el) => resolveTechniqueIdFromHref(el.attribs.href));
+
+ // Capture the "X" in "X or more" phrasing, to include a phrase about
+ // combining with other techniques if more than one is required.
+ const descriptionDependencyPattern =
+ /(?:^|,?\s+)(?:by )?using\s+(?:(\w+) (?:or more )?of )?the\s+(?:following )?techniques(?: below)?(?::|\.)?\s*$/i;
+ const parentHtml = usageParentIds.length
+ ? null
+ : queryNonNestedChildren($parentListItem, "p").html();
+ const match = parentHtml && descriptionDependencyPattern.exec(parentHtml);
+ const parentDescription = parentHtml
+ ? parentHtml.replace(
+ descriptionDependencyPattern,
+ !match?.[1] || match?.[1] === "one" ? "" : "when combined with other techniques"
+ )
+ : "";
+ const usageParentDescription =
+ parentDescription &&
+ (parentDescription.startsWith("when")
+ ? parentDescription
+ : `when used for ${parentDescription[0].toLowerCase()}${parentDescription.slice(1)}`);
+
+ const association: TechniqueAssociation = {
+ criterion,
+ type: capitalize(associationType) as Capitalize,
+ hasUsageChildren: !!$liEl.find("ul, ol").length,
+ usageParentIds,
+ usageParentDescription,
+ with: $techniqueLinks
+ .toArray()
+ .filter((el) => el !== aEl)
+ .map((el) => resolveTechniqueIdFromHref(el.attribs.href)),
+ };
+
+ const id = resolveTechniqueIdFromHref(aEl.attribs.href);
+ if (!(id in associations)) associations[id] = [association];
+ else associations[id].push(association);
+ });
+ });
+ }
+
+ // Remove duplicates (due to similar shape across understanding docs) and sort by SC number
+ for (const [key, list] of Object.entries(associations))
+ associations[key] = uniqBy(list, (v) => JSON.stringify(v)).sort((a, b) =>
+ wcagSort(a.criterion, b.criterion)
+ );
+
+ return associations;
+}
+
+interface TechniqueFrontMatter {
+ /** May be specified via front-matter; message to display RE a technique's obsolescence. */
+ obsoleteMessage?: string;
+ /** May be specified via front-matter to indicate a technique is obsolete as of this version. */
+ obsoleteSince?: WcagVersion;
+}
+
+export interface Technique extends TechniqueFrontMatter {
+ /** Letter(s)-then-number technique code; corresponds to source HTML filename */
+ id: string;
+ /** Technology this technique is filed under */
+ technology: Technology;
+ /** Title derived from each technique page's h1 */
+ title: string;
+ /** Title derived from each technique page's h1, with HTML preserved */
+ titleHtml: string;
+ /**
+ * Like title, but preserving the XSLT process behavior of truncating
+ * text on intermediate lines between the first and last for long headings.
+ * (This was probably accidental, but helps avoid long link text.)
+ */
+ truncatedTitle: string;
+}
+
+/**
+ * Returns an object mapping each technology category to an array of Techniques.
+ * Used to generate index table of contents.
+ * (Functionally equivalent to "techniques-list" target in build.xml)
+ */
+export async function getTechniquesByTechnology() {
+ const paths = await glob("*/*.html", { cwd: "techniques" });
+ const techniques = technologies.reduce(
+ (map, technology) => ({
+ ...map,
+ [technology]: [] as string[],
+ }),
+ {} as Record
+ );
+
+ // Check directory data files (we don't have direct access to 11ty's data cascade here)
+ const technologyData: Partial> = {};
+ for (const technology of technologies) {
+ try {
+ const data = JSON.parse(
+ await readFile(`techniques/${technology}/${technology}.11tydata.json`, "utf8")
+ );
+ if (data) technologyData[technology] = data;
+ } catch {}
+ }
+
+ for (const path of paths) {
+ const [technology, filename] = path.split("/");
+ assertIsTechnology(technology);
+ // Support front-matter within HTML files
+ const { content, data: frontMatterData } = matter(await readFile(`techniques/${path}`, "utf8"));
+ const data = { ...technologyData[technology], ...frontMatterData };
+
+ if (data.obsoleteSince) {
+ data.obsoleteSince = "" + data.obsoleteSince;
+ assertIsWcagVersion(data.obsoleteSince);
+ }
+
+ // Isolate h1 from each file before feeding into Cheerio to save ~300ms total
+ const h1Match = content.match(/
]*>([\s\S]+?)<\/h1>/);
+ if (!h1Match || !h1Match[1]) throw new Error(`No h1 found in techniques/${path}`);
+ const $h1 = load(h1Match[1], null, false);
+
+ const title = $h1.text();
+ techniques[technology].push({
+ ...data, // Include front-matter
+ id: basename(filename, ".html"),
+ technology,
+ title,
+ titleHtml: $h1.html(),
+ truncatedTitle: title.replace(/\s*\n[\s\S]*\n\s*/, " … "),
+ });
+ }
+
+ for (const technology of technologies) {
+ techniques[technology].sort((a, b) => {
+ const aId = +a.id.replace(/\D/g, "");
+ const bId = +b.id.replace(/\D/g, "");
+ if (aId < bId) return -1;
+ if (aId > bId) return 1;
+ return 0;
+ });
+ }
+
+ return techniques;
+}
+
+/**
+ * Returns a flattened object hash, mapping each technique ID directly to its data.
+ */
+export const getFlatTechniques = (
+ techniques: Awaited>
+) =>
+ Object.values(techniques)
+ .flat()
+ .reduce(
+ (map, technique) => {
+ map[technique.id] = technique;
+ return map;
+ },
+ {} as Record
+ );
diff --git a/11ty/types.ts b/11ty/types.ts
new file mode 100644
index 0000000000..9bdd86c9f1
--- /dev/null
+++ b/11ty/types.ts
@@ -0,0 +1,55 @@
+/** @fileoverview Typings for common Eleventy entities */
+
+interface EleventyPage {
+ date: Date;
+ filePathStem: string;
+ fileSlug: string;
+ inputPath: string;
+ outputFileExtension: string;
+ outputPath: string;
+ rawInput: string;
+ templateSyntax: string;
+ url: string;
+}
+
+interface EleventyDirectories {
+ data: string;
+ includes: string;
+ input: string;
+ layouts?: string;
+ output: string;
+}
+
+type EleventyRunMode = "build" | "serve" | "watch";
+
+interface EleventyMeta {
+ directories: EleventyDirectories;
+ env: {
+ config: string;
+ root: string;
+ runMode: EleventyRunMode;
+ source: "cli" | "script";
+ };
+ generator: string;
+ version: string;
+}
+
+/** Limited 11ty data available when defining filters and shortcodes. */
+export interface EleventyContext {
+ eleventy: EleventyMeta;
+ page: EleventyPage;
+}
+
+/** Eleventy-supplied data available to templates. */
+export interface EleventyData extends EleventyContext {
+ content: string;
+ // Allow access to anything else in data cascade
+ [index: string]: any;
+}
+
+/** Properties available in Eleventy event callbacks (eleventyConfig.on(...)) */
+export interface EleventyEvent {
+ dir: EleventyDirectories;
+ outputMode: "fs" | "json" | "ndjson";
+ runMode: EleventyRunMode;
+}
diff --git a/11ty/understanding.ts b/11ty/understanding.ts
new file mode 100644
index 0000000000..c9b414b63f
--- /dev/null
+++ b/11ty/understanding.ts
@@ -0,0 +1,89 @@
+import { resolveDecimalVersion } from "./common";
+import type { DocNode, Principle, WcagVersion } from "./guidelines";
+
+/**
+ * Selector that can detect relative and absolute understanding links from techniques docs
+ */
+export const techniqueToUnderstandingLinkSelector = [
+ "[href^='../../Understanding/' i]",
+ "[href^='https://www.w3.org/WAI/WCAG' i][href*='/Understanding/' i]",
+]
+ .map((value) => `a${value}`)
+ .join(", ") as "a";
+
+/**
+ * Resolves information for top-level understanding pages;
+ * ported from generate-structure-xml.xslt
+ */
+export async function getUnderstandingDocs(version: WcagVersion): Promise {
+ const decimalVersion = resolveDecimalVersion(version);
+ return [
+ {
+ id: "intro",
+ name: `Introduction to Understanding WCAG ${decimalVersion}`,
+ },
+ {
+ id: "understanding-techniques",
+ name: "Understanding Techniques for WCAG Success Criteria",
+ },
+ {
+ id: "understanding-act-rules",
+ name: "Understanding Test Rules for WCAG Success Criteria",
+ },
+ {
+ id: "conformance",
+ name: "Understanding Conformance",
+ },
+ {
+ id: "refer-to-wcag",
+ name: `How to Refer to WCAG ${decimalVersion} from Other Documents`,
+ },
+ {
+ id: "documenting-accessibility-support",
+ name: "Documenting Accessibility Support for Uses of a Web Technology",
+ },
+ {
+ id: "understanding-metadata",
+ name: "Understanding Metadata",
+ },
+ ];
+}
+
+interface NavData {
+ parent?: DocNode;
+ previous?: DocNode;
+ next?: DocNode;
+}
+
+/**
+ * Generates mappings from guideline/SC/understanding doc IDs to next/previous/parent information,
+ * for efficient lookup when rendering navigation banner
+ */
+export function generateUnderstandingNavMap(principles: Principle[], understandingDocs: DocNode[]) {
+ const allGuidelines = Object.values(principles).flatMap(({ guidelines }) => guidelines);
+ const map: Record = {};
+
+ // Guideline navigation wraps across principles, so iterate over flattened list
+ allGuidelines.forEach((guideline, i) => {
+ map[guideline.id] = {
+ ...(i > 0 && { previous: allGuidelines[i - 1] }),
+ ...(i < allGuidelines.length - 1 && { next: allGuidelines[i + 1] }),
+ };
+ guideline.successCriteria.forEach((criterion, j) => {
+ map[criterion.id] = {
+ parent: guideline,
+ ...(j > 0 && { previous: guideline.successCriteria[j - 1] }),
+ ...(j < guideline.successCriteria.length - 1 && { next: guideline.successCriteria[j + 1] }),
+ };
+ });
+ });
+
+ understandingDocs.forEach((doc, i) => {
+ map[doc.id] = {
+ ...(i > 0 && { previous: understandingDocs[i - 1] }),
+ ...(i < understandingDocs.length - 1 && { next: understandingDocs[i + 1] }),
+ };
+ });
+
+ return map;
+}
diff --git a/README.md b/README.md
index 223a6681f0..6bee8669d4 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
-WCAG (Web Content Accessibility Guidelines)
+WCAG (Web Content Accessibility Guidelines) - Branch for production of August 2016 review versions
===
-Please do not submit any new pull requests against this branch - please look in the list of branches for the most current Working Branch and use that one.
+Please use this branch as the target for pull requests until July 10, 2016.
This repository is used to develop content for WCAG 2, as well as associated understanding documents and techniques.
@@ -11,18 +11,20 @@ This repository is used to develop content for WCAG 2, as well as associated und
* Avoid use of RFC2119 terms such as "must", "shall", or "may" in non-normative content, to avoid confusion with normative role.
+See also: [WCAG 2 Style Guide](https://github.com/w3c/wcag/wiki/WCAG-2-style-guide)
+
## File Structure
WCAG 2.0 was maintained in a different file structure than subsequent versions of WCAG. Source files for WCAG 2.0 are in the wcag20 folder and exists primarily for archival purposes. Do not edit content in that folder.
-Content for WCAG 2.1 and later is organized accordign to the file structure below. The WCAG repository contains source and auxiliary files for WCAG 2, Understanding WCAG 2, and eventually techniques. It also contains auxiliary files that support automated formatting of the document. To facilitate multi-party editing, each success criterion is in a separate file, consisting of a HTML fragment that can be included into the main guidelines. Key files include:
+Content for WCAG 2.1 and later is organized according to the file structure below. The WCAG repository contains source and auxiliary files for WCAG 2, Understanding WCAG 2, and eventually techniques. It also contains auxiliary files that support automated formatting of the document. To facilitate multi-party editing, each success criterion is in a separate file, consisting of a HTML fragment that can be included into the main guidelines. Key files include:
-* guidelines/index.html - the main guidelines file
-* guidelines/sc//*.html - files for each success criterion
-* guidelines/terms//*.html - files for each definition
-* understanding//*.html - understanding files for each success criterion
+* `guidelines/index.html` - the main guidelines file
+* `guidelines/sc/{version}/*.html` - files for each success criterion
+* `guidelines/terms/{version}/*.html` - files for each definition
+* `understanding/{version}/*.html` - understanding files for each success criterion
-Where is "20", content came from WCAG 2.0. "21" is used for content introduced in WCAG 2.1, "22" for WCAG 2.2, etc.
+Where `{version}` is "20", content came from WCAG 2.0. "21" is used for content introduced in WCAG 2.1, "22" for WCAG 2.2, etc.
## Editing Draft Success Criteria
@@ -34,7 +36,7 @@ Where is "20", content came from WCAG 2.0. "21" is used for content in
1. Open the guidelines/index.html file and remove comment marks around the lines that reference the success criterion and terms you have edited..
1. Follow the [success criteria format](#user-content-success-criteria-format) below to create the SC content.
1. Save the file and commit the change. NOTE: It is important to also add a suitable 'commit message'. In the comments, reference the issue number from which the proposal was developed starting with a hash, e.g., `#1`.
-1. When the success criterion is ready for Working Group review, inform the chairs. Once the proposal has been accepted by the Working Group, the editors will merge the working branch into the master branch, which puts it in the editors' draft and eventual Technical Report publication.
+1. When the success criterion is ready for Working Group review, inform the chairs. Once the proposal has been accepted by the Working Group, the editors will merge the working branch into the main branch, which puts it in the editors' draft and eventual Technical Report publication.
### Success Criteria Format
@@ -79,21 +81,23 @@ Values you provide are described below. Refer to [Success Criterion 2.2.1](https
### Definitions
-If you providing term definitions along with your SC, include them in the glossary. Position them in the appropriate alphabetical order with the rest of the terms and use the following format:
+If you are providing term definitions along with your SC, include them in the respective `guidelines/terms/{version}` directory, one-per-file, using the following format:
```html
-
{Term}
+
{Term}
{Definition}
```
-The ```dfn``` element tells the script that this is a term and causes special styling and linking features. To link to a term, use an `` element without an `href` attribute; if the link text is the same as the term, the link will be correctly generated. For example, if there is a term `web page` on the page, a link in the form of `web page` will result in a proper link. If the link text has a different form from the canonical term, e.g., "web pages" (note the plural), you can provide a hint on the term definition with the `data-lt` attribute. In this example, modify the term to be `web page`. Multiple alternate names for the term can be separated with pipe characters, with no leading or trailing space, e.g., `web page`.
+The ```dfn``` element tells the script that this is a term and causes special styling and linking features. To link to a term, use an `` element without an `href` attribute; if the link text is the same as the term, the link will be correctly generated. For example, if there is a term `web page` on the page, a link in the form of `web page` will result in a proper link.
+
+If the link text has a different form from the canonical term, e.g., "web pages" (note the plural), you can provide a hint on the term definition with the `data-lt` attribute. In this example, modify the term to be `web page`. Multiple alternate names for the term can be separated with pipe characters, with no leading or trailing space, e.g., `web page`.
## Editing Draft Understanding Content
There is one Understanding file per success criterion, plus an index:
-* understanding/index.html - index page, need to uncomment or add a reference to individual Understanding pages as they are made available
-* understanding//*.html - files for each understanding page, named the same as the success criterion file in the guidelines
+* `understanding/index.html` - index page, need to uncomment or add a reference to individual Understanding pages as they are made available
+* `understanding/{version}/*.html` - files for each understanding page, named the same as the success criterion file in the guidelines
Files are populated with a template that provides the expected structure. Leave the template structure in place, and add content as appropriate within the sections. Elements with class="instructions" provide guidance about what content to include in that section; you can remove those elements if you want but don't have to. The template for examples proposes either a bullet list or a series of sub-sections, choose one of those approaches and remove the other from the template. The template for techniques includes sub-sections for "situations", remove that wrapper section if not needed.
@@ -111,8 +115,6 @@ The [technique template](techniques/technique-template.html) shows the structure
Techniques can use a temporary style sheet to facilitate review of drafts. This style sheet is replaced by other style sheets and structure for formal publication. To use this style sheet, add `` to the head of the technique.
-The generator used to publish techniques uses XML processing, so techniques must be well-formed XML. Techniques use HTML 5 structure so are actually [HTML Polyglot](https://www.w3.org/TR/html-polyglot/).
-
### Images, Examples, Cross References for Techniques
Techniques can include images. Place the image file in the `img` folder of the relevant technology - meaning all techniques for a technology share a common set of images. Use a relative link to load the image. Most images should be loaded with a `
+
+
The challenges covered broadly fall into five main areas:
-
Numerous provisions need human involvement to test and verify conformance, which is especially challenging to scale for large websites and for dynamic websites;
-
Large and dynamic sites with their changing permutations may be difficult to validate;
-
Third parties frequently add and change content on large and dynamic sites;
+
Numerous provisions need human involvement to test and verify conformance, which is especially challenging to scale for large websites and for dynamic websites;
+
Large and dynamic sites with their changing permutations may be difficult to validate;
+
Third parties frequently add and change content on large and dynamic sites;
Applying a web-based, and page-based conformance model can be challenging to do for non-web Information and Communications Technologies (ICT).
+
The centrality of Accessibility Supported in the many provisions tied to use with assistive technologies and platform accessibility features, combined with the lack of definition of what constitutes Accessibility Supported, further exacerbates the need for expert human judgement (#1 above), as well as potential different and non-overlapping sets of these features used when including 3rd party content (#3 above).
-
The purpose of this document is to help understand those challenges more holistically, and explore approaches to mitigating those challenges so that we can address the
- challenges more fully in future accessibility guidelines such as WCAG 3.0 (now in early development) where the W3C Working Group Charter expressly anticipates a new conformance model.
+
The purpose of this document is to help understand those challenges more holistically, and explore approaches for mitigating them so that we can address such
+ challenges more fully in future accessibility guidelines including the forthcoming W3C Accessibility Guidelines (WCAG 3.0) (now in early development) where the W3C Working Group Charter expressly anticipates a new conformance model.
-
To comment, file an issue in the W3C WCAG GitHub repository. Please indicate your issue is for this document by using the word Challenges: as the first word of your issue's title. Although the proposed Success Criteria in this document reference issues tracking discussion, the Working Group requests that public comments be filed as new issues, one issue per discrete comment. It is free to create a GitHub account to file issues. If filing issues in GitHub is not feasible, send email to public-agwg-comments@w3.org (comment archive).
+
To comment, file an issue in the W3C WCAG GitHub repository. Please indicate your issue is for this document by using the word Challenges: as the first word of your issue's title. Although the proposed Success Criteria in this document reference issues tracking discussion, the Working Group requests that public comments be filed as new issues, one issue per discrete comment. It is free to create a GitHub account to file issues. If filing issues in GitHub is not feasible, send email to public-agwg-comments@w3.org (comment archive).
Introduction
@@ -45,9 +59,9 @@
Introduction
Problem Statement
Assessing the accessibility of a website is of critical importance.
-Website authors want to have website accessibility assessments so they can
+Website authors want to have website accessibility assessments in order to
understand the places where visitors with disabilities may be unable to use
-that site so that they can address them as much as possible. External
+a site in order to alleviate those difficulties. External
parties who have an interest in the accessibility of a website likewise want
to have website assessments so they can understand whether the site meets
their accessibility fitness criteria. To aid in this assessment, the
@@ -56,16 +70,15 @@
Problem Statement
(W3C) developed the Web Content
Accessibility Guidelines (WCAG), containing
both a rich set of success criteria to meet the needs of people with
-disabilities, as well as conformance requirements for same. Assessing
+disabilities and conformance requirements for the same. Assessing
conformance of a website to all of the success criteria is how accessibility
assessments have been done to date, either through assessing every individual
page, or through a page sampling approach.
-
While the challenges discussed in this document apply to websites and web applications broadly, this early version of the document focuses particularly on situations involving large, dynamic, and complex websites.
-There are valid reasons WCAG 2 and related resources have the conformance
-model they do; failures to conform to the current model are likely to present a barrier for people with disabilities.
+
While the challenges discussed in this document apply to websites and web applications broadly, this document focuses particularly on situations involving large, dynamic, and complex websites.
+There are important reasons WCAG 2 and related resources have the guidelines and success criteria they do. Failure to conform to these is likely to erect a barrier for people with disabilities.
The issues raised in this document do not mean sites should
-not strive to conform to WCAG 2. It is also vital to consider aspects beyond the conformance model that lead to accessibility issues found during late stage testing, such as the lack of accessibility prioritization, training, and integration throughout the design, development, and maintenance processes. A new version of accessibility guidelines, W3C Accessibility Guidelines 3.0 (WCAG 3.0), rethinks all aspects of the accessibility guidance and is expressly chartered to develop a new conformance model that will help to address these challenges.
+not strive to conform to WCAG 2. But it is also vital to consider aspects that commonly lead to accessibility challenges found during late stage testing, such as a lack of accessibility prioritization, training, and integration throughout the design, development, and maintenance process. A new version of accessibility guidelines, W3C Accessibility Guidelines 3.0 (WCAG 3.0), rethinks all aspects of accessibility guidance. It is also expressly chartered to develop a new conformance model which should help address the challenges explored in this document.
Large websites are often highly complex, with substantial dynamic content,
@@ -85,11 +98,11 @@
Problem Statement
Assessing conformance of such large, highly complex, dynamic sites to the Web Content Accessibility Guidelines (WCAG) 2.0 [[wcag20]] or 2.1 [[wcag21]] has proved difficult. The Web Content Accessibility Guidelines 2.0 include a set of normative requirementsin order for a web page to conform to WCAG 2.0, including that conformance is for full Web page(s) only, and cannot be achieved if part of a Web page is excluded, along with a Note that states If a page cannot conform (for example, a conformance test page or an example page), it cannot be included in the scope of conformance or in a conformance claim. The conformance requirements also state what is allowed in any optional Conformance Claims, starting with: Conformance is defined only for Web pages. However, a conformance claim may be made to cover one page, a series of pages, or multiple related Web pages. For the purposes of this document, we use the term WCAG 2.x conformance model to refer to the normative text in the Conformance section of WCAG 2.0 and WCAG 2.1.
-
This WCAG 2.x conformance model contains a mitigation related to partial conformance for 3rd party content (see Sec. 3.1: Treatment of 3rd party content and Statements of Partial Conformance below). Further in recognition of these challenges, the W3C Note Website Accessibility Conformance Evaluation Methodology (WCAG-EM) 1.0 [[wcag-em]] was published in 2014 to provide guidance on evaluating how well websites conform to the Web Content Accessibility Guidelines. This W3C document describes a procedure to evaluate websites and includes considerations to guide evaluators and to promote good practice, which can help organizations to make a conformance claim, while acknowledging that there may be errors on pages not in the sample set or that were not picked up by automated evaluation tools on pages that were not in the human evaluation sample. While WCAG-EM provides a practical method for claiming conformance for a website, it doesn't fully address the challenges in making every part of every page in a large, dynamic website conform to every success criterion.
+
This WCAG 2.x conformance model contains a mitigation related to partial conformance for 3rd party content (see Sec. 3.1: Treatment of 3rd party content and Statements of Partial Conformance below). Further in recognition of these challenges, the W3C Note Website Accessibility Conformance Evaluation Methodology (WCAG-EM) 1.0 [[wcag-em]] was published in 2014 to provide guidance on evaluating how well websites conform to the Web Content Accessibility Guidelines. This W3C document describes a procedure to evaluate websites and includes considerations to guide evaluators and to promote good practice, which can help organizations to make a conformance claim, while acknowledging that there may be errors on pages not in the sample set or that were not picked up by automated evaluation tools on pages that were not in the human evaluation sample. While WCAG-EM provides a practical method for claiming conformance for a website, it doesn't fully address the challenges in making every part of every page in a large, dynamic website conform to every success criterion.
-Also, the Authoring Tool Accessibility Guidelines 2.0 (ATAG) [[atag20]] provides guidelines for designing web content authoring tools that are both more accessible to authors with disabilities as well as is designed to enable, support, and promote the production of more accessible web content by all authors. Leveraging ATAG-conformant authoring tools can significantly help with preventing accessibility issues from occurring on a website. A number of the challenges with conformance could be addressed with authoring tools, and in future versions of this document we hope to describe those in more detail.
+Also, the Authoring Tool Accessibility Guidelines 2.0 (ATAG) [[atag20]] provides guidelines for designing web content authoring tools that are both more accessible to authors with disabilities as well as is designed to enable, support, and promote the production of more accessible web content by all authors. Leveraging ATAG-conformant authoring tools can significantly help with preventing accessibility issues from occurring on a website. Moreover, several challenges with conformance could better be addressed by authoring tools or user agents, both of which are scoped for nonnormative WCAG 3.0 guidance.
@@ -105,7 +118,7 @@
Problem Statement
time it takes for a site visitor to conduct a task, as alternative
measures that could complement conformance-based metrics. Unfortunately, this research report
was last updated in May 2014, and has not progressed to being a
- published W3C Note. The Research and Development Working Group was not renewed by W3C Membership in 2015, though a Research Questions Task Force, under the Accessible Platform Architecture (APA) Working Group, is able to look at similar types of issues.
+ published W3C Note. The Research and Development Working Group was not renewed by W3C Membership in 2015, though a Research Questions Task Force, under the Accessible Platform Architecture (APA) Working Group, is able to look at similar issues.
Approaches for Mitigating Challenges with Accessibility Guidelines Conformance and Testing
+
+
Silver Research Findings
+
+
Now known as W3C Accessibility Guidelines (WCAG 3.0), this next iteration of W3C
+ accessibility guidance was conceived and designed to be research-based, coming out of the Silver Research effort. A summary of the conformance related findings from Silver research contributed to this document, and is provided in its entirety as Appendix C below. Findings that expand on the four main challenges enumerated in this document are integrated throughout. Additional enumerated challenges identified by Silver research are also articulated as independent, specific challenges.
+
+
+
+
Working
+over many years, the Silver Task Force of the Accessibility Guidelines Working
+Group (AGWG) and the Silver Community Group collaborated with researchers on
+questions that the Silver Groups identified. This research was used to develop
+11 problem statements that needed to be solved for Silver. The conformance-related Silver generated Problem Statements are included as originally submitted for this document below in Appendix C.
+
+
+
+
+
+
Mitigation Approaches
In addition to describing in detail the challenges of
assessing conformance, this document also explores some approaches to
mitigating those challenges. Each of the main challenges sections below
describes one or more significant mitigation approaches.
+
While some approaches may be more applicable to a particular website design than others;
and not all approaches may be appropriate or practical for a particular website, it is likely that many websites can
-utilize at least some of these approaches. These approaches are proposed as ways through which these conformance challenges
-might be able to be mitigated, while maximizing the likelihood that all website visitors will be able to use the site effectively.
+utilize at least some of these approaches. They are proposed as ways by which these conformance challenges
+may be mitigated, while maximizing the likelihood that all website visitors will be able to use the site effectively.
Though the challenges described in this document illustrate that it is difficult for large, complex, and/or dynamic websites to ensure a site has no defects,
-mitigation strategies may be able to create a website that people with disabilities can use even though some conformance issues exist.
+mitigation strategies may be able to help create a website that people with disabilities can use even though some conformance issues may persist.
-
+
Goals
This document has two key goals:
-
-
To develop, catalog, and characterize the challenges with accessibility guidelines conformance, and conformance verification that have arisen both through the multi-year research process preceding work on the next major revision of W3C accessibility guidelines to be known as the W3C Accessibility Guidelines (WCAG 3.0) which have been in development under the name Silver, as well as through active discussion of conformance taking place in the Silver Task force subgroup of the W3C Accessibility Guidelines Working Group (AGWG).
-
To develop, catalog, and characterize mitigation approaches to these challenges, so that websites can be as accessible as possible, and are better able assess how well their sites are accessible to visitors with disabilities.
-
+
+
To develop, catalog, and characterize the challenges with accessibility guidelines conformance, and conformance verification that have arisen both through the multi-year research process preceding work on W3C Accessibility Guidelines (WCAG 3.0) which have been in development under the name Silver, as well as through active discussion in the Silver Conformance Options Subgroup.
+
To develop, catalog, and characterize mitigation approaches to these challenges, so that websites can be as accessible as possible and better assessed for accessibility to visitors with disabilities.
+
A better understanding of the situations in which the
WCAG 2.x conformance model may be difficult to apply could lead to more effective conformance models
and testing approaches in the future.
It is important to recognize that success criteria in WCAG 2.x are quite distinct from the conformance model. These criteria describe approaches to content accessibility that are thoughtfully designed to enable people with a broad range of disabilities to effectively consume and interact with web content. Challenges with the conformance model do not in any way invalidate the criteria. For example, while requiring human judgment to validate a page limits testing to sampling of templates, flows, and top tasks, etc. (see Challenge #1 below), without that human judgement it may not be possible to deliver a page that makes sense to someone with a disability. Similarly, while it may not be possible to know that all third party content is fully accessible (see Challenge #3 below), without review of that content by someone sufficiently versed in accessibility it may not be possible to be sure that pages containing third party content fully conform to WCAG 2.x. Human judgement is a core part of much of WCAG 2.x for good reasons, and the challenges that arise from it are important to successfully grapple with.
-
-
+
+
Additional Background
-
One of the reasons for publishing this draft document is to seek additional contributions from the wider web community:
-
-
Any additional challenges, or further illustration of challenges in the existing identified areas below;
-
Contributions to the mitigation approaches, and questions or concerns about the mitigation approaches;
-
-
We seek to gain a thorough understanding of the challenges faced by large, complex, and dynamic websites who are attempting to provide accessible services to their web site users. It is expected that a more thorough understanding of these challenges can lead to either a new conformance model, or an alternative model that is more appropriate for large, complex, and/or dynamic websites (in WCAG 3.0).
-
-
This document also includes previously published research from the Silver Task Force and Community Group that was related to Challenges with Accessibility Guidelines Conformance and Testing. There is some
- overlap between the challenges captured in this published research, and the challenges enumerated in the first 4 sections of this document. The research findings will be folded into the other sections as appropriate in
- future versions of this document.
-
Present in this current draft of this document is an initial discussion of approaches to mitigate the impact of the challenges cited. Previous drafts emphasized collecting a comprehensive inventory of challenges, we believe our collection is now sufficiently mature to begin enumerating and considering the various mitigating approaches that have been suggested by various stakeholders. We are publishing this document now to seek wide review to further catalogue and characterize the challenges and mitigation approaches, so that this work can become input into the next major revision of W3C accessibility guidelines (now chartered by W3C for eventual release as WCAG 3.0).
+
This document is published to seek additional contributions from the wider web community on:
+
+
Any additional challenges, or further illustration of challenges in the existing identified areas below;
+
Contributions to the mitigation approaches, and questions or concerns about the mitigation approaches;
+
+
We seek to gain a thorough understanding of the challenges faced by large, complex, and dynamic websites who are attempting to provide accessible services to their web site users. It is expected that a more thorough understanding of these challenges can lead to either a new conformance model, or an alternative model that is more appropriate for large, complex, and/or dynamic websites (in WCAG 3.0).
+
+
This document also includes previously published research from the Silver Task Force and Community Group that is related to Challenges with Accessibility Guidelines Conformance and Testing. There is some overlap between the challenges captured in this published research and the challenges enumerated in the first 4 sections of this document. The research findings have been folded into other sections of this document as appropriate.
+
+
Also present in this document is an introductory discussion of approaches to mitigate the impact of the challenges cited that have been suggested by various stakeholders. We are publishing this updated draft now to continue seeking wide review to further catalogue and characterize the challenges and mitigation approaches, so that this work can become input into W3C accessibility guidelines (WCAG 3.0).
-
-
Key Terms
-
The following terms are used in this document:
-
-
large websites
-
Websites with thousands of pages, let alone hundreds of thousands or more.
-
dynamic websites
-
Websites that are constantly being updated with new content, possibly hundreds of times an hour, or even thousands of times per second.
-
complex websites
-
Web apps that are similar in scope to complex desktop applications (e.g. a full-fledged spreadsheet or word processor web application). Or websites with a large portion of pages that are generated upon demand, pulling from dozens or more different content sources.
-
-
+
+
Key Terms
+
The following terms are used in this document:
+
+
large websites
+
Websites with thousands of pages, let alone hundreds of thousands or more.
+
dynamic websites
+
Websites that are constantly being updated with new content, possibly hundreds of times an hour, or even thousands of times per second.
+
complex websites
+
Web apps that are similar in scope to complex desktop applications (e.g. a full-fledged spreadsheet or word processor web application). Or websites with a large portion of pages that are generated upon demand, pulling from dozens (or more) different content sources.
+
+
Challenge #1: Scaling Conformance Verification
A challenge common to many success criteria is the inability for automatic testing to fully validate conformance and the subsequent time, cost, and expertise needed to perform the necessary manual test to cover the full range of the requirements.
HTML markup can be automatically validated to confirm that it is used according to specification, but a human is required to verify whether the HTML elements used correctly reflect the meaning of the content. For example, text on a web page marked as contained in a paragraph element may not trigger any failure in an automated test, nor would an image with alternative text equal to red, white, and blue bird, but a human will identify that the text needs to be enclosed in a heading element to reflect the actual use on the page, and also that the proper alternative text for the image is American Airlines logo. Many existing accessibility success criteria require an informed human evaluation to ensure that the human end-users benefit from conformance.
The same can be said of very large web-based applications that are developed in an agile manner with updates delivered in rapid succession, often on an hourly basis.
We can think of this as the distinction between quantitative and qualitative analysis. We know how to automatically test for and count the occurrences of relevant markup. However, we do not yet know how to automatically verify the quality of what that markup conveys to the user. In the case of adjudging appropriate quality, informed human review is still required.
-
There are a number of approaches for mitigating scaling
+
+
Appendix A describes challenges with applying the WCAG 2.x conformance model to specific Guidelines and Success Criteria, primarily based on required human involvement in evaluation of conformance to them. The list is not exhaustive, but it covers the preponderance of known challenges with all A and AA Success Criteria.
+
+
Silver Research Findings
+
Silver research identified two further challenges related to scaling conformance verification:
+
+
+
In Constraints on What is Strictly Testable Silver finds that The requirement for valid and reliable testability for WCAG success criteria presents a structural barrier to including the needs of people with disabilities whose needs are not strictly testable. User needs such as thos articulated by the W3C's Cognitive and Learning Disabilities (COGA) Task Force in their extensive W3C Note publication Making content usable for people with cognitive and learning disabilities [[coga-usable]] only expand and exacerbate the need for expert human testing. As silver also notes: The entire principle of understandable is critical for people with cognitive disabilities, yet success criteria intended to support the principle are not easy to test for or clear on how to measure.
+
Silver also finds that Human evaluation does not yield consistent conclusions: Regardless of proficiency, there is a significant gap in how any two human auditors will identify a success or fail of criteria. … Ultimately, there is variance between: any two auditors; … Because there's so much room for human error, an individual may believe they've met a specific conformance model when, in reality, that's not the case. … There isn't a standardized approach to how the conformance model applies to success criteria at the organizational level and in specific test case scenarios.
+
+
+
+
+
Mitigations
+
There are a number of approaches for mitigating scaling
challenges. For example, if pages can be built using a small number of page
templates that are fully vetted for conformance to criteria relating to
structure, heading use, and layout, then pages generated with those templates
@@ -213,15 +263,19 @@
Challenge #1: Scaling Conformance Verification
some situations is to encode website content in a higher-level abstraction
from HTML (e.g. a wiki-based website, when content authors can specify that a
particular piece of text is to be emphasized strongly [which would be rendered
-within a block], but they cannot specify that a
-particular piece of text is to be made boldface [so that is never part of the website]). While none of these approaches can mitigate every challenge in conformance and testing with every success criterion, they are powerful approaches where applicable to help minimize accessibility issues in websites.
+within a <strong> </strong> block], but they cannot specify that a
+particular piece of text is to be made boldface [so that <b> </b> markup is never part of the website]). While none of these approaches can mitigate every challenge in conformance and testing with every success criterion, they are powerful approaches where applicable to help minimize accessibility issues in websites.
-
Appendix A describes challenges with applying the WCAG 2.x conformance model to specific Guidelines and Success Criteria, primarily based on required human involvement in evaluation of conformance to them. In this draft, the list is not exhaustive, but we intend it to cover all known challenges with all A and AA Success Criteria, by the time this Note is completed.
+
+
Challenge #2: Large, complex, and dynamic websites may have too many changing permutations to validate effectively
-
Large websites often have complex content publishing pipelines, which may render content dynamically depending upon a large number of variables (such as what is known about the logged in user and her content preferences, the geographical location that the user is visiting the site from, and the capabilities of the web rendering agent being used). It is difficult, and may not be feasible, to validate every possible publishing permutation with a page-level test, each of which can have an impact on whether that particular rendering of the content at that particular moment conforms.
-
Approaches used in quality assurance and quality engineering of software code
+
Large websites often have complex content publishing pipelines, which may render content dynamically depending upon a large number of variables (such as what is known about logged in users and their content preferences, the geographical location that the users are visiting the site from, and the capabilities of the web rendering agent being used). It is difficult, and may not be feasible, to validate every possible publishing permutation with a page-level test, each of which can have an impact on whether that particular rendering of the content at that particular moment conforms.
+
+
+
Mitigations
+
Approaches used in quality assurance and quality engineering of software code
can be used with software that generates dynamic web content. One of these is
Unit Testing (or Component Testing), where each individual step in the content
publishing pipeline is tested independent of the other, with a broad range of
@@ -233,10 +287,11 @@
Challenge #2: Large, complex, and dynamic websites may have too many changin
there is no guarantee of finding all potential bugs, or assuring a software
system is bug-free.
+
Challenge #3: 3rd party content
-
Very large, highly dynamic web sites generally aggregate content provided by multiple entities. Many of these are third parties with the ability to add content directly to the website — including potentially every website visitor. The relationship to the 3rd party can be that of a user, a customer, or a professional provider of content such as an advertiser. While the website can provide guidance on how to post content so that it meets accessibility guidance, it is ultimately up to those third parties to understand and correctly implement that guidance. Constraints on page templates and editing facilities can greatly help minimize accessibility issues but, even with automated checks prior to accepting the post, some Success Criteria require human assessment.
+
Very large, highly dynamic web sites generally aggregate content provided by multiple entities. Many of these are third parties with the ability to add content directly to the website—including potentially every website visitor. The relationship to the 3rd party can be that of a user, a customer, or a professional provider of content such as an advertiser. While the website can provide guidance on how to post content so that it meets accessibility guidance, it is ultimately up to those third parties to understand and correctly implement that guidance. Constraints on page templates and editing facilities can greatly help minimize accessibility issues but, even with automated checks prior to accepting the post, some Success Criteria require human assessment.
Copyright, commercial agreements, and similar constraints that restrict the ability to modify or impose requirements on third party content can also make full conformance claims infeasible.
Treatment of 3rd party content and Statements of Partial Conformance
@@ -245,34 +300,42 @@
Treatment of 3rd party content and Statements of Partial Conformance
Partial Conformance. [[wcag21]] It provides two options for such content — that
pages with 3rd party content may:
-
Make a determination of conformance based on best knowledge, for example
-by monitoring and repairing non-conforming content within 2 business days;
+
Make a determination of conformance based on best knowledge, for example by monitoring and repairing non-conforming content within 2 business days;
or
-
Make a statement of partial conformance if the page could conform if the
-3rd party content were removed.
+
Make a statement of partial conformance if the page could conform if the 3rd party content were removed.
The provision of monitoring and required repair within a 2 business day
-window doesn't address the underlying challenge of pages with (3rd party)
+window doesn't address the underlying challenge of pages with (3rd party)
content that may be updating tens or hundreds of times within that 2 day
window. For large websites with
hundreds of thousands of pages or more with a significant amount of 3rd
party content, the necessity for human involvement in the evaluation of 3rd
-party content doesn't scale.
-
A statement of partial conformance doesn't address the underlying challenge of improving the usability of 3rd party content. While it might allow a web page/website visitor to be forewarned in advance that they should
+party content doesn't scale.
+
A statement of partial conformance doesn't address the underlying challenge of improving the usability of 3rd party content. While it might allow a web page/website visitor to be forewarned in advance that they should
anticipate encountering inaccessible content, it does little to practically enable large sites to address such concerns.
+
+
+
+
Silver Research Findings
-
There are several approaches to the challenge of 3rd
+
Silver cited Third parties documents, applications and services among its list of conformance related problem statements. See the reference in Appendix C below.
+
+
+
+
+
Mitigations
+
There are several approaches to the challenge of 3rd
party content accessibility. Where that content is provided as part of a
commercial contract, the terms of the contract may include requirements around
accessibility. Where the content comes from potentially any website visitor or
-user, those visitors can be constrained in the types of contributions they can
+user, those visitors could be constrained in the types of contributions they can
make (e.g. prevented from using non-semantic text attributes like boldface), or
prompted to add accessibility metadata (e.g. so that images are uploaded along
with ALT text), or reminded about good accessibility practices (e.g. told not
to refer to sensory characteristics in their text). Such approaches may add
-substantial friction, especially to individual website visitors and users, to
-the point that they may be disinclined to make contributions. Further, they
-aren't a guarantee of perfection in those contributions (Is the ALT text
+substantial friction, especially to individual website visitors and users, however, to
+the point that they might be dissuaded from making contributions at all. Further, they
+aren't a guarantee of perfection in those contributions (Is the ALT text
thoughtfully authored, or just filler text to make the upload happen? Did the
text truly avoid reference to sensory characteristics?). Nonetheless, these
are some approaches to consider to help minimize the amount of 3rd party
@@ -281,12 +344,28 @@
Treatment of 3rd party content and Statements of Partial Conformance
help make accessibility practices more ubiquitous.
-
+
Challenge #4: Non-Web Information and Communications Technologies
The core principles, and many of the guidelines, contained in WCAG 2.x, are broadly applicable outside of the web context. For example, no matter the technology, information presented to humans needs to be perceivable by them in order for them to access and use it. At the same time, some of the specific guidelines and especially some of the individual success criteria of WCAG 2.x are specifically scoped to web content and web technologies, and may be difficult to apply to non-web information and communications technologies (as set forth in the W3C Note Guidance on Applying WCAG to non-web Information and Communication Technologies (WCAG2ICT)). [[wcag2ict]] Furthermore, the state of programmatic test tools for assessing whether non-web information and communications technologies meet various WCAG 2.x success criteria varies widely with the type of non-web document, the operating system, and the user interface toolkits used to create the non-web software. Therefore, it is potentially the case that for some documents or software, it will not be possible to use any programmatic accessibility evaluation tools for some success criterion — conformance to each and every success criterion will need human expertise and judgment.
-
There are various approaches to the challenges of accessibility guidelines
+
+
Appendix B contains Detailed Challenges with Conformance Verification and Testing for non-web ICT. It covers 12 success criteria out of the 38 A and AA criteria in WCAG 2.0 which can be applied to non-web ICT after replacing specific terms or phrases.
+
+
+
Silver Research Findings
+
+
Silver research identified the need to expand the scope beyond web to include apps,
+ documents, authoring, user agents, wearables, kiosks, IoT, VR, etc.
+ and be inclusive of more disabilities. (UX Professionals Use of
+ WCAG: Analysis) * Accessibility Supported allows inadequate
+ assistive technologies to be claimed for conformance, particularly
+ in non-native English speaking countries.
+
+
+
+
Mitigations
+
There are various approaches to the challenges of accessibility guidelines
conformance and testing of non-web information and communications
technologies, depending upon the nature of non-web document technology or
non-web software in question. For example, there is a rich set of techniques
@@ -295,7 +374,7 @@
Challenge #4: Non-Web Information and Communications Technologies
mitigate accessibility failings found by the tool as part of Adobe Acrobat.
Both Microsoft Word and OpenOffice include accessibility test and validation
tools, and both are capable of saving exporting their content into accessible
-PDF documents. Operating systems like MacOS, iOS, Windows, Android, and Fire
+file formats. Operating systems like MacOS, iOS, Windows, Android, and Fire
OS all have rich accessibility frameworks which can be used to make accessible
software applications, which are accessible through the use of built-in
assistive technologies like screen readers and screen magnifiers, as well as
@@ -303,134 +382,122 @@
Challenge #4: Non-Web Information and Communications Technologies
of accessibility test tools and support systems to help software developers
make accessible software applications for these operating systems. While none
of these tools and frameworks can find all accessibility issues or otherwise
-guarantee a document or application will be free of all accessibility defects
+guarantee
+e a document or application will be free of all accessibility defects
– whether those are tied to a specific WCAG success criterion or not – they
are nonetheless important tools that can lead to highly accessible documents
and software.
-
Appendix B contains Detailed Challenges with Conformance Verification and Testing for non-web ICT. It covers 12 success criteria out of the 38 A and AA criteria in WCAG 2.0 which can be applied to non-web ICT after replacing specific terms or phrases. In
- future versions of the document we plan to address success criteria introduced in WCAG 2.1 that may pose specific challenges for conformance verification and testing in the non-web ICT context.
-
-
-
Challenges of Conformance as identified from Silver Research
-
Now known as W3C Accessibility Guidelines (WCAG 3.0), this iteration of W3C accessibility guidance was conceived and designed to be research-based. Working over many years, the Silver Task Force of the Accessibility Guidelines Working Group (AGWG) and the Silver Community Group collaborated with researchers on questions that the Silver Groups identified. This research was used to develop 11 problem statements that needed to be solved for Silver. The detailed problem statements include the specific problem, the result of the problem, the situation and priority, and the opportunity presented by the problem. The problem statements were organized into three main areas: Usability, Conformance, and Maintenance. The section following is taken from the Conformance sections of the Silver Design Sprint Final Report and the Silver Problem Statements. Details of the research questions and the individual reports are in Research Archive of Silver wiki.
-
The following items are shown as they were originally presented by the Silver task force, in future versions of this document they will be integrated into the challenges.
-
-
Silver Research Problem Statements
-
Originally published as the Silver Design Sprint Final Report (2018). These problem statements were presented to the Silver Design Sprint participants.
-
-
Constraints on What is Strictly Testable provides an obstacle to including guidance that meets the needs of people with disabilities but is not conducive to a pass/fail test.
-
Human Testable (related to Ambiguity) also relates to differences in knowledge and priorities of different testers achieve different results.
-
Accessibility Supported is a conformance requirement of WCAG 2 that is poorly understood and incompletely implemented.
-
Evolving Technology of the rapidly changing web must constantly be evaluated against the capabilities of assistive technology and evolving assistive technology must be evaluated against the backward compatibility of existing web sites.
-
-
-
-
Details of Problem Statements
-
Originally published as Silver Problem Statements, this was a detailed analysis of the research results behind the above list.
-
-
Definition of Conformance
-
Conformance to a standard means that you meet or satisfy the requirements of the standard. In WCAG 2.0 the requirements are the Success Criteria. To conform to WCAG 2.0, you need to satisfy the Success Criteria, that is, there is no content which violates the Success Criteria.
-
WCAG 2.0 Conformance Requirements:
-
-
Conformance Level (A to AAA)
-
Conformance Scope (For full web pages only, not partial)
-
Complete Process
-
Only "Accessibility-supported" ways of using technologies
-
Non-Interference: Technologies that are not accessibility supported can be used, as long as all the information is also available using technologies that are accessibility supported and as long as the non-accessibility-supported material does not interfere.
-
-
-
-
Themes from Research
-
-
No monitoring process to test the accuracy of WCAG compliance claims (Keith et al., 2012)
-
Difficulties for conformance (Keith et al., 2012)
-
-
Third parties documents, applications and services
-
Know-how of IT personnel
-
Tension between accessibility and design
-
-
-
Specific success criteria for failure - 1.1.1 , 2.2., 4.1.2 (Keith et al., 2012)
-
Reliably Human Testable,not reliably testable (Brajnick et al., 2012) average agreement was at the 70-75% mark, while the error rate was around 29%.
-
-
Expertise appears to improve (by 19%) the ability to avoid false positives. Finally, pooling the results of two independent experienced evaluators would be the best option, capturing at most 76% of the true problems and producing only 24% of false positives. Any other independent combination of audits would achieve worse results.
-
This means that an 80% target for agreement, when audits are conducted without communication between evaluators, is not attainable, even with experienced evaluators.
-
-
-
Challenges and Recommendations (Alonso et al., 2010)
-
-
accessibility supported ways of using technologies
-
Testability of Success Criteria
-
Openness of Techniques and Failures
-
Aggregation of Partial Results
-
-
-
Silver needs to expand the scope beyond web to include apps, documents, authoring, user agents, wearables, kiosks, IoT, VR, etc. and be inclusive of more disabilities. (UX Professionals Use of WCAG: Analysis)
-
Accessibility Supported allows inadequate assistive technologies to be claimed for conformance, particularly in non-native English speaking countries. (Interviews on Conformance)
-
-
-
-
Constraints on What is Strictly Testable
-
Specific problem: Certain success criteria are quite clear and measurable, like color contrast. Others, far less so. The entire principle of understandable is critical for people with cognitive disabilities, yet success criteria intended to support the principle are not easy to test for or clear on how to measure. As a simple example, there is no clear, recent or consistent definition – within any locale or language – on what lower secondary education level means in regard to web content. Language and text content is also not the only challenge among those with cognitive and learning disabilities. Compounding this, most of the existing criteria in support of understanding are designated as AAA, which relatively few organizations attempt to conform with.
-
Result of problem: The requirement for valid and reliable testability for WCAG success criteria presents a structural barrier to including the needs of people with disabilities whose needs are not strictly testable. Guidance that WCAG working group members would like to include cannot be included. The needs of people with disabilities – especially intellectual and cognitive disabilities – are not being met.
-
Situation and Priority: Of the 70 new success criteria proposed by the Cognitive Accessibility Task Force to support the needs of people with cognitive and intellectual disabilities, only four to six (depending on interpretation) were added to WCAG 2.1 and only one is in level AA. The remainder are in level AAA, which is rarely implemented. This means user needs are not met.
-
Opportunity: Multiple research projects and audience feedback have concluded that simpler language is desired and needed for audiences of the guidelines. Clear but flexible criteria with considerations for a wider spectrum of disabilities helps ensure more needs are met.
-
-
-
Human Testable
-
Specific problem: Regardless of proficiency, there is a significant gap in how any two human auditors will identify a success or fail of criteria. Various audiences have competing priorities when assessing the success criteria of any given digital property. Knowledge varies for accessibility standards and how people with disabilities use assistive technology tools. Ultimately, there is variance between: any two auditors; any two authors of test cases; and human bias. Some needs of people of disabilities are difficult to measure in a quantifiable way.
-
Result of problem: Success criteria are measured by different standards and by people who often make subjective observations. Because there's so much room for human error, an individual may believe they've met a specific conformance model when, in reality, that’s not the case. The ultimate impact is on an end user with a disability who cannot complete a given task, because the success criteria wasn’t properly identified, tested and understood.
-
Situation and Priority: There isn't a standardized approach to how the conformance model applies to success criteria at the organizational level and in specific test case scenarios.
-
Opportunity: There's an opportunity to improve the success criteria such that human auditors and testers find the success criteria more understandable. Educating business leaders on how the varying levels of conformance apply to their organization may be useful as well. We can educate about the ways that people with disabilities use their assistive technology.
-
-
-
Accessibility Supported
-
Specific problem: Accessibility supported was implemented in a way that did not facilitate consistent adoption by developers and testers. It also requires a harmonious relationship and persistent interoperability between content technologies and requesting technologies that must be continuously evaluated as either is updated. Further, the WG defers the judgment of how much, how many, or which AT must support a technology to the community. It is poorly understood, even by experts.
-
Result of problem: Among the results are: difficulty understanding what qualifies as a content technology or an assistive technology; difficulty quantifying assistive technologies or features of user agents; claiming conformance with inadequate assistive technology; and difficulty claiming conformance.
-
Situation and Priority: Any claim or assertion that a web page conforms to the guidelines may require an explicit statement defining which assistive technology and user agent(s) the contained technologies rely upon, and presumably inclusive of specific versions and or release dates of each. One could infer then that a conformance claim is dependent upon a software compatibility claim naming browsers and assistive technology and their respective versions. This would create a burden to author and govern such claims. Additionally, no one can predict and anticipate new technologies and their rates of adoption by people with disabilities.
-
Opportunity: As the technologies in this equation evolve, the interoperability may be affected by any number of factors outside of the control of the author and publisher of a web page. Either accessibility supported should not be a
- component of conformance requirements, or it should clearly, concisely, and explicitly define and quantify the technologies or classes of technologies, AND set any resulting update or expiry criteria for governance.
-
-
-
Evolving Technology
-
Specific problem: Evolving Technology: As content technology evolves, it must be re-evaluated against assistive technology for compatibility. Likewise, as assistive technology evolves or emerges, it must be evaluated against the backward compatibility of various content technology.
-
Result of problem: There is no versioning consideration for updates to user agents and assistive technology. Strict conformance then typically has an expiry.
-
Situation and Priority: There is no clear and universal understanding of the conformance model or its longevity. Some will infer that there is always a conformance debt when any technology changes.
-
Opportunity: Consider conformance statements to include an explicit qualifier of time of release or versions of technology. OR consider a more general approach that is not explicit and is flexible to the differences in technologies as they evolve, identifying the feature of the assistive tech rather than the version of the assistive tech. OR consider a model that quantifies conformance as a degree of criteria met.
The
+
+ first Note under the definition of Accessibility Supported states that: The WCAG Working
+group and the W3C do not specify which or how much support by assistive
+technologies there must be for a particular use of a Web technology in
+order for it to be classified as accessibility supported.
+This is further expanded upon in the section
+
+ Level of Assistive Technology Support Needed for Accessibility Support:
+This topic raises the question of how many
+or which assistive technologies must support a Web technology in order
+for that Web technology to be considered accessibility supported. The
+WCAG Working group and the W3C do not specify which or how many
+assistive technologies must support a Web technology in order for it to
+be classified as accessibility supported. This is a complex topic and
+one that varies both by environment and by language.
+
+
The centrality of
+Accessibility Supported in the many WCAG 2 success criteria that are
+tied to use with assistive technologies and platform accessibility
+features, combined with the lack of definition of what constitutes
+Accessibility Supported, means that expert human judgement is required
+to evaluate whether there is sufficient accessibility support for
+specific technical implementations of accessibility implemented to meet
+WCAG 2 success criteria. The lack of a broad base of
+accessibility expertise in the web development field, combined with the challenges mentioned above
+related to Challenge #1: Scaling Conformance Verification, (when human evaluation is
+ required) make the Accessibility Supported requirement a further
+ challenge unto itself. Understanding Conformance 2.0 further notes that: There is a need for an external and international dialogue on this topic.
+Meanwhile, the nonnormative WCAG evaluation methodology (WCAG-EM) advises approaching this conformance requirement by determining: the minimum set of combinations of operating systems, web browsers, assistive technologies, and other user agents that the website is expected to work with, and that is in-line with the
+ WCAG 2.0 guidance on accessibility support.
+
+
Not only does this conformance requirement of WCAG 2.x ask the content
+provider to check their content markup with commonly used browsers, it also
+asks that they further check usability with an undefined range of assistive
+technologies on those same commonly used operating environments in order to
+make a conformance claim. This requirement greatly exacerbates Challenge #2: Large, complex, and dynamic websites may have
+too many changing permutations to validate effectively. It also exacerbates
+Challenge #3: 3rd party content, where third party
+content may have been shown to be Accessibility Supported with a set of
+browsers, access features, and assistive technologies that has no overlap with
+the set of browsers, access features, and assistive technologies that
+constitute Accessibility Support for the site hosting that third party
+content.
+
+
+
Silver Research Findings
+
+
Silver concluded that Accessibility Supported is a conformance requirement
+of WCAG 2 that is poorly understood and incompletely implemented, … i.e. the role
+of AT in assessing conformance. See additional details in Appendix C below.
+
+
+
+
+
+
Mitigations
+
+
We know of no useable mitigations to achieve the Accessibility Supported conformance requirement for public facing web sites. WCAG-EM's Second Note suggests that: For some websites in closed networks, such as an intranet website, where both the users and the computers used to access the website are known, this baseline may be limited to the operating systems, web browsers and assistive
+technologies used within this closed network. It continues saying: However, in most cases this baseline is ideally broader to cover the majority of current user agents used by people with disabilities in any applicable particular geographic region and
+language community. Beyond placing the responsibility on the evaluator to establish this baseline, Note 5 in Understanding Conformance 2.0 suggests that: One way for authors to locate uses of a technology that are accessibility supported would be to consult compilations of uses that are documented to be accessibility supported. … Authors, companies, technology vendors, or others may document accessibility-supported ways of using Web content technologies. Unfortunately, we know of no such public repository.
+
+
+
+
Detailed Challenges with Scaling Conformance Verification for the Success Criteria in WCAG 2.1 A and AA
This appendix describes challenges with applying the WCAG 2.x conformance
model to specific Guidelines and Success Criteria, primarily based on required
-human involvement in evaluation of conformance to them. In this draft, the
-list is not exhaustive, but we intend it to cover all known challenges with
-all A and AA Success Criteria, by the time this Note is completed. The purpose
-of this is not to critique WCAG 2 nor to imply that sites and policies should
+human involvement in evaluation of conformance to them. The
+list is not exhaustive, but it covers the preponderance of known challenges with all A and AA Success Criteria. The purpose
+of this list is not to critique WCAG 2 nor to imply that sites and policies should
not do their best, and strive to conform to it, but rather to indicate known
areas for which it may not be possible to conform, and which a new conformance
model would hopefully address.
-
We have seen the market respond to the increased demand for accessibility professionals in part due to the amount of required human involvement in the valuation of conformance, with many international efforts such as the International Association of Accessibility Professionals (IAAP) which train and/or certify accessibility professionals. While this is resulting in downward pressure on costs of testing and remediation with more accessibility professionals becoming available to meet the need, it doesn't in and of itself eliminate the challenges noted below. Furthermore, for the near term, it appears the demand will be greater than the supply of this type of specialized expertise.
-
Also, the Website Accessibility Conformance Evaluation Methodology (WCAG-EM) 1.0 [[wcag-em]] lays out a strategy to combine human testing and automated testing. In the model, automation is used for a large number of pages (or all pages) and sampling is used for human testing. The WCAG-EM suggests that the human evaluation sample might include templates pages, component libraries, key flows (such as choosing a product and purchasing it, or signing up for a newsletter, etc.), and random pages. While WCAG-EM provides a practical method for claiming conformance for a website, it doesn't fully address the challenges in making every part of every page in a large, dynamic website conform to every success criterion.
-
+
We have seen the market respond to the increased demand for accessibility professionals in part due to the amount of required human involvement in the valuation of conformance, with many international efforts such as the International Association of Accessibility Professionals (IAAP) which train and/or certify accessibility professionals. While this is resulting in downward pressure on costs of testing and remediation with more accessibility professionals becoming available to meet the need, it doesn't in and of itself eliminate the challenges noted below. Furthermore, for the near term, it appears the demand will be greater than the supply of this type of specialized expertise.
+
Also, the Website Accessibility Conformance Evaluation Methodology (WCAG-EM) 1.0 [[wcag-em]] lays out a strategy to combine human testing and automated testing. In the model, automation is used for a large number of pages (or all pages) and sampling is used for human testing. The WCAG-EM suggests that the human evaluation sample might include templates pages, component libraries, key flows (such as choosing a product and purchasing it, or signing up for a newsletter, etc.), and random pages. While WCAG-EM provides a practical method for claiming conformance for a website, it doesn't fully address the challenges in making every part of every page in a large, dynamic website conform to every success criterion.
Text alternatives for images are an early, and still widely used, accessibility enhancement to HTML. Yet text alternatives remain one of the more intractable accessibility guidelines to assess with automated accessibility checking. While testing for the presence of alternative text is straightforward, and a collection of specific errors (such as labeling a graphic spacer.gif) can be identified by automated testing, human judgment remains necessary to evaluate whether or not any particular text alternative for a graphic is correct and conveys the true meaning of the image. Image recognition techniques are not mature enough to fully discern the underlying meaning of an image and the intent of the author in its inclusion. As a simple example, an image or icon of a paper clip would likely be identified by image recognition simply as a paper clip. However, when a paper clip appears in content often its meaning is to show there is an attachment. In this specific example, the alternative text should be attachment, not paper clip. Similarly, the image of a globe (or any graphical object representing planet Earth) can be used for a multiplicity of reasons, and the appropriate alternative text should indicate the reason for that use and not descriptive wording such as globe or Planet Earth. One not uncommon use of a globe today expands to allow users to select their preferred language, but there may be many other reasonable uses of such an icon.
Practices for creating alternatives to spoken dialog, and to describe visual content, were established in motion picture and TV content well before the world wide web came into existence. These practices formed the basis of the Media Accessibility User Requirements (MAUR) [[media-accessibility-reqs]] for time-based streaming media on the web in HTML5, which now supports both captioning and descriptions of video.
-
Yet, just as with text alternatives, automated techniques and testing aren't sufficient for creating and validating accessible alternatives to time-based media. For example, Automatic Speech Recognition (ASR) often fails when the speech portion of the audio is low quality, isn’t clear, or has background noise or sound-effects. In addition, current automated transcript creation software doesn't perform speaker identification, meaningful sound identification, or correct punctuation that all are necessary for accurate captioning. Work on automatically generated descriptions of video are in their infancy, and like image recognition techniques, don’t provide usable alternatives to video.
-
Similarly, while there is well articulated guidance on how to create text transcripts or captions for audio-only media (such as radio programs and audio books), automated techniques and testing again aren't sufficient for creating and validating these accessible alternatives. Knowing what is important in an audio program to describe to someone who cannot hear is beyond the state of the art. There are several success criteria under this Guideline that all share these challenges of manual testing being required to ensure alternatives accurately reflect the content in the media. These include:
+
Yet, just as with text alternatives, automated techniques and testing aren't sufficient for creating and validating accessible alternatives to time-based media. For example, Automatic Speech Recognition (ASR) often fails when the speech portion of the audio is low quality, isn’t clear, or has background noise or sound-effects. In addition, current automated transcript creation software doesn't perform speaker identification, meaningful sound identification, or correct punctuation that all are necessary for accurate captioning. Work on automatically generated descriptions of video are in their infancy, and like image recognition techniques, don’t provide usable alternatives to video.
+
Similarly, while there is well articulated guidance on how to create text transcripts or captions for audio-only media (such as radio programs and audio books), automated techniques and testing again aren't sufficient for creating and validating these accessible alternatives. Knowing what is important in an audio program to describe to someone who cannot hear is beyond the state of the art. There are several success criteria under this Guideline that all share these challenges of manual testing being required to ensure alternatives accurately reflect the content in the media. These include:
Whether in print or online, the presentation of content is often structured in a manner intended to aid comprehension. Sighted users perceive structure and relationships through various visual cues. Beyond simple sentences and paragraphs, the sighted user may see headings with nested subheadings. There may be sidebars and inset boxes of related content. Tables may be used to show data relationships. Comprehending how content is organized is a critical component of understanding the content.
As with media above, automated testing can determine the presence of structural markup, and can flag certain visual presentations as likely needing that structural markup. But such automated techniques remain unable to decipher if that markup usefully organizes the page content in a way that a user relying on assistive technology can examine the page systematically and readily understand its content.
-
+
Meaningful Sequence
@@ -459,16 +526,16 @@
Meaningful Sequence
Often the sequence in which content is presented affects its meaning. In some content there may be even more than one meaningful way of ordering that content. However, as with Info and Relationships above, automated techniques are unable to determine whether content will be presented to screen reader users in a meaningful sequence ordering. For example, the placement of a button used to add something to a virtual shopping cart is very important for screen reader users, as improper placement can lead to confusion about which item is being added.
Ensuring that no instructions rely on references to sensory characteristics presents similar challenges to ensuring that color isn't the sole indicator of meaning (Success Criterion 1.4.1) – it is testing for a negative, and requires a deep understanding of meaning conveyed by the text to discern a failure programmatically. For example, while instructions such as select the red button reference a sensory characteristic, select the red button which is also the first button on the screen may provide sufficient non-sensory context to not cause a problem (and multi-modal, multi-sensory guidance is often better for users with cognitive impairments or non-typical learning styles).
+
Ensuring that no instructions rely on references to sensory characteristics presents similar challenges to ensuring that color isn't the sole indicator of meaning (Success Criterion 1.4.1) – it is testing for a negative, and requires a deep understanding of meaning conveyed by the text to discern a failure programmatically. For example, while instructions such as select the red button reference a sensory characteristic, select the red button which is also the first button on the screen may provide sufficient non-sensory context to not cause a problem (and multi-modal, multi-sensory guidance is often better for users with cognitive impairments or non-typical learning styles).
-
+
Orientation
@@ -477,7 +544,7 @@
Orientation
While an automated test can determine that the orientation is locked, full evaluation of conformance to this criterion is tied to whether it is essential for the content to be locked to one specific orientation (e.g. portrait or landscape views of an interface rendered to a cell phone). This requires human judgment to ensure that, any time the orientation is locked, the orientation is essential to that content to determine conformance. As of yet, this requires human judgement and is not fully automatable.
-
+
Identify Input Purpose
@@ -485,7 +552,7 @@
Identify Input Purpose
An automated test can easily determine that input fields use HTML markup to indicate the input purpose, however, manual verification is needed to determine that the correct markup was used to match the intent for the field. For example, for a name input field, there are 10 variations of HTML name purpose attributes with different meaning and using the incorrect markup would be confusing to the user.
-
+
Use of Color
@@ -494,7 +561,7 @@
Use of Color
This poses the same challenges as Sensory Characteristics (Success Criterion 1.3.3). To discern whether a page fails this criterion programmatically requires understanding the full meaning of the related content on the page and whether any meaning conveyed by color is somehow also conveyed in another fashion (e.g. whether the meaning of the colors in a bar chart is conveyed in the body of associated text or with a striping/stippling pattern as well on the bars, or perhaps some other fashion).
-
+
Audio Control
@@ -503,16 +570,16 @@
Audio Control
An automated test tool would be able to identify media/audio content in a website, identify whether auto-play is turned on in the code, and also determine the duration. However, an automated test tool cannot determine whether there is a mechanism to pause, stop the audio, or adjust the volume of the audio independent of the overall system volume level. This still requires manual validation.
Automated tools can check the color of text against the background in most cases. However, there are several challenges with using current state of the art automated tools for this success criterion, including (1) when background images are used, automated tests aren't reliably able to check for minimum contrast of text against the image—especially if the image is a photograph or drawing where the text is placed over the image, and (2) situations in which depending upon context such as text becoming incidental because it is part of an inactive user interface component or is purely decorative or part of a logo. These would take human intervention to sample the text and its background to determine if the contrast meets the minimum requirement.
+
Automated tools can check the color of text against the background in most cases. However, there are several challenges with using current state of the art automated tools for this success criterion, including (1) when background images are used, automated tests aren't reliably able to check for minimum contrast of text against the image—especially if the image is a photograph or drawing where the text is placed over the image, and (2) situations in which depending upon context such as text becoming incidental because it is part of an inactive user interface component or is purely decorative or part of a logo. These would take human intervention to sample the text and its background to determine if the contrast meets the minimum requirement.
-
+
Resize Text
@@ -521,7 +588,7 @@
Resize Text
While automated tools can test whether it is possible to resize text on a webpage, it takes human evaluation to determine whether there has been a loss of content or functionality as a result of the text resizing.
-
+
Images of Text
@@ -530,7 +597,7 @@
Images of Text
This poses the same challenge as Orientation (Success Criterion 1.3.4) - it is tied to whether it is essential for text to be part of an image. This requires human judgment, making this criterion not readily automatable. Additionally, methods of employing OCR on images will not accurately discern text of different fonts that overlap each other, or be able to recognize unusual characters or text with poor contrast with the background of the image.
-
+
Reflow
@@ -539,7 +606,7 @@
Reflow
While automated tests can detect the presence of vertical and horizontal scroll bars, there are currently no reliable tests to automate validating that there has been no loss in content or functionality. Human evaluation is also still needed to determine when two-dimensional scrolling is needed for content that requires two-dimensional layout for usage or meaning.
-
+
Non-text Contrast
@@ -555,7 +622,7 @@
Non-text Contrast
to utilize the exception which requires human intervention.
-
+
Text Spacing
@@ -564,7 +631,7 @@
Text Spacing
This success criterion involves using a tool or method to modify text spacing and then checking to ensure no content is truncated or overlapping. There is currently no way to reliably automate validating that no loss of content of functionality has occurred when text spacing has been modified.
While an automated test can evaluate whether a page can be tabbed through in its entirety, ensuring keyboard operability of all functionality currently requires a human to manually navigate through content to ensure all interactive elements are not only in the tab order, but can be fully operated using keyboard controls.
-
+
Character Key Shortcuts
@@ -598,7 +665,7 @@
Character Key Shortcuts
Character key shortcuts can be applied to content via scripting but whether and what these shortcut key presses trigger can only be determined by additional human evaluation.
-
+
Timing Adjustable
@@ -607,7 +674,7 @@
Timing Adjustable
There is currently no easy way to automate checking whether timing is adjustable. Ways of controlling differ in naming, position, and approach (including dialogs/popups before the time-out). This can also be affected by how the server registers user interactions (e.g. for automatically extending the time-out).
-
+
Pause, Stop, Hide
@@ -616,7 +683,7 @@
Pause, Stop, Hide
Typically the requirement to control moving content is provided by interactive controls placed in the vicinity of moving content, or occasionally at the beginning of content. Since position and naming vary, this assessment cannot currently be automated (this involves checking that the function works as expected).
-
+
Three Flashes or Below Threshold
@@ -625,7 +692,7 @@
Three Flashes or Below Threshold
There are currently no known automated tests that are accurately able to assess areas of flashing on a webpage to ensure that the flashing happens less than three times per second.
-
+
Bypass Blocks
@@ -634,7 +701,7 @@
Bypass Blocks
While it can be determined that native elements or landmark roles are used, there is currently no automated way to determine whether they are used to adequately structure content (are they missing out on sections that should be included). The same assessment would be needed when other Techniques are used (structure by headings, skip links).
-
+
Page titled
@@ -643,7 +710,7 @@
Page titled
Automating a check for whether the page has a title is simple; ensuring that the title is meaningful and provides adequate context as to the purpose of the page is not currently possible.
-
+
Focus Order
@@ -652,7 +719,7 @@
Focus Order
There is currently no known way to automate ensuring that focus handling with dynamic content (e.g. moving focus to a custom dialog, keep focus in dialog, return to trigger) follows a logical order.
-
+
Link Purpose (In Context)
@@ -661,7 +728,7 @@
Link Purpose (In Context)
Automated tests can check for the existence of links with the same name, as well as check whether links are qualified programmatically, but checking whether the link text adequately describes the link purpose still involves human judgment.
-
+
Multiple ways
@@ -670,7 +737,7 @@
Multiple ways
Automated tests can validate whether pages can be reached with multiple ways (e.g. nav and search), but will miss cases where exceptions hold (all pages can be reached from anywhere) and still require human validation.
-
+
Headings and Labels
@@ -679,7 +746,7 @@
Headings and Labels
Automated tests can detect the existence of headings and labels, however, there is currently no way to automate determining whether the heading or label provides adequate context for the content that follows.
-
+
Pointer Gestures
@@ -688,7 +755,7 @@
Pointer Gestures
There are currently no known automated checks that would accurately detect complex gestures - even when a script indicates the presence of particular events like touch-start, the event called would need to be checked in human evaluation.
-
+
Pointer Cancellation
@@ -707,7 +774,7 @@
Pointer Cancellation
-
+
Motion Actuation
@@ -716,7 +783,7 @@
Motion Actuation
Motion activated events may be detected automatically but whether there are equivalents for achieving the same thing with user interface components currently requires human evaluation.
-
+
On Focus
@@ -725,7 +792,7 @@
On Focus
There is currently no reliable way to accurately automate checking whether a change caused by moving focus should be considered a change of content or context.
-
+
On Input
@@ -734,7 +801,7 @@
On Input
There is currently no reliable way to accurately automate checking whether changing the setting of any user interface component should be considered a change of content or context, or to automatically detect whether relevant advice exists before using the component in question.
-
+
Error Identification
@@ -743,7 +810,7 @@
Error Identification
Insuring whether an error message correctly identifies and describes the error accurately and in a way that provides adequate context currently requires human evaluation.
-
+
Labels or Instructions
@@ -752,7 +819,7 @@
Labels or Instructions
A.35 Edge cases (labels close enough to a component to be perceived as a visible label) will require a human check. Some labels may be programmatically linked but hidden or visually separated from the element to which they are linked. Whether instructions are necessary and need to be provided will hinge on the content. Human check needed.
-
+
Error Suggestion
@@ -761,7 +828,7 @@
Error Suggestion
Whether an error suggestion is helpful or correct currently requires human evaluation.
-
+
Name, Role, Value
@@ -785,13 +852,12 @@
Detailed Challenges with Conformance Verification and Testing for Non-Web IC
entire software application. The remaining 10 were more straightforward to
apply to non-web ICT, but still required some text changes.
-
Since publication of WCAG2ICT, [[wcag2ict]] WCAG 2.1 was published introducing a number of additional success criteria at the A and AA levels. Some of these may also pose specific challenges for conformation verification and testing in the non-web ICT context. A future version of this document will address those
-new success criteria in the non-Web ICT Context.
+
Since publication of WCAG2ICT, [[wcag2ict]] WCAG 2.1 was published introducing a number of additional success criteria at the A and AA levels. Some of these may also pose specific challenges for conformation verification and testing in the non-web ICT context.
The 18 success criteria noted in WCAG2ICT are discussed below in four sections,
-the last of which address the 14 of the 38 A and AA criteria in WCAG 2.0 which relate to an accessibility supported interface, which may not be possible for software running in a closed environment (e.g. an airplane ticket kiosk).
+the last of which address the 14 of the 38 A and AA criteria in WCAG 2.0 which relate to an Accessibility Supported interface, which may not be possible for software running in a closed environment (e.g. an airplane ticket kiosk).
@@ -800,21 +866,21 @@
Set of Web Pages Success Criteria
These four success criteria, include either the term set of pages or multiple pages, which in the non-web ICT context becomes either a Set of Documents or a Set of Software Programs. In either case (document or software), whether the criterion applies is dependent upon whether such a set exists, which may require human judgment. Where that set is determined to exist, it may be difficult to employ programmatic testing techniques to verify compliance with the specific criterion.
To ensure this criterion is met for non-web documents, once the set of documents is defined, every document in the set must be searched for blocks of content that are repeated across all of those documents, and a mechanism to skip those repeated blocks. Since the blocks aren't necessarily completely identical (e.g. a repeated listing of all other documents in a set might not include the document containing that list), a tool to do this may not be straightforward, and in any case, no such tool is known to exist today to do this with non-web documents.
+
To ensure this criterion is met for non-web documents, once the set of documents is defined, every document in the set must be searched for blocks of content that are repeated across all of those documents, and a mechanism to skip those repeated blocks. Since the blocks aren't necessarily completely identical (e.g. a repeated listing of all other documents in a set might not include the document containing that list), a tool to do this may not be straightforward, and in any case, no such tool is known to exist today to do this with non-web documents.
-
Similarly, to ensure this criterion is met for non-web software, once the set of software is defined, every software application in the set must be searched for blocks of content that are repeated across all of those applications, and a mechanism to skip those repeated blocks. Since the blocks aren't necessarily completely identical (e.g. a repeated listing of all other software in a set might not include the software application containing that list), a tool to do this may not be straightforward, and in any case, no such tool is known to exist today to do this with non-web software.
+
Similarly, to ensure this criterion is met for non-web software, once the set of software is defined, every software application in the set must be searched for blocks of content that are repeated across all of those applications, and a mechanism to skip those repeated blocks. Since the blocks aren't necessarily completely identical (e.g. a repeated listing of all other software in a set might not include the software application containing that list), a tool to do this may not be straightforward, and in any case, no such tool is known to exist today to do this with non-web software.
-
+
Multiple Ways
@@ -827,7 +893,7 @@
Multiple Ways
Similarly, to ensure this criterion is met for non-web software, once the set of software is defined, every software application in the set must provide multiple mechanisms for locating every other application in the set. As noted by WCAG2ICT, if the software applications are on a file system, it may be possible to browse through the files or programs that make up a set, or search within members of the set for the names of other members. A file directory would be the equivalent of a site map for documents in a set, and a search function in a file system would be equivalent to a web search function for web pages. However, if this is not the case, then the set of software applications must expose at least 2 ways of locating every other application in the set. Determining if this is the case is not possible today with any testing tool we are aware of, and so would require human inspection.
-
+
Consistent Navigation
@@ -841,7 +907,7 @@
Consistent Navigation
-
+
Consistent Identification
@@ -861,7 +927,7 @@
Consistent Identification
Non-Interference Success Criteria
The non-interference success criteria are things that apply to all areas
of the page. As explained in WCAG2ICT in the section Comments on
- Conformance, it wasn't possible to unambiguously carve up software into
+ Conformance, it wasn't possible to unambiguously carve up software into
discrete pieces, and so the unit of evaluation for non-web software is the
whole software program. As with any software testing this can be a very large
unit of evaluation, and methods similar to standard software testing might be
@@ -871,7 +937,7 @@
Non-Interference Success Criteria
would normally be part of the software testing strategy to verify compliance
with these four criteria.
-
+
Audio Control
@@ -890,12 +956,12 @@
Audio Control
Where non-web software contains audio, especially audio that automatically
plays in certain circumstances (e.g. making a ringing sound to indicate an
-incoming call) ...
-
EDITOR'S NOTE Section content yet to be written.
+incoming call) …
+
EDITOR'S NOTE Section content yet to be written.
-
+
No Keyboard Trap
@@ -909,7 +975,7 @@
No Keyboard Trap
-
+
Pause, Stop, Hide
@@ -929,7 +995,7 @@
Pause, Stop, Hide
-
+
Three Flashes or Below Threshold
@@ -946,57 +1012,57 @@
Three Flashes or Below Threshold
Remaining WCAG 2.0 A/AA success criterion mentioned in WCAG2ICT as
needing additional text changes
Success Criteria Needing Special Treatment in Non-Accessibility Supported En
15 of the 38 A and AA criteria in WCAG 2.0 relate to an accessibility supported interface — they are designed with interoperability with assistive technologies in mind. Such interaction may not be possible for many types of software (e.g.
software running in a closed environment like an airplane ticket kiosk). Thus, in those environments, the only way to address the needs articulated in these criteria may be for the software to be self-voicing for blind users who can
hear, and otherwise self-accessible to the needs of people with other disabilities which are commonly supported via assistive technologies. It may not be feasible to support all disability user needs (e.g. including a refreshable
- braille display in the device to support deaf-blind users, and then maintaining those braille displays to ensure their mechanisms don't get damaged).
+ braille display in the device to support deaf-blind users, and then maintaining those braille displays to ensure their mechanisms don't get damaged).
Challenges of Conformance as identified from Silver Research
+
Now known as W3C Accessibility Guidelines (WCAG 3.0), this iteration of W3C accessibility guidance was conceived and designed to be research-based. Working over many years, the Silver Task Force of the Accessibility Guidelines Working Group (AGWG) and the Silver Community Group collaborated with researchers on questions that the Silver Groups identified. This research was used to develop 11 problem statements that needed to be solved for Silver. The detailed problem statements include the specific problem, the result of the problem, the situation and priority, and the opportunity presented by the problem. The problem statements were organized into three main areas: Usability, Conformance, and Maintenance. The section following is taken from the Conformance sections of the Silver Design Sprint Final Report and the Silver Problem Statements. Details of the research questions and the individual reports are in Research Archive of Silver wiki.
+
The following is shown as originally presented by the Silver task force, Key conclusions have been folded into specific enumerated challenges as appropriate.
+
+
Silver Research Problem Statements
+
Originally published as the Silver Design Sprint Final Report (2018). These problem statements were presented to the Silver Design Sprint participants.
+
+
Constraints on What is Strictly Testable provides an obstacle to including guidance that meets the needs of people with disabilities but is not conducive to a pass/fail test.
+
Human Testable (related to Ambiguity) also relates to differences in knowledge and priorities of different testers achieve different results.
+
Accessibility Supported is a conformance requirement of WCAG 2 that is poorly understood and incompletely implemented.
+
Evolving Technology of the rapidly changing web must constantly be evaluated against the capabilities of assistive technology and evolving assistive technology must be evaluated against the backward compatibility of existing web sites.
+
+
+
+
Details of Problem Statements
+
Originally published as Silver Problem Statements, this was a detailed analysis of the research results behind the above list.
+
+
Definition of Conformance
+
Conformance to a standard means that you meet or satisfy the requirements of the standard. In WCAG 2.0 the requirements are the Success Criteria. To conform to WCAG 2.0, you need to satisfy the Success Criteria, that is, there is no content which violates the Success Criteria.
+
WCAG 2.0 Conformance Requirements:
+
+
Conformance Level (A to AAA)
+
Conformance Scope (For full web pages only, not partial)
+
Complete Process
+
Only "Accessibility-supported" ways of using technologies
+
Non-Interference: Technologies that are not accessibility supported can be used, as long as all the information is also available using technologies that are accessibility supported and as long as the non-accessibility-supported material does not interfere.
+
+
+
+
Themes from Research
+
+
No monitoring process to test the accuracy of WCAG compliance claims (Keith et al., 2012)
+
Difficulties for conformance (Keith et al., 2012)
+
+
Third parties documents, applications and services
+
Know-how of IT personnel
+
Tension between accessibility and design
+
+
+
+
Specific success criteria for failure - 1.1.1 , 2.2., 4.1.2 (Keith et al., 2012)
Expertise appears to improve (by 19%) the ability to avoid false positives. Finally, pooling the results of two independent experienced evaluators would be the best option, capturing at most 76% of the true problems and producing only 24% of false positives. Any other independent combination of audits would achieve worse results.
+
This means that an 80% target for agreement, when audits are conducted without communication between evaluators, is not attainable, even with experienced evaluators.
+
+
+
Challenges and Recommendations (Alonso et al., 2010)
+
+
accessibility supported ways of using technologies
+
Testability of Success Criteria
+
Openness of Techniques and Failures
+
Aggregation of Partial Results
+
+
+
Silver needs to expand the scope beyond web to include apps, documents, authoring, user agents, wearables, kiosks, IoT, VR, etc. and be inclusive of more disabilities. (UX Professionals Use of WCAG: Analysis)
+
Accessibility Supported allows inadequate assistive technologies to be claimed for conformance, particularly in non-native English speaking countries. (Interviews on Conformance)
+
+
+
+
Constraints on What is Strictly Testable
+
Specific problem: Certain success criteria are quite clear and measurable, like color contrast. Others, far less so. The entire principle of understandable is critical for people with cognitive disabilities, yet success criteria intended to support the principle are not easy to test for or clear on how to measure. As a simple example, there is no clear, recent or consistent definition – within any locale or language – on what lower secondary education level means in regard to web content. Language and text content is also not the only challenge among those with cognitive and learning disabilities. Compounding this, most of the existing criteria in support of understanding are designated as AAA, which relatively few organizations attempt to conform with.
+
Result of problem: The requirement for valid and reliable testability for WCAG success criteria presents a structural barrier to including the needs of people with disabilities whose needs are not strictly testable. Guidance that WCAG working group members would like to include cannot be included. The needs of people with disabilities – especially intellectual and cognitive disabilities – are not being met.
+
Situation and Priority: Of the 70 new success criteria proposed by the Cognitive Accessibility Task Force to support the needs of people with cognitive and intellectual disabilities, only four to six (depending on interpretation) were added to WCAG 2.1 and only one is in level AA. The remainder are in level AAA, which is rarely implemented. This means user needs are not met.
+
Opportunity: Multiple research projects and audience feedback have concluded that simpler language is desired and needed for audiences of the guidelines. Clear but flexible criteria with considerations for a wider spectrum of disabilities helps ensure more needs are met.
+
+
+
Human Testable
+
Specific problem: Regardless of proficiency, there is a significant gap in how any two human auditors will identify a success or fail of criteria. Various audiences have competing priorities when assessing the success criteria of any given digital property. Knowledge varies for accessibility standards and how people with disabilities use assistive technology tools. Ultimately, there is variance between: any two auditors; any two authors of test cases; and human bias. Some needs of people of disabilities are difficult to measure in a quantifiable way.
+
Result of problem: Success criteria are measured by different standards and by people who often make subjective observations. Because there's so much room for human error, an individual may believe they've met a specific conformance model when, in reality, that’s not the case. The ultimate impact is on an end user with a disability who cannot complete a given task, because the success criteria wasn’t properly identified, tested and understood.
+
Situation and Priority: There isn't a standardized approach to how the conformance model applies to success criteria at the organizational level and in specific test case scenarios.
+
Opportunity: There's an opportunity to improve the success criteria such that human auditors and testers find the success criteria more understandable. Educating business leaders on how the varying levels of conformance apply to their organization may be useful as well. We can educate about the ways that people with disabilities use their assistive technology.
+
+
+
Accessibility Supported
+
Specific problem: Accessibility supported was implemented in a way that did not facilitate consistent adoption by developers and testers. It also requires a harmonious relationship and persistent interoperability between content technologies and requesting technologies that must be continuously evaluated as either is updated. Further, the WG defers the judgment of how much, how many, or which AT must support a technology to the community. It is poorly understood, even by experts.
+
Result of problem: Among the results are: difficulty understanding what qualifies as a content technology or an assistive technology; difficulty quantifying assistive technologies or features of user agents; claiming conformance with inadequate assistive technology; and difficulty claiming conformance.
+
Situation and Priority: Any claim or assertion that a web page conforms to the guidelines may require an explicit statement defining which assistive technology and user agent(s) the contained technologies rely upon, and presumably inclusive of specific versions and or release dates of each. One could infer then that a conformance claim is dependent upon a software compatibility claim naming browsers and assistive technology and their respective versions. This would create a burden to author and govern such claims. Additionally, no one can predict and anticipate new technologies and their rates of adoption by people with disabilities.
+
Opportunity: As the technologies in this equation evolve, the interoperability may be affected by any number of factors outside of the control of the author and publisher of a web page. Either accessibility supported should not be a
+ component of conformance requirements, or it should clearly, concisely, and explicitly define and quantify the technologies or classes of technologies, AND set any resulting update or expiry criteria for governance.
+
+
+
Evolving Technology
+
Specific problem: Evolving Technology: As content technology evolves, it must be re-evaluated against assistive technology for compatibility. Likewise, as assistive technology evolves or emerges, it must be evaluated against the backward compatibility of various content technology.
+
Result of problem: There is no versioning consideration for updates to user agents and assistive technology. Strict conformance then typically has an expiry.
+
Situation and Priority: There is no clear and universal understanding of the conformance model or its longevity. Some will infer that there is always a conformance debt when any technology changes.
+
Opportunity: Consider conformance statements to include an explicit qualifier of time of release or versions of technology. OR consider a more general approach that is not explicit and is flexible to the differences in technologies as they evolve, identifying the feature of the assistive tech rather than the version of the assistive tech. OR consider a model that quantifies conformance as a degree of criteria met.
+
+
+
+
+
Acknowledgments
-
-
Participants of the AG WG who contributed to the development of this document:
-
-
Charles Adams (Oracle)
-
Alastair Campbell (Nomensa)
-
Michael Cooper (W3C)
-
Joe Cronin (Amazon)
-
Detlev Fischer (Invited Expert)
-
Charles Hall (Invited Expert)
-
Andrew Kirkpatrick (Adobe)
-
Peter Korn (Amazon)
-
Shawn Lauriat (Google)
-
Mary Jo Mueller (IBM)
-
Janina Sajka (Amazon)
-
Jeanne Spellman (TetraLogical)
-
Jason White (ETS)
-
-
-
-
-
Enabling funders
-
This publication has been funded in part with U.S. Federal funds from the Health and Human Services, National Institute on Disability, Independent Living, and Rehabilitation Research (NIDILRR) under contract number HHSP23301500054C. The content of this publication does not necessarily reflect the views or policies of the U.S. Department of Health and Human Services, nor does mention of trade names, commercial products, or organizations imply endorsement by the U.S. Government.
-
+
+
Participants of the AG WG who contributed to the development of this document:
+
+
Charles Adams (Oracle)
+
Alastair Campbell (Nomensa)
+
Michael Cooper (W3C)
+
Joe Cronin (Amazon)
+
Detlev Fischer (Invited Expert)
+
Charles Hall (Invited Expert)
+
Andrew Kirkpatrick (Adobe)
+
Peter Korn (Amazon)
+
Shawn Lauriat (Google)
+
Mary Jo Mueller (IBM)
+
Janina Sajka (Invited Expert; Was Amazon until 14 November 2021)
+
Jeanne Spellman (TetraLogical)
+
Jason White (ETS)
+
+
+
diff --git a/conformance-challenges/respec-config.js b/conformance-challenges/respec-config.js
index 83cacbfe19..ece8d4ac34 100644
--- a/conformance-challenges/respec-config.js
+++ b/conformance-challenges/respec-config.js
@@ -42,10 +42,9 @@ var respecConfig = {
editors: [
{
name: "Janina Sajka",
- company: "Amazon",
- companyURL: "https://www.amazon.com/",
- mailto: "sajkaj@amazon.com",
- w3cid: 108617
+ URL: "https://linkedin.com/in/jsajka",
+ mailto: "janina@rednote.net",
+ w3cid: 33688
},
{
name: "Michael Cooper",
@@ -65,10 +64,9 @@ var respecConfig = {
// company: "Your Company", companyURI: "http://example.com/" },
{
name: "Janina Sajka",
- company: "Amazon",
- companyURL: "https://www.amazon.com/",
- mailto: "sajkaj@amazon.com",
- w3cid: 108617
+ URL: "https://linkedin.com/in/jsajka",
+ mailto: "janina@rednote.net",
+ w3cid: 33688
},
{
name: "Peter Korn",
diff --git a/css/a11y-light.css b/css/a11y-light.css
new file mode 100644
index 0000000000..f1bf8f3f8f
--- /dev/null
+++ b/css/a11y-light.css
@@ -0,0 +1,99 @@
+/* a11y-light theme */
+/* Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css */
+/* @author: ericwbailey */
+
+/* Comment */
+.hljs-comment,
+.hljs-quote {
+ color: #696969;
+}
+
+/* Red */
+.hljs-variable,
+.hljs-template-variable,
+.hljs-tag,
+.hljs-name,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-regexp,
+.hljs-deletion {
+ color: #d91e18;
+}
+
+/* Orange */
+.hljs-number,
+.hljs-built_in,
+.hljs-builtin-name,
+.hljs-literal,
+.hljs-type,
+.hljs-params,
+.hljs-meta,
+.hljs-link {
+ color: #aa5d00;
+}
+
+/* Yellow */
+.hljs-attribute {
+ color: #aa5d00;
+}
+
+/* Green */
+.hljs-string,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-addition {
+ color: #008000;
+}
+
+/* Blue */
+.hljs-title,
+.hljs-section {
+ color: #007faa;
+}
+
+/* Purple */
+.hljs-keyword,
+.hljs-selector-tag {
+ color: #7928a1;
+}
+
+.hljs {
+ display: block;
+ overflow-x: auto;
+ background: #fefefe;
+ color: #545454;
+ padding: 0.5em;
+}
+
+.hljs-emphasis {
+ font-style: italic;
+}
+
+.hljs-strong {
+ font-weight: bold;
+}
+
+@media screen and (-ms-high-contrast: active) {
+ .hljs-addition,
+ .hljs-attribute,
+ .hljs-built_in,
+ .hljs-builtin-name,
+ .hljs-bullet,
+ .hljs-comment,
+ .hljs-link,
+ .hljs-literal,
+ .hljs-meta,
+ .hljs-number,
+ .hljs-params,
+ .hljs-string,
+ .hljs-symbol,
+ .hljs-type,
+ .hljs-quote {
+ color: highlight;
+ }
+
+ .hljs-keyword,
+ .hljs-selector-tag {
+ font-weight: bold;
+ }
+}
diff --git a/css/base.css b/css/base.css
index b028c7b059..25a82c2c1f 100644
--- a/css/base.css
+++ b/css/base.css
@@ -1,17 +1,473 @@
-.wcag21, .wcag22 {
- background-color: #E9FBE9;
- border-left: solid .5em #52E052;
+main {
+ display: block;
}
-span.wcag21, span.wcag22 {
- margin-left: .25em;
- padding-left: .25em;
+
+.nav-container {
}
-div.wcag21, div.wcag22 {
- margin: 1em auto;
- padding: .5em;
- page-break-inside: avoid;
+
+.nav {
+ overflow: inherit;
}
-.new-version {
- font-size: smaller;
+
+.nav__item a {
+ display: inline-block;
+ white-space: inherit;
+}
+
+.nav__item a svg {
+ vertical-align: middle;
+ height: 1em;
+}
+
+.nav__item a + button {
+ margin-left: -0.75em;
+ margin-right: 1em;
+ ;
+}
+
+.minimal-header {
+ -ms-grid-column: 2;
+ -ms-grid-column-span: 8;
+ -ms-grid-row: 1;
+ grid-column: 2/10;
+}
+
+.minimal-header-name a {
+ text-decoration: none;
+}
+.minimal-header-name a:hover, .minimal-header-name a:focus {
+ text-decoration: underline;
+}
+
+.main-content {
+ -ms-grid-column: 2;
+ -ms-grid-column-span: 6;
+ grid-column: 2/span 6;
+ -ms-grid-row: 2;
+ -ms-grid-row-span: 2;
+ grid-row-start: 2;
+}
+
+.sidebar ul {
+ padding: 0;
+}
+
+.sidebar dd {
+ margin-left: 0 !important;
+}
+
+h1 {
+ padding-top: 33px;
+}
+
+h1 span {
+ display: block;
+ font-size: .5em;
+ margin-bottom: 0.25em;
+}
+
+h2 {
+ position: relative;
+}
+
+h2 .permalink {
+ position: absolute;
+ left: -1em;
+}
+
+h2 .permalink a {
+ color: var(--grey);
+ text-decoration: none;
+}
+
+h2 .fragmentlink {
+ margin-left: -1em;
+ position: relative;
+ float: left;
+}
+
+h2 .fragmentlink svg {
+ visibility: hidden;
+}
+
+h2:hover .fragmentlink svg {
+ visibility: visible;
+}
+
+#success-criterion h2, #guideline h2, #technique h2 {
+ margin: 0;
+}
+
+.navtoc ul {
+ margin: 0.5em 0;
+}
+
+dt div {
+ font-weight: normal;
+}
+
+.toc-wcag-docs {
+ padding-left: 1em;
+}
+
+.main-content > .toc-understanding-guideline > li > a {
font-weight: bold;
-}
\ No newline at end of file
+ margin-top: 2em;
+ margin-bottom: -.5em;
+ display: block;
+ text-decoration: none;
+}
+
+.scquote {
+ margin: 0;
+ border: 1px solid var(--line-grey);
+ padding: 1em;
+ font-style: normal;
+}
+.scquote > :first-child {
+ margin-top: 0;
+ padding-top: 0;
+}
+
+.minimal-header-container {
+ background-color: #005a9c;
+ background-color: var(--w3c-classic);
+ color: #fff;
+ color: var(--pure-white);
+}
+.minimal-header-logo > a {
+ display: flex;
+}
+.minimal-header-name > a {
+ color: inherit;
+}
+
+.note {
+ padding: 0em 1em;
+ margin-bottom: 1em;
+}
+.note-title {
+ font-weight: bold;
+ margin: 0;
+}
+
+.note p {
+ margin-top: 0;
+}
+
+:is(aside, div).example .example-title {
+ font-weight: bold;
+ margin: 0;
+}
+:is(aside, div).example {
+ padding: 1em 1em 0.5em 1em;
+ margin-bottom: 1em;
+ border-left-width: .5em;
+ border-left-style: solid;
+ border-color: #e0cb52;
+ background: #fcfaee
+}
+
+.obsolete {
+ border-left: solid 5px var(--faded-red);
+}
+
+.obsolete-message {
+ background-color: var(--red-subtle);
+ border-color: var(--faded-red);
+}
+
+.obsolete-message h2 {
+ color: #fff;
+ background-color: var(--faded-red);
+ margin: 0;
+}
+
+/* import inline styles from https://www.w3.org/WAI/drafts/WCAG-understanding-redesign-hack.html */
+.nav a:link {
+text-decoration: none;
+}
+#site-header.minimal-header.with-subtitle {
+padding: 1.75em 0 0 0;
+}
+
+.minimal-header-logo img {
+margin: 1px 0 1px 0;
+}
+.minimal-header-logo svg {
+margin: 0.75em 0 0.75em 0.5em;
+}
+
+#site-header.minimal-header {
+margin: 1.2em 0;
+align-items: stretch;
+}
+
+#site-header.minimal-header .minimal-header-name,
+#site-header.minimal-header .minimal-header-subtitle,
+#site-header.minimal-header .minimal-header-link
+{
+display: flex;
+flex-direction: column;
+justify-content: center;
+}
+
+.minimal-header-name {
+flex: width 0 0;
+}
+
+.minimal-header-subtitle,
+.minimal-header-link {
+border-left: 1px solid var(--gold);
+padding-left: 8px;
+margin-left: 18px;
+display: block;
+font-size: 80%;
+flex: 1 0 0;
+}
+
+.minimal-header-subtitle {
+font-style: italic;
+}
+
+.minimal-header-link {
+text-decoration: underline !important;
+font-weight: normal;
+margin-right: 16px;
+}
+
+.nav-container {
+margin-bottom: 0;
+}
+
+.nav {
+background: none;
+}
+
+.nav-related-info { /* blue bar with the "About:" links */
+background: #005a9c;
+color: #fff;
+}
+
+.nav-related-info a {
+color: #fff !important;
+}
+
+.nav-page-specific { /* light blue bar with page/section specific navigation/pager */
+margin-bottom: 1.25em;
+}
+
+.nav a:link, .nav a:visited {
+color: #036;
+color: var(--w3c-blue);
+}
+
+.nav a:hover, .nav a:active {
+color: var(--dk-blue);
+}
+
+.nav-hack.sidebar a:hover,
+.nav-hack.sidebar a:active
+{
+color: var(--dk-blue);
+text-decoration: underline;
+}
+
+.standalone-resource-about, .standalone-resource-pager {
+margin: 0;
+}
+
+nav.standalone-resource-about {
+padding: .5em 0 1.5em 0;
+font-style: italic;
+}
+
+.standalone-resource-about dl, .standalone-resource-about dt, .standalone-resource-about dd {
+display: inline;
+margin: 0;
+padding: 0;
+}
+
+.standalone-resource-about dt{
+font-weight: normal;
+}
+
+.standalone-resource-about dl a {
+margin: 0;
+padding: 0 1em 0 1em;
+}
+
+.standalone-resource-about dd {
+border-right: 1px var(--gold) solid;
+}
+
+.standalone-resource-about dd:last-of-type {
+border-right: 0;
+}
+
+.standalone-resource-about dd svg {
+margin-left: 0.25rem;
+vertical-align: middle;
+}
+
+.nav .standalone-resource-pager ul {
+align-items: center;
+}
+
+.nav .standalone-resource-pager a,
+.nav .standalone-resource-pager span {
+margin-left: 0;
+margin-right: 0;
+}
+
+.pager-icon {
+vertical-align: middle;
+padding: 0 0.15em 0.15em 0.15em;
+width: 1em;
+height: 2em;
+fill: #005A6A; /* when these are used as actual SVGs */
+}
+
+.category-icon {
+vertical-align: middle;
+padding: 0 0.25em 0.25em 0.25em;
+width: 2em;
+height: 2em;
+}
+
+.standalone-resource-pager ul {
+display: block;
+}
+
+.standalone-resource-pager ul li {
+display: inline;
+}
+
+.nav-hack {
+font-size: .85em;
+/*justify-self: end;*/
+align-self: start;
+}
+.nav-hack ul {
+list-style: none;
+padding-left: 0
+}
+.nav-hack li:not(:first-child){
+padding-top: 0.4em;
+line-height: 1.2;
+border-top: 1px solid #BCBCBC;
+}
+.nav-hack li a {
+text-decoration: none;
+}
+.nav-hack h3 {
+margin: 0;
+font-size: 1rem;
+}
+
+.nav-hack p {
+margin: 0;
+}
+
+
+/* skip link */
+.button--skip-link {
+background-color: var(--gold) !important;
+border-color: var(--gold) !important;
+outline-color: currentColor !important;
+color: var(--off-black) !important;
+font-weight: 600;
+font-size: larger;
+margin: 0 auto;
+position: absolute;
+z-index: 20;
+left: 0;
+right: 0;
+top: 0.5em;
+width: 10em;
+opacity: 1;
+transition: transform 0.1875s ease-out, opacity 0.1875s ease-out;
+}
+
+.button--skip-link:not(:focus):not(:hover) {
+transform: translateY(-4em);
+opacity: 0;
+}
+
+.standalone-resource-navrule {
+border:none;
+border-top: 1px solid grey
+}
+
+.standalone-resource-about ul,
+.standalone-resource-pager ul {
+list-style: none;
+}
+
+.nav {
+font-size: 95%;
+}
+
+.standalone-resource-about a,
+.standalone-resource-pager a,
+.standalone-resource-about span,
+.standalone-resource-pager span
+{
+margin-left:.8em;
+margin-right:.8em;
+}
+
+.example video,
+#examples video
+{
+ max-width: 100%;
+}
+
+#brief {
+ margin-bottom: 3em;
+}
+#brief dl {
+ margin-left: 2em;
+}
+
+@media (max-width: 35em) {
+ .nav-container {
+ padding: 0;
+ }
+ .nav a {
+ display: inline-block;
+ width: calc(100% - 2em);
+ }
+ @supports (display:gred) {
+ #site-header {
+ padding-left: 0;
+ }
+ }
+ .minimal-header {
+ display: block;
+ }
+ #site-header.minimal-header .minimal-header-name, #site-header.minimal-header .minimal-header-subtitle, #site-header.minimal-header .minimal-header-link {
+ display: block;
+ }
+ #site-header.minimal-header .minimal-header-subtitle {
+ display: none;
+ }
+ .minimal-header-name {
+ font-size: 160%;
+ margin-bottom: 0.5em;
+ }
+ .minimal-header-link {
+ margin-left: 0;
+ padding-left: 0;
+ border: none;
+ }
+ .minimal-header-logo {
+ display: block;
+ }
+ .minimal-header-logo > a {
+ display: inline-block;
+ }
+ .minimal-header-logo svg {
+ margin: 1em 0 0 0;
+ }
+}
diff --git a/eleventy.config.ts b/eleventy.config.ts
new file mode 100644
index 0000000000..fc9fe5ff69
--- /dev/null
+++ b/eleventy.config.ts
@@ -0,0 +1,299 @@
+import compact from "lodash-es/compact";
+import { rimraf } from "rimraf";
+
+import { copyFile } from "fs/promises";
+
+import { CustomLiquid } from "11ty/CustomLiquid";
+import {
+ actRules,
+ assertIsWcagVersion,
+ getFlatGuidelines,
+ getPrinciples,
+ type Guideline,
+ type Principle,
+ type SuccessCriterion,
+} from "11ty/guidelines";
+import {
+ getFlatTechniques,
+ getTechniqueAssociations,
+ getTechniquesByTechnology,
+ technologies,
+ technologyTitles,
+ type Technique,
+ type Technology,
+} from "11ty/techniques";
+import { generateUnderstandingNavMap, getUnderstandingDocs } from "11ty/understanding";
+import type { EleventyContext, EleventyData, EleventyEvent } from "11ty/types";
+
+/** Version of WCAG to build */
+const version = process.env.WCAG_VERSION || "22";
+assertIsWcagVersion(version);
+
+/**
+ * Returns boolean indicating whether a technique is obsolete for the given version.
+ * Tolerates undefined for use with hash lookups.
+ */
+const isTechniqueObsolete = (technique: Technique | undefined) =>
+ !!technique?.obsoleteSince && technique.obsoleteSince <= version;
+
+/**
+ * Returns boolean indicating whether an SC is obsolete for the given version.
+ * Tolerates other types for use with hash lookups.
+ */
+const isGuidelineObsolete = (guideline: Principle | Guideline | SuccessCriterion | undefined) =>
+ guideline?.type === "SC" && guideline.level === "";
+
+const principles = await getPrinciples();
+const flatGuidelines = getFlatGuidelines(principles);
+const techniques = await getTechniquesByTechnology();
+const flatTechniques = getFlatTechniques(techniques);
+
+for (const [technology, list] of Object.entries(techniques)) {
+ // Prune obsolete techniques from ToC
+ techniques[technology as Technology] = list.filter(
+ (technique) => !technique.obsoleteSince || technique.obsoleteSince > version
+ );
+}
+
+const techniqueAssociations = await getTechniqueAssociations(flatGuidelines);
+for (const [id, associations] of Object.entries(techniqueAssociations)) {
+ // Prune associations from non-obsolete techniques to obsolete SCs
+ techniqueAssociations[id] = associations.filter(
+ ({ criterion }) => criterion.level !== "" || isTechniqueObsolete(flatTechniques[id])
+ );
+}
+
+const understandingDocs = await getUnderstandingDocs(version);
+const understandingNav = await generateUnderstandingNavMap(principles, understandingDocs);
+
+// Declare static global data up-front so we can build typings from it
+const globalData = {
+ version,
+ versionDecimal: version.split("").join("."),
+ techniques, // Used for techniques/index.html
+ technologies, // Used for techniques/index.html
+ technologyTitles, // Used for techniques/index.html
+ principles, // Used for understanding/index.html
+ understandingDocs, // Used for understanding/index.html
+};
+
+export type GlobalData = EleventyData &
+ typeof globalData & {
+ // Expected data cascade properties from *.11tydata.js
+ headerLabel?: string; // akin to documentset.name in build.xml
+ headerUrl?: string;
+ isTechniques?: boolean;
+ isUnderstanding?: boolean;
+ };
+
+const [GH_ORG, GH_REPO] = (process.env.GITHUB_REPOSITORY || "w3c/wcag").split("/");
+
+const baseUrls = {
+ guidelines: `https://www.w3.org/TR/WCAG${version}/`,
+ techniques: "/techniques/",
+ understanding: "/understanding/",
+};
+
+if (process.env.WCAG_MODE === "editors") {
+ // For pushing to gh-pages
+ baseUrls.guidelines = `https://${GH_ORG}.github.io/${GH_REPO}/guidelines/${
+ version === "21" ? "" : `${version}/`
+ }`;
+ baseUrls.techniques = `https://${GH_ORG}.github.io/${GH_REPO}/techniques/`;
+ baseUrls.understanding = `https://${GH_ORG}.github.io/${GH_REPO}/understanding/`;
+} else if (process.env.WCAG_MODE === "publication") {
+ // For pushing to W3C site
+ baseUrls.guidelines = `https://www.w3.org/TR/WCAG${version}/`;
+ baseUrls.techniques = `https://www.w3.org/WAI/WCAG${version}/Techniques/`;
+ baseUrls.understanding = `https://www.w3.org/WAI/WCAG${version}/Understanding/`;
+}
+
+export default function (eleventyConfig: any) {
+ for (const [name, value] of Object.entries(globalData)) eleventyConfig.addGlobalData(name, value);
+
+ // Make baseUrls available to templates
+ for (const [name, value] of Object.entries(baseUrls))
+ eleventyConfig.addGlobalData(`${name}Url`, value);
+
+ // Use git modified time if building for gh-pages or W3C site;
+ // otherwise use local mtime to cut build time (~4s difference).
+ // See https://www.11ty.dev/docs/dates/#setting-a-content-date-in-front-matter
+ eleventyConfig.addGlobalData("date", `${process.env.WCAG_MODE ? "git " : ""}Last Modified`);
+
+ // eleventyComputed data is assigned here rather than in 11tydata files;
+ // we have access to typings here, and can keep the latter fully static.
+ eleventyConfig.addGlobalData("eleventyComputed", {
+ // permalink determines output structure; see https://www.11ty.dev/docs/permalinks/
+ permalink: ({ page, isUnderstanding }: GlobalData) => {
+ if (page.inputPath === "./index.html" && process.env.WCAG_MODE) return false;
+ if (isUnderstanding) {
+ // understanding-metadata.html exists in 2 places; top-level wins in XSLT process
+ if (/\/20\/understanding-metadata/.test(page.inputPath)) return false;
+ // Flatten pages into top-level directory, out of version subdirectories
+ return page.inputPath.replace(/\/2\d\//, "/");
+ }
+ // Preserve existing structure: write to x.html instead of x/index.html
+ return page.inputPath;
+ },
+
+ nav: ({ page, isUnderstanding }: GlobalData) =>
+ isUnderstanding ? understandingNav[page.fileSlug] : null,
+ testRules: ({ page, isTechniques, isUnderstanding }: GlobalData) => {
+ if (isTechniques)
+ return actRules.filter(({ wcagTechniques }) => wcagTechniques.includes(page.fileSlug));
+ if (isUnderstanding)
+ return actRules.filter(({ successCriteria }) => successCriteria.includes(page.fileSlug));
+ },
+
+ // Data for individual technique pages
+ technique: ({ page, isTechniques }: GlobalData) =>
+ isTechniques ? flatTechniques[page.fileSlug] : null,
+ techniqueAssociations: ({ page, isTechniques }: GlobalData) =>
+ isTechniques ? techniqueAssociations[page.fileSlug] : null,
+
+ // Data for individual understanding pages
+ guideline: ({ page, isUnderstanding }: GlobalData) =>
+ isUnderstanding ? flatGuidelines[page.fileSlug] : null,
+ });
+
+ // See https://www.11ty.dev/docs/copy/#emulate-passthrough-copy-during-serve
+ eleventyConfig.setServerPassthroughCopyBehavior("passthrough");
+
+ eleventyConfig.addPassthroughCopy("techniques/*.css");
+ eleventyConfig.addPassthroughCopy("techniques/*/img/*");
+ eleventyConfig.addPassthroughCopy({
+ "css/base.css": "techniques/base.css",
+ "css/a11y-light.css": "techniques/a11y-light.css",
+ "script/highlight.min.js": "techniques/highlight.min.js",
+ });
+
+ eleventyConfig.addPassthroughCopy("understanding/*.css");
+ eleventyConfig.addPassthroughCopy({
+ "guidelines/relative-luminance.html": "understanding/relative-luminance.html",
+ "understanding/*/img/*": "understanding/img", // Intentionally flatten
+ });
+
+ eleventyConfig.addPassthroughCopy("working-examples/**");
+
+ eleventyConfig.on("eleventy.before", async ({ runMode }: EleventyEvent) => {
+ // Clear the _site folder before builds intended for the W3C site,
+ // to avoid inheriting dev-only files from previous runs
+ if (runMode === "build" && process.env.WCAG_MODE === "publication") await rimraf("_site");
+ });
+
+ eleventyConfig.on("eleventy.after", async ({ dir }: EleventyEvent) => {
+ // addPassthroughCopy can only map each file once,
+ // but base.css needs to be copied to a 2nd destination
+ await copyFile(`${dir.input}/css/base.css`, `${dir.output}/understanding/base.css`);
+ });
+
+ eleventyConfig.setLibrary(
+ "liquid",
+ new CustomLiquid({
+ // See https://www.11ty.dev/docs/languages/liquid/#liquid-options
+ root: ["_includes", "."],
+ jsTruthy: true,
+ strictFilters: true,
+ })
+ );
+
+ // Filter that transforms a technique ID (or list of them) into links to their pages.
+ eleventyConfig.addFilter(
+ "linkTechniques",
+ function (this: EleventyContext, ids: string | string[]) {
+ const links = (Array.isArray(ids) ? ids : [ids]).map((id) => {
+ if (typeof id !== "string") throw new Error(`linkTechniques: invalid id ${id}`);
+ const technique = flatTechniques[id];
+ if (!technique) {
+ console.warn(
+ `linkTechniques in ${this.page.inputPath}: ` +
+ `skipping unresolvable technique id ${id}`
+ );
+ return;
+ }
+
+ // Omit links to obsolete techniques, when not also linked from one
+ if (
+ isTechniqueObsolete(technique) &&
+ !isTechniqueObsolete(flatTechniques[this.page.fileSlug]) &&
+ !isGuidelineObsolete(flatGuidelines[this.page.fileSlug])
+ ) {
+ if (process.env.WCAG_VERBOSE) {
+ const since = technique.obsoleteSince!.split("").join(".");
+ console.warn(
+ `linkTechniques in ${this.page.inputPath}: ` +
+ `skipping obsolete technique ${id} (as of ${since})`
+ );
+ }
+ return;
+ }
+
+ // Support relative technique links from other techniques or from techniques/index.html,
+ // otherwise path-absolute when cross-linked from understanding/*
+ const urlBase = /^\/techniques\/.*\//.test(this.page.filePathStem)
+ ? "../"
+ : this.page.filePathStem.startsWith("/techniques")
+ ? ""
+ : baseUrls.techniques;
+ const label = `${id}: ${technique.truncatedTitle}`;
+ return `${label}`;
+ });
+ return compact(links).join("\nand\n");
+ }
+ );
+
+ // Filter that transforms a guideline or SC shortname (or list of them) into links to their pages.
+ eleventyConfig.addFilter(
+ "linkUnderstanding",
+ function (this: EleventyContext, ids: string | string[]) {
+ return (Array.isArray(ids) ? ids : [ids])
+ .map((id) => {
+ if (typeof id !== "string") throw new Error("linkUnderstanding: invalid id passed");
+ const guideline = flatGuidelines[id];
+ if (!guideline) {
+ console.warn(
+ `linkUnderstanding in ${this.page.inputPath}: ` +
+ `skipping unresolvable guideline shortname ${id}`
+ );
+ return;
+ }
+
+ // Warn of links to obsolete SCs, when not also linked from one.
+ // This is intentionally not behind WCAG_VERBOSE, and does not remove,
+ // as links to Understanding docs are more likely to be in the middle
+ // of prose requiring manual adjustments
+ if (
+ isGuidelineObsolete(guideline) &&
+ !isGuidelineObsolete(flatGuidelines[this.page.fileSlug]) &&
+ !isTechniqueObsolete(flatTechniques[this.page.fileSlug])
+ ) {
+ console.warn(
+ `linkUnderstanding in ${this.page.inputPath}: ` +
+ `reference to obsolete ${guideline.type} ${id}`
+ );
+ }
+
+ const urlBase = this.page.filePathStem.startsWith("/understanding/")
+ ? ""
+ : baseUrls.understanding;
+ const label = `${guideline.num}: ${guideline.name}`;
+ return `${label}`;
+ })
+ .join("\nand\n");
+ }
+ );
+
+ // Renders a section box (used for About this Technique and Guideline / SC)
+ eleventyConfig.addPairedShortcode(
+ "sectionbox",
+ (content: string, id: string, title: string) => `
+
+
WCAG 2.2 extends Web Content Accessibility Guidelines 2.1 [[WCAG21]], which was published as a W3C Recommendation June 2018. Content that conforms to WCAG 2.2 also conforms to WCAG 2.0 and WCAG 2.1. The WG intends that for policies requiring conformance to WCAG 2.0 or WCAG 2.1, WCAG 2.2 can provide an alternate means of conformance. The publication of WCAG 2.2 does not deprecate or supersede WCAG 2.0 or WCAG 2.1. While WCAG 2.0 and WCAG 2.1 remain W3C Recommendations, the W3C advises the use of WCAG 2.2 to maximize future applicability of accessibility efforts. The W3C also encourages use of the most current version of WCAG when developing or updating Web accessibility policies.
To comment, file an issue in the W3C WCAG GitHub repository. Although the proposed Success Criteria in this document reference issues tracking discussion, the Working Group requests that public comments be filed as new issues, one issue per discrete comment. It is free to create a GitHub account to file issues. If filing issues in GitHub is not feasible, send email to public-agwg-comments@w3.org (comment archive).
+
To comment, file an issue in the
+ W3C WCAG GitHub repository.
+ Although the proposed Success Criteria in this document reference issues tracking
+ discussion, the Working Group requests that public comments be filed as new issues,
+ one issue per discrete comment. It is free to create a GitHub account to file issues.
+ If filing issues in GitHub is not feasible, send email to public-agwg-comments@w3.org (comment archive).
Introduction
-
+
Background on WCAG 2
Web Content Accessibility Guidelines (WCAG) 2.2 defines how to make Web content more accessible to people with disabilities. Accessibility involves a wide range of disabilities, including visual, auditory, physical, speech, cognitive, language, learning, and neurological disabilities. Although these guidelines cover a wide range of issues, they are not able to address the needs of people with all types, degrees, and combinations of disability. These guidelines also make Web content more usable by older individuals with changing abilities due to aging and often improve usability for users in general.
WCAG 2.2 is developed through the W3C process in cooperation with individuals and organizations around the world, with a goal of providing a shared standard for Web content accessibility that meets the needs of individuals, organizations, and governments internationally. WCAG 2.2 builds on WCAG 2.0 [[WCAG20]] and WCAG 2.1 [[WCAG21]], which in turn built on WCAG 1.0 [[WAI-WEBCONTENT]] and is designed to apply broadly to different Web technologies now and in the future, and to be testable with a combination of automated testing and human evaluation. For an introduction to WCAG, see the Web Content Accessibility Guidelines (WCAG) Overview.
@@ -38,82 +42,84 @@
Background on WCAG 2
Where this document refers to WCAG 2 it is intended to mean any and all versions of WCAG that start with 2.
-
+
WCAG 2 Layers of Guidance
The individuals and organizations that use WCAG vary widely and include Web designers and developers, policy makers, purchasing agents, teachers, and students. In order to meet the varying needs of this audience, several layers of guidance are provided including overall principles, general guidelines, testable success criteria and a rich collection of sufficient techniques, advisory techniques, and documented common failures with examples, resource links and code.
-
Principles - At the top are four principles that provide the foundation for Web accessibility: perceivable, operable, understandable, and robust. See also Understanding the Four Principles of Accessibility.
+
Principles - At the top are four principles that provide the foundation for Web accessibility: perceivable, operable, understandable, and robust. See also Understanding the Four Principles of Accessibility.
Guidelines - Under the principles are guidelines. The 13 guidelines provide the basic goals that authors should work toward in order to make content more accessible to users with different disabilities. The guidelines are not testable, but provide the framework and overall objectives to help authors understand the success criteria and better implement the techniques.
-
Success Criteria - For each guideline, testable success criteria are provided to allow WCAG 2.2 to be used where requirements and conformance testing are necessary such as in design specification, purchasing, regulation, and contractual agreements. In order to meet the needs of different groups and different situations, three levels of conformance are defined: A (lowest), AA, and AAA (highest). Additional information on WCAG levels can be found in Understanding Levels of Conformance.
+
Success Criteria - For each guideline, testable success criteria are provided to allow WCAG 2.2 to be used where requirements and conformance testing are necessary such as in design specification, purchasing, regulation, and contractual agreements. In order to meet the needs of different groups and different situations, three levels of conformance are defined: A (lowest), AA, and AAA (highest). Additional information on WCAG levels can be found in Understanding Levels of Conformance.
-
Sufficient and Advisory Techniques - For each of the guidelines and success criteria in the WCAG 2.2 document itself, the working group has also documented a wide variety of techniques. The techniques are informative and fall into two categories: those that are sufficient for meeting the success criteria and those that are advisory. The advisory techniques go beyond what is required by the individual success criteria and allow authors to better address the guidelines. Some advisory techniques address accessibility barriers that are not covered by the testable success criteria. Where common failures are known, these are also documented. See also Sufficient and Advisory Techniques in Understanding WCAG 2.2.
+
Sufficient and Advisory Techniques - For each of the guidelines and success criteria in the WCAG 2.2 document itself, the working group has also documented a wide variety of techniques. The techniques are informative and fall into two categories: those that are sufficient for meeting the success criteria and those that are advisory. The advisory techniques go beyond what is required by the individual success criteria and allow authors to better address the guidelines. Some advisory techniques address accessibility barriers that are not covered by the testable success criteria. Where common failures are known, these are also documented. See also Sufficient and Advisory Techniques in Understanding WCAG 2.2.
All of these layers of guidance (principles, guidelines, success criteria, and sufficient and advisory techniques) work together to provide guidance on how to make content more accessible. Authors are encouraged to view and apply all layers that they are able to, including the advisory techniques, in order to best address the needs of the widest possible range of users.
-
Note that even content that conforms at the highest level (AAA) will not be accessible to individuals with all types, degrees, or combinations of disability, particularly in the cognitive, language, and learning areas. Authors are encouraged to consider the full range of techniques, including the advisory techniques, as well as to seek relevant advice about current best practice to ensure that Web content is accessible, as far as possible, to this community. Metadata may assist users in finding content most suitable for their needs.
+
Note that even content that conforms at the highest level (AAA) will not be accessible to individuals with all types, degrees, or combinations of disability, particularly in the cognitive, language, and learning areas. Authors are encouraged to consider the full range of techniques, including the advisory techniques, Making Content Usable for People with Cognitive and Learning Disabilities, as well as to seek relevant advice about current best practice to ensure that Web content is accessible, as far as possible, to this community. Metadata may assist users in finding content most suitable for their needs.
-
+
WCAG 2.2 Supporting Documents
The WCAG 2.2 document is designed to meet the needs of those who need a stable, referenceable technical standard. Other documents, called supporting documents, are based on the WCAG 2.2 document and address other important purposes, including the ability to be updated to describe how WCAG would be applied with new technologies. Supporting documents include:
-
How to Meet WCAG 2.2 - A customizable quick reference to WCAG 2.2 that includes all of the guidelines, success criteria, and techniques for authors to use as they are developing and evaluating Web content. This includes content from WCAG 2.0, 2.1 2.2 and can be filtered in many ways to help authors focus on relevant content.
+
How to Meet WCAG 2.2 - A customizable quick reference to WCAG 2.2 that includes all of the guidelines, success criteria, and techniques for authors to use as they are developing and evaluating Web content. This includes content from WCAG 2.0, 2.1 2.2 and can be filtered in many ways to help authors focus on relevant content.
-
Understanding WCAG 2.2 - A guide to understanding and implementing WCAG 2.2. There is a short "Understanding" document for each guideline and success criterion in WCAG 2.2 as well as key topics.
+
Understanding WCAG 2.2 - A guide to understanding and implementing WCAG 2.2. There is a short "Understanding" document for each guideline and success criterion in WCAG 2.2 as well as key topics.
-
Techniques for WCAG 2.2 - A collection of techniques and common failures, each in a separate document that includes a description, examples, code and tests.
+
Techniques for WCAG 2.2 - A collection of techniques and common failures, each in a separate document that includes a description, examples, code and tests.
-
The WCAG Documents - A diagram and description of how the technical documents are related and linked.
+
The WCAG 2 Documents - A brief introduction to the WCAG 2 supporting documents and supplemental guidance.
+
What's New in WCAG 2.2 introduces the new success criteria with persona quotes that illustrate the accessibility issues.
See Web Content Accessibility Guidelines (WCAG) Overview for a description of the WCAG 2.2 supporting material, including education resources related to WCAG 2. Additional resources covering topics such as the business case for Web accessibility, planning implementation to improve the accessibility of Web sites, and accessibility policies are listed in WAI Resources.
-
+
Requirements for WCAG 2.2
WCAG 2.2 meets a set of requirements for WCAG 2.2 which, in turn, inherit requirements from previous WCAG 2 versions. Requirements structure the overall framework of guidelines and ensure backwards compatibility. The Working Group also used a less formal set of acceptance criteria for success criteria, to help ensure success criteria are similar in style and quality to those in WCAG 2.0. These requirements constrained what could be included in WCAG 2.2. This constraint was important to preserve its nature as a dot-release of WCAG 2.
-
+
Comparison with WCAG 2.1
WCAG 2.2 was initiated with the goal to continue the work of WCAG 2.1: Improving accessibility guidance for three major groups: users with cognitive or learning disabilities, users with low vision, and users with disabilities on mobile devices. Many ways to meet these needs were proposed and evaluated, and a set of these were refined by the Working Group. Structural requirements inherited from WCAG 2.0, clarity and impact of proposals, and timeline led to the final set of success criteria included in this version. The Working Group considers that WCAG 2.2 incrementally advances web content accessibility guidance for all these areas, but underscores that not all user needs are met by these guidelines.
-
WCAG 2.2 builds on and is backwards compatible with WCAG 2.1, meaning web pages that conform to WCAG 2.2 also conform to WCAG 2.1, which would also conform to WCAG 2.0. Authors that are required by policy to conform with WCAG 2.0 or 2.1 will be able to update content to WCAG 2.2 without losing conformance with previous versions. Authors following more than one version of the guidelines should be aware of the following differences:
-
+
WCAG 2.2 builds on and is backwards compatible with WCAG 2.1, meaning web pages that conform to WCAG 2.2 are at least as accessible as pages that conform to WCAG 2.1. Requirements have been added that build on 2.1 and 2.0. WCAG 2.2 has removed one success criterion, 4.1.1 Parsing. Authors that are required by policy to conform with WCAG 2.0 or 2.1 will be able to update content to WCAG 2.2, but may need to continue to test and report 4.1.1. Authors following more than one version of the guidelines should be aware of the following additions.
+
New Features in WCAG 2.2
WCAG 2.2 extends WCAG 2.1 by adding new success criteria, definitions to support them, and guidelines to organize the additions. This additive approach helps to make it clear that sites which conform to WCAG 2.2 also conform to WCAG 2.1. The Accessibility Guidelines Working Group recommends that sites adopt WCAG 2.2 as their new conformance target, even if formal obligations mention previous versions, to provide improved accessibility and to anticipate future policy changes.
-
The following Success Criteria are new in WCAG 2.2:
The new success criteria may reference new terms that have also been added to the glossary and form part of the normative requirements of the success criteria.
-
In addition to the above new Success Criteria, Focus Visible has been promoted from Level AA to Level A.
+
WCAG 2.2 also introduces new sections detailing aspects of the specification which may impact privacy and security.
+
-
+
Numbering in WCAG 2.2
-
In order to avoid confusion for implementers for whom backwards compatibility to WCAG 2 versions is important, new success criteria in WCAG 2.2 have been appended to the end of the set of success criteria within their guideline. This avoids the need to change the section number of success criteria from WCAG 2, which would be caused by inserting new success criteria between existing success criteria in the guideline, but it means success criteria in each guideline are no longer grouped by conformance level. The order of success criteria within each guideline does not imply information about conformance level; only the conformance level indicator (A / AA / AAA) on the success criterion itself indicates this. The WCAG 2.2 Quick Reference will provide a way to view success criteria grouped by conformance level, along with many other filter and sort options.
+
In order to avoid confusion for implementers for whom backwards compatibility to WCAG 2 versions is important, new success criteria in WCAG 2.2 have been appended to the end of the set of success criteria within their guideline. This avoids the need to change the section number of success criteria from WCAG 2, which would be caused by inserting new success criteria between existing success criteria in the guideline, but it means success criteria in each guideline are no longer grouped by conformance level. The order of success criteria within each guideline does not imply information about conformance level; only the conformance level indicator (A / AA / AAA) on the success criterion itself indicates this. The WCAG 2.2 Quick Reference will provide a way to view success criteria grouped by conformance level, along with many other filter and sort options.
-
+
Conformance to WCAG 2.2
WCAG 2.2 uses the same conformance model as WCAG 2.0. It is intended that sites that conform to WCAG 2.2 also conform to WCAG 2.0 and WCAG 2.1, which means they meet the requirements of any policies that reference WCAG 2.0 or WCAG 2.1, while also better meeting the needs of users on the current Web.
-
+
Later Versions of Accessibility Guidelines
In parallel with WCAG 2.2, the Accessibility Guidelines Working Group is developing another major version of accessibility guidelines. The result of this work is expected to be a more substantial restructuring of web accessibility guidance than would be realistic for dot-releases of WCAG 2. The work follows a research-focused, user-centered design methodology to produce the most effective and flexible outcome, including the roles of content authoring, user agent support, and authoring tool support. This is a multi-year effort, so WCAG 2.2 is needed as an interim measure to provide updated web accessibility guidance to reflect changes on the web since the publication of WCAG 2.0. The Working Group might also develop additional interim versions, continuing with WCAG 2.2, on a similar short timeline to provide additional support while the major version is completed.
@@ -122,14 +128,14 @@
Later Versions of Accessibility Guidelines
Perceivable
Information and user interface components must be presentable to users in ways they can perceive.
-
+
Text Alternatives
Provide text alternatives for any non-text content so that it can be changed into other forms people need, such as large print, braille, speech, symbols or simpler language.
-
+
Time-based Media
Provide alternatives for time-based media.
@@ -152,7 +158,7 @@
Time-based Media
-
+
Adaptable
Create content that can be presented in different ways (for example simpler layout) without losing information or structure.
@@ -170,7 +176,7 @@
Adaptable
-
+
Distinguishable
Make it easier for users to see and hear content including separating foreground from background.
@@ -207,7 +213,7 @@
Distinguishable
Operable
User interface components and navigation must be operable.
-
+
Keyboard Accessible
Make all functionality available from a keyboard.
@@ -221,7 +227,7 @@
Keyboard Accessible
-
+
Enough Time
Provide users enough time to read and use content.
@@ -239,7 +245,7 @@
Enough Time
-
+
Seizures and Physical Reactions
Do not design content in a way that is known to cause seizures or physical reactions.
@@ -251,7 +257,7 @@
Seizures and Physical Reactions
-
+
Navigable
Provide ways to help users navigate, find content, and determine where they are.
@@ -267,7 +273,7 @@
Navigable
-
+
@@ -275,15 +281,15 @@
Navigable
-
+
-
+
-
+
-
+
Input Modalities
Make it easier for users to operate functionality through various inputs beyond keyboard.
@@ -295,13 +301,13 @@
Input Modalities
-
+
-
+
-
+
@@ -310,7 +316,7 @@
Input Modalities
Understandable
Information and the operation of the user interface must be understandable.
-
+
Readable
Make text content readable and understandable.
@@ -328,7 +334,7 @@
Readable
-
+
Predictable
Make Web pages appear and operate in predictable ways.
@@ -342,13 +348,11 @@
Predictable
-
-
-
+
-
+
Input Assistance
Help users avoid and correct mistakes.
@@ -363,10 +367,12 @@
Input Assistance
-
-
+
+
+
+
@@ -375,7 +381,7 @@
Input Assistance
Robust
Content must be robust enough that it can be interpreted by a wide variety of user agents, including assistive technologies.
-
+
Compatible
Maximize compatibility with current and future user agents, including assistive technologies.
@@ -391,9 +397,9 @@
Compatible
Conformance
-
This section lists requirements for conformance to WCAG 2.2. It also gives information about how to make conformance claims, which are optional. Finally, it describes what it means to be accessibility supported, since only accessibility-supported ways of using technologies can be relied upon for conformance. Understanding Conformance includes further explanation of the accessibility-supported concept.
+
This section lists requirements for conformance to WCAG 2.2. It also gives information about how to make conformance claims, which are optional. Finally, it describes what it means to be accessibility supported, since only accessibility-supported ways of using technologies can be relied upon for conformance. Understanding Conformance includes further explanation of the accessibility-supported concept.
-
+
Interpreting Normative Requirements
The main content of WCAG 2.2 is normative and defines requirements that impact conformance claims. Introductory material, appendices, sections marked as "non-normative", diagrams, examples, and notes are informative (non-normative). Non-normative material provides advisory information to help interpret the guidelines but does not create requirements that impact a conformance claim.
@@ -409,10 +415,10 @@
Conformance Requirements
Conformance Level
One of the following levels of conformance is met in full.
-
For Level A conformance (the minimum level of conformance), the Web page
+
For Level AA conformance, the Web page satisfies all the Level A and Level AA Success Criteria, or a Level AA conforming alternate version is provided.
-
For Level AAA conformance, the Web page satisfies all the Level A, Level AA and Level AAA Success Criteria, or a Level AAA conforming alternate version is provided.
+
For Level AA conformance, the Web page satisfies all the Level A and Level AA Success Criteria, or a Level AA conforming alternate version is provided.
+
For Level AAA conformance, the Web page satisfies all the Level A, Level AA and Level AAA Success Criteria, or a Level AAA conforming alternate version is provided.
Although conformance can only be achieved at the stated levels, authors are encouraged to report (in their claim) any progress toward meeting success criteria from all levels beyond the achieved level of conformance.
It is not recommended that Level AAA conformance be required as a general policy for entire sites because it is not possible to satisfy all Level AAA Success Criteria for some content.
@@ -431,14 +437,14 @@
Full pages
Complete processes
When a Web page is one of a series of Web pages presenting a process (i.e., a sequence of steps that need to be completed in order to accomplish an activity), all Web pages in the process conform at the specified level or better. (Conformance is not possible at a particular level if any page in the process does not conform at that level or better.)
-
An online store has a series of pages that are used to select and purchase products. All pages in the series from start to finish (checkout) conform in order for any page that is part of the process to conform.
+
Only Accessibility-Supported Ways of Using Technologies
If a page cannot conform (for example, a conformance test page or an example page), it cannot be included in the scope of conformance or in a conformance claim.
Refer to Understanding Metadata for more information about the use of metadata in conformance claims.
Statement of Partial Conformance - Third Party Content
-
Sometimes, Web pages are created that will later have additional content added to them. For example, an email program, a blog, an article that allows users to add comments, or applications supporting user-contributed content. Another example would be a page, such as a portal or news site, composed of content aggregated from multiple contributors, or sites that automatically insert content from other sources over time, such as when advertisements are inserted dynamically.
+
Web pages that will later have additional content added can use a 'statement of partial conformance'. For example, an email program, a blog, an article that allows users to add comments, or applications supporting user-contributed content. Another example would be a page, such as a portal or news site, composed of content aggregated from multiple contributors, or sites that automatically insert content from other sources over time, such as when advertisements are inserted dynamically.
In these cases, it is not possible to know at the time of original posting what the uncontrolled content of the pages will be. It is important to note that the uncontrolled content can affect the accessibility of the controlled content as well. Two options are available:
@@ -531,6 +537,36 @@
Statement of Partial Conformance - Language
A "statement of partial conformance due to language" may be made when the page does not conform, but would conform if accessibility support existed for (all of) the language(s) used on the page. The form of that statement would be, "This page does not conform, but would conform to WCAG 2.2 at level X if accessibility support existed for the following language(s):"
+
+
Privacy Considerations
+
Success Criteria within this specification which the Working Group has identified possible implications for privacy, either by providing protections for end users or which are important for web site providers to take in to consideration when implementing features designed to protect user privacy, are listed below. This list reflects the current understanding of the Working Group but other Success Criteria may have privacy implications that the Working Group is not aware of at the time of publishing.
+
Success Criteria within this specification that may relate to privacy are:
Success Criteria within this specification which the Working Group has identified possible implications for security, either by providing protections for end users or which are important for web site providers to take in to consideration when implementing features designed to protect user security, are listed below. This list reflects the current understanding of the Working Group but other Success Criteria may have security implications that the Working Group is not aware of at the time of publishing.
+
Success Criteria within this specification that may relate to security are:
This section contains a listing of common user interface component input purposes. The terms below are not keywords that must be used, but instead represent purposes that must be captured in the taxonomy adopted by a webpage. Where applicable, authors mark up controls with the chosen taxonomy to indicate the semantic purpose. This provides the potential for user agents and assistive technologies to apply personalized presentations that can enable more people to understand and use the content.
-
The list of input type purposes is based on the control purposes defined in the HTML 5.2 Autofill field section, but it is important to understand that a different technology may have some or all of the same concepts defined in its specification and only the concepts that are mapped to the meanings below are required.
+
The list of input type purposes is based on the control purposes defined in the HTML specification's Autofill section, but it is important to understand that a different technology may have some or all of the same concepts defined in its specification and only the concepts that are mapped to the meanings below are required.
The following input control purposes are intended to relate to the user of the content and pertain only to information related to that individual.
@@ -47,7 +47,7 @@
Input Purposes for User Interface Components
bday-day - Day component of birthday
bday-month - Month component of birthday
bday-year - Year component of birthday
-
sex - Gender identity (e.g., Female, Fa’afafine)
+
sex - Gender identity (e.g., Female, Fa’afafine)
url - Home page or other Web page corresponding to the company, person, address, or contact information in the other fields associated with this field
photo - Photograph, icon, or other image corresponding to the company, person, address, or contact information in the other fields associated with this field
tel - Full telephone number, including country code
diff --git a/guidelines/relative-luminance.html b/guidelines/relative-luminance.html
new file mode 100644
index 0000000000..ed65eb01df
--- /dev/null
+++ b/guidelines/relative-luminance.html
@@ -0,0 +1,361 @@
+
+
+
+
+
+ MathML version of the relative luminance definition
+
+
+
MathML version of the relative luminance definition
Before May 2021 the value of 0.04045 in the definition was different (0.03928). It was taken from an older version of the specification and has been updated. It has no practical effect on the calculations in the context of these guidelines.
+
+
Note
Almost all systems used today to view Web content assume sRGB encoding. Unless it
+ is known that another color space will be used to process and display the content,
+ authors should evaluate using sRGB colorspace. If using other color spaces, see Understanding Success Criterion 1.4.3.
+
+
+
Note
If dithering occurs after delivery, then the source color value is used. For colors
+ that are dithered at the source, the average values of the colors that are dithered
+ should be used (average R, average G, and average B).
+
+
+
Note
Tools are available that automatically do the calculations when testing contrast and
+ flash.
+
Note 2: Almost all systems used today to view Web content assume sRGB encoding. Unless it is known that another color space will be used to process and display the content, authors should evaluate using sRGB colorspace. If using other color spaces, see Understanding Success Criterion 1.4.3.
-
Note 3: If dithering occurs after delivery, then the source color value is used. For colors that are dithered at the source, the average values of the colors that are dithered should be used (average R, average G, and average B).
-
Note 4: Tools are available that automatically do the calculations when testing contrast and flash.
-
-
-
-
-
-
diff --git a/guidelines/respec-config.js b/guidelines/respec-config.js
index 09acebd9b5..a6189081a5 100644
--- a/guidelines/respec-config.js
+++ b/guidelines/respec-config.js
@@ -11,7 +11,7 @@ var respecConfig = {
specStatus: "ED",
//crEnd: "2012-04-30",
//perEnd: "2013-07-23",
- //publishDate: "2013-08-22",
+ publishDate: "2023-10-05",
diffTool: "http://www.aptest.com/standards/htmldiff/htmldiff.pl",
// the specifications short name, as in https://www.w3.org/TR/short-name/
@@ -27,7 +27,7 @@ var respecConfig = {
// and its maturity status
//previousPublishDate: "2014-06-12",
//previousMaturity: "WD",
- prevRecURI: "https://www.w3.org/TR/WCAG/",
+ prevRecURI: "https://www.w3.org/TR/WCAG21/",
//previousDiffURI: "https://www.w3.org/TR/2014/REC-wai-aria-20140320/",
// if there a publicly available Editors Draft, this is the link
@@ -39,39 +39,40 @@ var respecConfig = {
// editors, add as many as you like
// only "name" is required
editors: [
- {
- name: "Chuck Adams",
- url: "https://www.oracle.com/",
- mailto: "charles.adams@oracle.com",
- company: "Oracle",
- companyURI: "https://www.oracle.com/",
- w3cid: 104852
- },
{
name: "Alastair Campbell",
- url: "https://www.nomensa.com/",
+ //url: "https://www.nomensa.com/",
mailto: "acampbell@nomensa.com",
company: "Nomensa",
companyURI: "https://www.nomensa.com/",
w3cid: 44689
},
{
- name: "Rachael Montgomery",
+ name: "Chuck Adams",
+ //url: "https://www.oracle.com/",
+ mailto: "charles.adams@oracle.com",
+ company: "Oracle",
+ companyURI: "https://www.oracle.com/",
+ w3cid: 104852
+ },
+ {
+ name: "Rachael Bradley Montgomery",
mailto: "rachael@accessiblecommunity.org",
- company: "Invited Expert",
+ company: "Library of Congress",
+ companyURI: "https://loc.gov/",
w3cid: 90310
},
{
name: "Michael Cooper",
- url: 'https://www.w3.org',
- mailto: "cooper@w3.org",
+ url: 'https://www.w3.org/People/cooper',
+ //mailto: "cooper@w3.org",
company: "W3C",
companyURI: "https://www.w3.org",
w3cid: 34017
},
{
name: "Andrew Kirkpatrick",
- url: "http://www.adobe.com/",
+ //url: "http://www.adobe.com/",
mailto: "akirkpat@adobe.com",
company: "Adobe",
companyURI: "http://www.adobe.com/",
@@ -135,25 +136,15 @@ var respecConfig = {
],
*/
- // errata: 'https://www.w3.org/2010/02/rdfa/errata.html',
+ errata: 'https://www.w3.org/WAI/WCAG22/errata/',
+ implementationReportURI: 'https://www.w3.org/WAI/WCAG22/implementation-report/',
// name of the WG
- wg: "Accessibility Guidelines Working Group",
-
- // URI of the public WG page
- wgURI: "https://www.w3.org/WAI/GL/",
-
- // name (with the @w3c.org) of the public mailing to which comments are due
- wgPublicList: "public-agwg-comments",
-
- // URI of the patent status for this WG, for Rec-track documents
- // !!!! IMPORTANT !!!!
- // This is important for Rec-track documents, do not copy a patent URI from a random
- // document unless you know what you're doing. If in doubt ask your friendly neighbourhood
- // Team Contact.
- wgPatentURI: "https://www.w3.org/2004/01/pp-impl/35422/status",
+ group: "ag",
+ github: "w3c/wcag",
+
maxTocLevel: 4,
- postProcess: [addTextSemantics, swapInDefinitions]
+ postProcess: [postRespec]
};
diff --git a/guidelines/sc/20/abbreviations.html b/guidelines/sc/20/abbreviations.html
index 69d85cf406..81f0d0be8b 100644
--- a/guidelines/sc/20/abbreviations.html
+++ b/guidelines/sc/20/abbreviations.html
@@ -1,4 +1,4 @@
-
+
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/audio-control.html b/guidelines/sc/20/audio-control.html
index 7819ff6eef..aaccda2077 100644
--- a/guidelines/sc/20/audio-control.html
+++ b/guidelines/sc/20/audio-control.html
@@ -1,4 +1,4 @@
-
+
Audio Control
@@ -13,4 +13,4 @@
Audio Control
to meet other success criteria) must meet this success criterion. See Conformance Requirement 5: Non-Interference.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/audio-description-or-media-alternative-prerecorded.html b/guidelines/sc/20/audio-description-or-media-alternative-prerecorded.html
index fc1b009b9b..9198805452 100644
--- a/guidelines/sc/20/audio-description-or-media-alternative-prerecorded.html
+++ b/guidelines/sc/20/audio-description-or-media-alternative-prerecorded.html
@@ -1,4 +1,4 @@
-
+
Audio Description or Media Alternative (Prerecorded)
@@ -8,4 +8,4 @@
Audio Description or Media Alternative (Prerecorded)
video content is provided for synchronized media, except when the media is a media alternative for text and is clearly labeled as such.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/audio-description-prerecorded.html b/guidelines/sc/20/audio-description-prerecorded.html
index e69ba4569d..d745a2467c 100644
--- a/guidelines/sc/20/audio-description-prerecorded.html
+++ b/guidelines/sc/20/audio-description-prerecorded.html
@@ -1,4 +1,4 @@
-
+
Audio Description (Prerecorded)
@@ -8,4 +8,4 @@
Audio Description (Prerecorded)
video content in synchronized media.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/audio-only-and-video-only-prerecorded.html b/guidelines/sc/20/audio-only-and-video-only-prerecorded.html
index fea1d134f7..1d00f0b00f 100644
--- a/guidelines/sc/20/audio-only-and-video-only-prerecorded.html
+++ b/guidelines/sc/20/audio-only-and-video-only-prerecorded.html
@@ -1,4 +1,4 @@
-
+
Audio-only and Video-only (Prerecorded)
@@ -31,4 +31,4 @@
Audio-only and Video-only (Prerecorded)
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/audio-only-live.html b/guidelines/sc/20/audio-only-live.html
index 4df1345cb4..f901051281 100644
--- a/guidelines/sc/20/audio-only-live.html
+++ b/guidelines/sc/20/audio-only-live.html
@@ -1,4 +1,4 @@
-
+
Audio-only (Live)
@@ -8,4 +8,4 @@
Audio-only (Live)
audio-only content is provided.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/bypass-blocks.html b/guidelines/sc/20/bypass-blocks.html
index 4bfedd4f72..5e33982b78 100644
--- a/guidelines/sc/20/bypass-blocks.html
+++ b/guidelines/sc/20/bypass-blocks.html
@@ -1,4 +1,4 @@
-
+
Bypass Blocks
@@ -7,4 +7,4 @@
Bypass Blocks
A mechanism is available to bypass blocks of content that are repeated on multiple Web pages.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/captions-live.html b/guidelines/sc/20/captions-live.html
index a46694ddc8..402d85f656 100644
--- a/guidelines/sc/20/captions-live.html
+++ b/guidelines/sc/20/captions-live.html
@@ -1,4 +1,4 @@
-
+
Captions (Live)
@@ -8,4 +8,4 @@
Captions (Live)
audio content in synchronized media.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/captions-prerecorded.html b/guidelines/sc/20/captions-prerecorded.html
index eb2f8a4349..0d9206873f 100644
--- a/guidelines/sc/20/captions-prerecorded.html
+++ b/guidelines/sc/20/captions-prerecorded.html
@@ -1,4 +1,4 @@
-
+
Captions (Prerecorded)
@@ -8,4 +8,4 @@
Captions (Prerecorded)
audio content in synchronized media, except when the media is a media alternative for text and is clearly labeled as such.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/change-on-request.html b/guidelines/sc/20/change-on-request.html
index bfb87593cc..f5d09acf56 100644
--- a/guidelines/sc/20/change-on-request.html
+++ b/guidelines/sc/20/change-on-request.html
@@ -1,4 +1,4 @@
-
+
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/consistent-navigation.html b/guidelines/sc/20/consistent-navigation.html
index 7a811663da..a1df5d4e8a 100644
--- a/guidelines/sc/20/consistent-navigation.html
+++ b/guidelines/sc/20/consistent-navigation.html
@@ -1,4 +1,4 @@
-
+
Consistent Navigation
@@ -7,4 +7,4 @@
Consistent Navigation
Navigational mechanisms that are repeated on multiple Web pages within a set of Web pages occur in the same relative order each time they are repeated, unless a change is initiated by the user.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/contrast-enhanced.html b/guidelines/sc/20/contrast-enhanced.html
index d25475c349..ba07a2a4db 100644
--- a/guidelines/sc/20/contrast-enhanced.html
+++ b/guidelines/sc/20/contrast-enhanced.html
@@ -1,4 +1,4 @@
-
+
Contrast (Enhanced)
@@ -38,4 +38,4 @@
Contrast (Enhanced)
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/contrast-minimum.html b/guidelines/sc/20/contrast-minimum.html
index 5c022a6e29..744d7f328e 100644
--- a/guidelines/sc/20/contrast-minimum.html
+++ b/guidelines/sc/20/contrast-minimum.html
@@ -1,4 +1,4 @@
-
+
Contrast (Minimum)
@@ -38,4 +38,4 @@
Contrast (Minimum)
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/error-identification.html b/guidelines/sc/20/error-identification.html
index 2f82a6451d..b9549982e5 100644
--- a/guidelines/sc/20/error-identification.html
+++ b/guidelines/sc/20/error-identification.html
@@ -1,4 +1,4 @@
-
+
Error Identification
@@ -8,4 +8,4 @@
Error Identification
is described to the user in text.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/error-prevention-all.html b/guidelines/sc/20/error-prevention-all.html
index 93729b2349..8fb05bb90e 100644
--- a/guidelines/sc/20/error-prevention-all.html
+++ b/guidelines/sc/20/error-prevention-all.html
@@ -1,4 +1,4 @@
-
+
content.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/extended-audio-description-prerecorded.html b/guidelines/sc/20/extended-audio-description-prerecorded.html
index 8de6068583..df481c5bce 100644
--- a/guidelines/sc/20/extended-audio-description-prerecorded.html
+++ b/guidelines/sc/20/extended-audio-description-prerecorded.html
@@ -1,4 +1,4 @@
-
+
Extended Audio Description (Prerecorded)
@@ -8,4 +8,4 @@
Extended Audio Description (Prerecorded)
video content in synchronized media.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/focus-order.html b/guidelines/sc/20/focus-order.html
index 7812b66fb1..5c36ef43f5 100644
--- a/guidelines/sc/20/focus-order.html
+++ b/guidelines/sc/20/focus-order.html
@@ -1,4 +1,4 @@
-
+
Focus Order
@@ -8,4 +8,4 @@
Focus Order
focus in an order that preserves meaning and operability.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/focus-visible.html b/guidelines/sc/20/focus-visible.html
index f713575cde..ca4d3a7f90 100644
--- a/guidelines/sc/20/focus-visible.html
+++ b/guidelines/sc/20/focus-visible.html
@@ -1,4 +1,4 @@
-
+
Focus Visible
@@ -8,4 +8,4 @@
Focus Visible
indicator is visible.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/headings-and-labels.html b/guidelines/sc/20/headings-and-labels.html
index 5314be40f0..eed1dd8f69 100644
--- a/guidelines/sc/20/headings-and-labels.html
+++ b/guidelines/sc/20/headings-and-labels.html
@@ -1,4 +1,4 @@
-
+
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/interruptions.html b/guidelines/sc/20/interruptions.html
index 26efc63e40..643cfc8aba 100644
--- a/guidelines/sc/20/interruptions.html
+++ b/guidelines/sc/20/interruptions.html
@@ -1,4 +1,4 @@
-
+
Interruptions
@@ -8,4 +8,4 @@
Interruptions
an emergency.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/keyboard-no-exception.html b/guidelines/sc/20/keyboard-no-exception.html
index 329925c44a..0a9b50e934 100644
--- a/guidelines/sc/20/keyboard-no-exception.html
+++ b/guidelines/sc/20/keyboard-no-exception.html
@@ -1,4 +1,4 @@
-
+
Keyboard (No Exception)
@@ -7,4 +7,4 @@
Keyboard (No Exception)
All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/keyboard.html b/guidelines/sc/20/keyboard.html
index 6a25f30c6e..e8551282e7 100644
--- a/guidelines/sc/20/keyboard.html
+++ b/guidelines/sc/20/keyboard.html
@@ -1,4 +1,4 @@
-
+
Keyboard
@@ -18,4 +18,4 @@
Keyboard
methods in addition to keyboard operation.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/labels-or-instructions.html b/guidelines/sc/20/labels-or-instructions.html
index 0390b419c2..858bad6b7c 100644
--- a/guidelines/sc/20/labels-or-instructions.html
+++ b/guidelines/sc/20/labels-or-instructions.html
@@ -1,4 +1,4 @@
-
+
Labels or Instructions
@@ -7,4 +7,4 @@
Labels or Instructions
Labels or instructions are provided when content requires user input.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/language-of-page.html b/guidelines/sc/20/language-of-page.html
index 0814f0cad2..c921129756 100644
--- a/guidelines/sc/20/language-of-page.html
+++ b/guidelines/sc/20/language-of-page.html
@@ -1,4 +1,4 @@
-
+
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/language-of-parts.html b/guidelines/sc/20/language-of-parts.html
index d3547dd808..52425fc1cf 100644
--- a/guidelines/sc/20/language-of-parts.html
+++ b/guidelines/sc/20/language-of-parts.html
@@ -1,4 +1,4 @@
-
+
Language of Parts
@@ -9,4 +9,4 @@
Language of Parts
text.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/link-purpose-in-context.html b/guidelines/sc/20/link-purpose-in-context.html
index 7e1bb6a9ef..5e2f1b3bc6 100644
--- a/guidelines/sc/20/link-purpose-in-context.html
+++ b/guidelines/sc/20/link-purpose-in-context.html
@@ -1,4 +1,4 @@
-
+
Link Purpose (In Context)
@@ -8,4 +8,4 @@
Link Purpose (In Context)
programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/link-purpose-link-only.html b/guidelines/sc/20/link-purpose-link-only.html
index a88dcbd75b..e14105120f 100644
--- a/guidelines/sc/20/link-purpose-link-only.html
+++ b/guidelines/sc/20/link-purpose-link-only.html
@@ -1,4 +1,4 @@
-
+
Link Purpose (Link Only)
@@ -8,4 +8,4 @@
Link Purpose (Link Only)
except where the purpose of the link would be ambiguous to users in general.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/location.html b/guidelines/sc/20/location.html
index c1dbe431a2..c7cb164b4f 100644
--- a/guidelines/sc/20/location.html
+++ b/guidelines/sc/20/location.html
@@ -1,4 +1,4 @@
-
+
Location
@@ -7,4 +7,4 @@
Location
Information about the user's location within a set of Web pages is available.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/low-or-no-background-audio.html b/guidelines/sc/20/low-or-no-background-audio.html
index 82e25e9c14..1ff644ff39 100644
--- a/guidelines/sc/20/low-or-no-background-audio.html
+++ b/guidelines/sc/20/low-or-no-background-audio.html
@@ -1,4 +1,4 @@
-
+
Low or No Background Audio
@@ -44,4 +44,4 @@
Low or No Background Audio
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/meaningful-sequence.html b/guidelines/sc/20/meaningful-sequence.html
index 360daf22c1..b7e883529e 100644
--- a/guidelines/sc/20/meaningful-sequence.html
+++ b/guidelines/sc/20/meaningful-sequence.html
@@ -1,4 +1,4 @@
-
+
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/media-alternative-prerecorded.html b/guidelines/sc/20/media-alternative-prerecorded.html
index 14d48af444..70776c8793 100644
--- a/guidelines/sc/20/media-alternative-prerecorded.html
+++ b/guidelines/sc/20/media-alternative-prerecorded.html
@@ -1,4 +1,4 @@
-
+
Media Alternative (Prerecorded)
@@ -8,4 +8,4 @@
Media Alternative (Prerecorded)
synchronized media and for all prerecorded video-only media.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/multiple-ways.html b/guidelines/sc/20/multiple-ways.html
index 4d04968bf1..0b66078a99 100644
--- a/guidelines/sc/20/multiple-ways.html
+++ b/guidelines/sc/20/multiple-ways.html
@@ -1,4 +1,4 @@
-
+
Multiple Ways
@@ -7,4 +7,4 @@
Multiple Ways
More than one way is available to locate a Web page within a set of Web pages except where the Web Page is the result of, or a step in, a process.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/name-role-value.html b/guidelines/sc/20/name-role-value.html
index 6b33b878b0..b3ce49a363 100644
--- a/guidelines/sc/20/name-role-value.html
+++ b/guidelines/sc/20/name-role-value.html
@@ -1,4 +1,4 @@
-
+
Name, Role, Value
@@ -13,4 +13,4 @@
Name, Role, Value
criterion when used according to specification.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/no-keyboard-trap.html b/guidelines/sc/20/no-keyboard-trap.html
index 18a44d412d..89d917165d 100644
--- a/guidelines/sc/20/no-keyboard-trap.html
+++ b/guidelines/sc/20/no-keyboard-trap.html
@@ -1,4 +1,4 @@
-
+
No Keyboard Trap
@@ -14,4 +14,4 @@
No Keyboard Trap
meet other success criteria or not) must meet this success criterion. See Conformance Requirement 5: Non-Interference.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/no-timing.html b/guidelines/sc/20/no-timing.html
index d4c9a10d26..60cd26bcbe 100644
--- a/guidelines/sc/20/no-timing.html
+++ b/guidelines/sc/20/no-timing.html
@@ -1,4 +1,4 @@
-
+
No Timing
@@ -8,4 +8,4 @@
No Timing
synchronized media and real-time events.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/non-text-content.html b/guidelines/sc/20/non-text-content.html
index d1784e6606..bc59554336 100644
--- a/guidelines/sc/20/non-text-content.html
+++ b/guidelines/sc/20/non-text-content.html
@@ -1,4 +1,4 @@
-
+
Non-text Content
@@ -73,4 +73,4 @@
Non-text Content
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/on-focus.html b/guidelines/sc/20/on-focus.html
index 5a0ef0e854..9dee57a1dd 100644
--- a/guidelines/sc/20/on-focus.html
+++ b/guidelines/sc/20/on-focus.html
@@ -1,4 +1,4 @@
-
+
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/on-input.html b/guidelines/sc/20/on-input.html
index 71636a5660..598b7a208b 100644
--- a/guidelines/sc/20/on-input.html
+++ b/guidelines/sc/20/on-input.html
@@ -1,4 +1,4 @@
-
+
On Input
@@ -7,4 +7,4 @@
On Input
Changing the setting of any user interface component does not automatically cause a change of context unless the user has been advised of the behavior before using the component.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/page-titled.html b/guidelines/sc/20/page-titled.html
index 2ea135f000..7acb97e16d 100644
--- a/guidelines/sc/20/page-titled.html
+++ b/guidelines/sc/20/page-titled.html
@@ -1,4 +1,4 @@
-
+
Page Titled
@@ -7,4 +7,4 @@
Page Titled
Web pages have titles that describe topic or purpose.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/parsing.html b/guidelines/sc/20/parsing.html
index dc5b0dce40..1eeb7d4b56 100644
--- a/guidelines/sc/20/parsing.html
+++ b/guidelines/sc/20/parsing.html
@@ -1,18 +1,7 @@
-
+
-
Parsing
+
Parsing (Obsolete and removed)
+
+
This criterion was originally adopted to address problems that assistive technology had directly parsing HTML. Assistive technology no longer has any need to directly parse HTML. Consequently, these problems either no longer exist or are addressed by other criteria. This criterion no longer has utility and is removed.
-
A
-
-
In content implemented using markup languages, elements have complete start and end
- tags, elements are nested according to their specifications, elements do not contain
- duplicate attributes, and any IDs are unique, except where the specifications allow
- these features.
-
-
-
Start and end tags that are missing a critical character in their formation, such
- as a closing angle bracket or a mismatched attribute value quotation mark are not
- complete.
-
-
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/pause-stop-hide.html b/guidelines/sc/20/pause-stop-hide.html
index 09c6df18e0..ab71a6bf3b 100644
--- a/guidelines/sc/20/pause-stop-hide.html
+++ b/guidelines/sc/20/pause-stop-hide.html
@@ -1,4 +1,4 @@
-
+
Pause, Stop, Hide
@@ -54,4 +54,4 @@
Pause, Stop, Hide
progress could confuse users or cause them to think that content was frozen or broken.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/pronunciation.html b/guidelines/sc/20/pronunciation.html
index a8f3276738..b899204a34 100644
--- a/guidelines/sc/20/pronunciation.html
+++ b/guidelines/sc/20/pronunciation.html
@@ -1,4 +1,4 @@
-
+
Pronunciation
@@ -8,4 +8,4 @@
Pronunciation
words, in context, is ambiguous without knowing the pronunciation.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/re-authenticating.html b/guidelines/sc/20/re-authenticating.html
index c51422ca81..0a1d6d74f2 100644
--- a/guidelines/sc/20/re-authenticating.html
+++ b/guidelines/sc/20/re-authenticating.html
@@ -1,4 +1,4 @@
-
+
Re-authenticating
@@ -8,4 +8,4 @@
Re-authenticating
loss of data after re-authenticating.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/reading-level.html b/guidelines/sc/20/reading-level.html
index 49262cc9ac..e3db6ab59e 100644
--- a/guidelines/sc/20/reading-level.html
+++ b/guidelines/sc/20/reading-level.html
@@ -1,4 +1,4 @@
-
+
Reading Level
@@ -8,4 +8,4 @@
Reading Level
secondary education level, is available.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/resize-text.html b/guidelines/sc/20/resize-text.html
index c8c28c9b89..eaa1d81926 100644
--- a/guidelines/sc/20/resize-text.html
+++ b/guidelines/sc/20/resize-text.html
@@ -1,10 +1,10 @@
-
+
-
audio content in synchronized media.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/three-flashes-or-below-threshold.html b/guidelines/sc/20/three-flashes-or-below-threshold.html
index 033f602829..13b874c11e 100644
--- a/guidelines/sc/20/three-flashes-or-below-threshold.html
+++ b/guidelines/sc/20/three-flashes-or-below-threshold.html
@@ -1,4 +1,4 @@
-
+
Three Flashes or Below Threshold
@@ -13,4 +13,4 @@
Three Flashes or Below Threshold
meet other success criteria or not) must meet this success criterion. See Conformance Requirement 5: Non-Interference.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/three-flashes.html b/guidelines/sc/20/three-flashes.html
index 9d986e6e1c..1221c94199 100644
--- a/guidelines/sc/20/three-flashes.html
+++ b/guidelines/sc/20/three-flashes.html
@@ -1,4 +1,4 @@
-
+
Three Flashes
@@ -7,4 +7,4 @@
Three Flashes
Web pages do not contain anything that flashes more than three times in any one second period.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/timing-adjustable.html b/guidelines/sc/20/timing-adjustable.html
index 5e23ac9aaa..d058e6111f 100644
--- a/guidelines/sc/20/timing-adjustable.html
+++ b/guidelines/sc/20/timing-adjustable.html
@@ -1,4 +1,4 @@
-
+
Timing Adjustable
@@ -71,4 +71,4 @@
Timing Adjustable
should be considered in conjunction with Success Criterion 3.2.1, which puts limits on changes of content or context as a result of user action.
-
\ No newline at end of file
+
diff --git a/guidelines/sc/20/unusual-words.html b/guidelines/sc/20/unusual-words.html
index 594ef1efdd..20ee702f54 100644
--- a/guidelines/sc/20/unusual-words.html
+++ b/guidelines/sc/20/unusual-words.html
@@ -1,4 +1,4 @@
-
+
Line spacing (leading) is at least space-and-a-half within paragraphs, and paragraph spacing is at least 1.5 times larger than the line spacing.
Text can be resized without assistive technology up to 200 percent in a way that does not require the user to scroll horizontally to read a line of text on a full-screen window.
+
+
Content is not required to use these values. The requirement is that a mechanism is available for users to change these presentation aspects. The mechanism can be provided by the browser or other user agent. Content is not required to provide the mechanism.
+
+
Writing systems for some languages use different presentation aspects to improve readability and legibility. If a presentation aspect in this success criterion is not used in a writing system, content in that writing system does not need to use that presentation setting and can conform without it. Authors are encouraged to follow guidance for improving readability and legibility of text in their writing system.
Web content does not restrict use of input modalities available on a platform except where the restriction is essential, required to ensure the security of the content, or required to respect user settings.
Exception: The visual presentation of the additional content is controlled by the user agent and is not modified by the author.
-
Examples of additional content controlled by the user agent include browser tooltips created through use of the HTML title attribute.
+
Examples of additional content controlled by the user agent include browser tooltips created through use of the HTML title attribute [[HTML]].
Custom tooltips, sub-menus, and other nonmodal popups that display on hover and focus are examples of additional content covered by this criterion.
-
+
This criterion applies to content that appears in addition to the triggering component itself. Since hidden components that are made visible on keyboard focus (such as links used to skip to another part of a page) do not present additional content they are not covered by this criterion.
Functions that emulate a keyboard or numeric keypad key press are considered essential.
-
This requirement applies to web content that interprets pointer actions (i.e. this does not apply to actions that are required to operate the user agent or assistive technology).
+
This requirement applies to web content that interprets pointer actions (i.e., this does not apply to actions that are required to operate the user agent or assistive technology).
All functionality that uses multipoint or path-based gestures for operation can be operated with a single pointer without a path-based gesture, unless a multipoint or path-based gesture is essential.
-
This requirement applies to web content that interprets pointer actions (i.e. this does not apply to actions that are required to operate the user agent or assistive technology).
+
This requirement applies to web content that interprets pointer actions (i.e., this does not apply to actions that are required to operate the user agent or assistive technology).
Exception: Human languages and scripts that do not make use of one or more of these text style properties in written text can conform using only the properties that exist for that combination of language and script.
+
+
Content is not required to use these text spacing values. The requirement is to ensure that when a user overrides the authored text spacing, content or functionality is not lost.
+
+
Writing systems for some languages use different text spacing settings, such as paragraph start indent. Authors are encouraged to follow locally available guidance for improving readability and legibility of text in their writing system.
A cognitive function test (such as remembering a password or solving a puzzle) is not required for any step in an authentication process unless that step provides at least one of the following:
+
+
Alternative
+
Another authentication method that does not rely on a cognitive function test.
+
Mechanism
+
A mechanism is available to assist the user in completing the cognitive function test.
A cognitive function test (such as remembering a password or solving a puzzle) is not required for any step in an authentication process unless that step provides at least one of the following:
+
+
Alternative
+
Another authentication method that does not rely on a cognitive function test.
+
Mechanism
+
A mechanism is available to assist the user in completing the cognitive function test.
+
Object Recognition
+
The cognitive function test is to recognize objects.
+
Personal Content
+
The cognitive function test is to identify non-text content the user provided to the Web site.
+
+
+
"Object recognition" and "Personal content" may be represented by images, video, or audio.
+
Examples of mechanisms that satisfy this criterion include:
+
+
support for password entry by password managers to reduce memory need, and
+
copy and paste to reduce the cognitive burden of re-typing.
For each step in an authentication process that relies on a cognitive function test, at least one other method is available that does not rely on a cognitive function test.
-
-
-
\ No newline at end of file
diff --git a/guidelines/sc/22/consistent-help.html b/guidelines/sc/22/consistent-help.html
new file mode 100644
index 0000000000..62c9292b09
--- /dev/null
+++ b/guidelines/sc/22/consistent-help.html
@@ -0,0 +1,21 @@
+
+
+
Consistent Help
+
+
A
+
New
+
+
If a Web page contains any of the following help mechanisms, and those mechanisms are repeated on multiple Web pages within a set of Web pages, they occur in the same order relative to other page content, unless a change is initiated by the user:
+
+
+
Human contact details;
+
Human contact mechanism;
+
Self-help option;
+
A fully automated contact mechanism.
+
+
+
Help mechanisms may be provided directly on the page, or may be provided via a direct link to a different page containing the information.
+
For this Success Criterion, "the same order relative to other page content" can be thought of as how the content is ordered when the page is serialized. The visual position of a help mechanism is likely to be consistent across pages for the same page variation (e.g., CSS break-point). The user can initiate a change, such as changing the page's zoom or orientation, which may trigger a different page variation. This criterion is concerned with relative order across pages displayed in the same page variation (e.g., same zoom level and orientation).
This requirement applies to web content that interprets pointer actions (i.e., this does not apply to actions that are required to operate the user agent or assistive technology).
All functionality that uses a dragging movement for operation can be operated by a single pointer without dragging, unless dragging is essential.
-
This requirement applies to web content that interprets pointer actions (i.e. this does not apply to actions that are required to operate the user agent or assistive technology).
-
Is there an assistive technology that helps for people with mobility impairments? The group would like feedback on the frontier between AT & author responsibility.
For the keyboard focus indicator of each User Interface Component, all of the following are true:
-
-
Minimum area: The focus indication area is greater than or equal to a 1 CSS pixel border of the focused control, or has a thickness of at least 8 CSS pixels along the shortest side of the element.
-
Change of contrast: The color change for the focus indication area has a contrast ratio of at least 3:1 with the colors of the unfocused state.
-
Adjacent contrast: The focus indication area has a contrast ratio of at least 3:1 against all adjacent colors for the minimum area or greater, or has a thickness of at least 2 CSS pixels.
-
Not fully obscured: The item with focus is not entirely hidden by author-created content.
-
-
A keyboard focus indicator which has a pattern or gradient may have parts that do not meet the 3:1 contrast ratio for the change of contrast, as long as an area equal to the minimum does meet the contrast ratio.
-
If the control has a visible boundary smaller than the hit area, the size measure is taken from the visible boundary.
-
The working group is interested in feedback about the minimum area metric, and if there are unusual scenarios where visible indicators are caught by the wording.
When the keyboard focus indicator is visible, an area of the focus indicator meets all the following:
+
+
is at least as large as the area of a 2 CSS pixel thick perimeter of the unfocused component or sub-component, and
+
has a contrast ratio of at least 3:1 between the same pixels in the focused and unfocused states.
+
+
+
Exceptions:
+
+
The focus indicator is determined by the user agent and cannot be adjusted by the author, or
+
The focus indicator and the indicator's background color are not modified by the author.
+
+
+
What is perceived as the user interface component or sub-component (to determine the perimeter) depends on its visual presentation. The visual presentation includes the component's visible content, border, and component-specific background. It does not include shadow and glow effects outside the component's content, background, or border.
+
+
Examples of sub-components that may receive a focus indicator are menu items in an opened drop-down menu, or focusable cells in a grid.
+
+
Contrast calculations can be based on colors defined within the technology (such as HTML, CSS, and SVG). Pixels modified by user agent resolution enhancements and anti-aliasing can be ignored.
When a user interface component receives keyboard focus, the component is not entirely hidden due to author-created content.
+
+
Where content in a configurable interface can be repositioned by the user, then only the initial positions of user-movable content are considered for testing and conformance of this Success Criterion.
+
+
Content opened by the user may obscure the component receiving focus. If the user can reveal the focused component without advancing the keyboard focus, the component with focus is not considered visually hidden due to author-created content.
Any keyboard operable user interface has a mode of operation where the keyboard focus
- indicator is visible.
-
-
-
\ No newline at end of file
diff --git a/guidelines/sc/22/hidden-controls.html b/guidelines/sc/22/hidden-controls.html
deleted file mode 100644
index 271004466f..0000000000
--- a/guidelines/sc/22/hidden-controls.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
Hidden Controls
-
-
AA
-
New
-
-
Controls needed to progress or complete a process are visible at the time they are needed without requiring pointer hover or keyboard focus,
- or a mechanism is available to make them persistently visible.
For each target, there is an area with a width and height of at least 44 CSS pixels that includes it, and no other targets, except when:
-
-
Enlarge: A mechanism is available to change the CSS pixel size of each target, or its spacing, so there is an area with a width and height of at least 44 CSS pixels that includes it, and no other targets;
-
Inline: The target is in a sentence or block of text;
-
User agent: The size of the target is controlled by the user agent and is not modified by the author;
-
Essential: A particular presentation of the target is essential to the information being conveyed.
-
-
This criterion has been formulated to increase the hit-area of small targets, but the group would like feedback from providers of touch-screen devices if there is another way of forming the criterion to better complement the tap-heuristics used.
-
Are there issues with internationalization when describing inline links?
-
Are there issues with pop-over content overlapping targets triggering failures?
Spacing: Undersized targets (those less than 24 by 24 CSS pixels) are positioned so that if a 24 CSS pixel diameter circle is centered on the bounding box of each, the circles do not intersect another target or the circle for another undersized target;
+
Equivalent: The function can be achieved through a different control on the same page that meets this criterion;
+
Inline: The target is in a sentence or its size is otherwise constrained by the line-height of non-target text;
+
User agent control: The size of the target is determined by the user agent and is not modified by the author;
+
Essential: A particular presentation of the target is essential or is legally required for the information being conveyed.
+
+
Targets that allow for values to be selected spatially based on position within the target are considered one target for the purpose of the success criterion. Examples include sliders, color pickers displaying a gradient of colors, or editable areas where you position the cursor.
+
For inline targets the line-height should be interpreted as perpendicular to the flow of text. For example, in a language displayed vertically, the line-height would be horizontal.
When a Web Technology is used in a way that is "accessibility supported," it does not imply that the entire
diff --git a/guidelines/terms/20/alternative-for-time-based-media.html b/guidelines/terms/20/alternative-for-time-based-media.html
index 5e071239db..22bf2a0053 100644
--- a/guidelines/terms/20/alternative-for-time-based-media.html
+++ b/guidelines/terms/20/alternative-for-time-based-media.html
@@ -1,4 +1,4 @@
-
alternative for time-based media
+
alternative for time-based media
document including correctly sequenced text descriptions of time-based visual and
diff --git a/guidelines/terms/20/ambiguous-to-users-in-general.html b/guidelines/terms/20/ambiguous-to-users-in-general.html
index 4fc95a61f6..5260803b07 100644
--- a/guidelines/terms/20/ambiguous-to-users-in-general.html
+++ b/guidelines/terms/20/ambiguous-to-users-in-general.html
@@ -1,4 +1,4 @@
-
ambiguous to users in general
+
ambiguous to users in general
the purpose cannot be determined from the link and all information of the Web page
@@ -6,10 +6,10 @@
would not know what a link would do until they activated it)
-
The word guava in the following sentence "One of the notable exports is guava" is
+
picture created by a spatial arrangement of characters or glyphs (typically from the
diff --git a/guidelines/terms/20/assistive-technology.html b/guidelines/terms/20/assistive-technology.html
index 6a75d242dd..4a918854c8 100644
--- a/guidelines/terms/20/assistive-technology.html
+++ b/guidelines/terms/20/assistive-technology.html
@@ -1,4 +1,4 @@
-
assistive technology (as used in this document)
+
assistive technology (as used in this document)
@@ -6,7 +6,7 @@
of users with disabilities that go beyond those offered by mainstream user agents
-
functionality provided by assistive technology includes alternative presentations
+
Functionality provided by assistive technology includes alternative presentations
(e.g., as synthesized speech or magnified content), alternative input methods (e.g.,
voice), additional navigation or orientation mechanisms, and content transformations
(e.g., to make tables more accessible).
@@ -27,7 +27,7 @@
markup into identifiable bundles.
-
Assistive technologies that are important in the context of this document include
+
narration added to the soundtrack to describe important visual details that cannot
diff --git a/guidelines/terms/20/audio-only.html b/guidelines/terms/20/audio-only.html
index fe88b4570c..7e467df2b6 100644
--- a/guidelines/terms/20/audio-only.html
+++ b/guidelines/terms/20/audio-only.html
@@ -1,7 +1,7 @@
-
audio-only
+
audio-only
a time-based presentation that contains only audio (no video and no interaction)
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/audio.html b/guidelines/terms/20/audio.html
index add67e1281..8a1266d214 100644
--- a/guidelines/terms/20/audio.html
+++ b/guidelines/terms/20/audio.html
@@ -1,4 +1,4 @@
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/captcha.html b/guidelines/terms/20/captcha.html
index 960cf3928d..c33c055da8 100644
--- a/guidelines/terms/20/captcha.html
+++ b/guidelines/terms/20/captcha.html
@@ -1,4 +1,4 @@
-
CAPTCHA
+
CAPTCHA
initialism for "Completely Automated Public Turing test to tell Computers and Humans
diff --git a/guidelines/terms/20/captions.html b/guidelines/terms/20/captions.html
index 226b7b509d..2192362d54 100644
--- a/guidelines/terms/20/captions.html
+++ b/guidelines/terms/20/captions.html
@@ -1,4 +1,4 @@
-
captions
+
captions
synchronized visual and/or text alternative for both speech and non-speech audio information needed to understand the media content
diff --git a/guidelines/terms/20/changes-of-context.html b/guidelines/terms/20/changes-of-context.html
index e155cbb307..b57e76b901 100644
--- a/guidelines/terms/20/changes-of-context.html
+++ b/guidelines/terms/20/changes-of-context.html
@@ -1,7 +1,7 @@
-
changes of context
+
changes of context
-
major changes in the content of the Web page that, if made without user awareness, can disorient users who are not able to view
+
major changes that, if made without user awareness, can disorient users who are not able to view
the entire page simultaneously
@@ -27,9 +27,9 @@
context, unless they also change one of the above (e.g., focus).
-
Opening a new window, moving focus to a different component, going to a new page (including
+
satisfying all the requirements of a given standard, guideline or specification
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/conforming-alternate-version.html b/guidelines/terms/20/conforming-alternate-version.html
index eca187c6b7..77faa0f4f3 100644
--- a/guidelines/terms/20/conforming-alternate-version.html
+++ b/guidelines/terms/20/conforming-alternate-version.html
@@ -1,4 +1,4 @@
-
information and sensory experience to be communicated to the user by means of a user agent, including code or markup that defines the content's structure, presentation, and interactions
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/context-sensitive-help.html b/guidelines/terms/20/context-sensitive-help.html
index a5a7328278..b940f10b1f 100644
--- a/guidelines/terms/20/context-sensitive-help.html
+++ b/guidelines/terms/20/context-sensitive-help.html
@@ -1,4 +1,4 @@
-
context-sensitive help
+
context-sensitive help
help text that provides information related to the function currently being performed
any sequence where words and paragraphs are presented in an order that does not change
the meaning of the content
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/emergency.html b/guidelines/terms/20/emergency.html
index a4f6f8541e..108903d437 100644
--- a/guidelines/terms/20/emergency.html
+++ b/guidelines/terms/20/emergency.html
@@ -1,8 +1,8 @@
-
emergency
+
emergency
a sudden, unexpected situation or occurrence that requires immediate action to preserve
health, safety, or property
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/essential.html b/guidelines/terms/20/essential.html
index 135f577244..3c7e5ede2d 100644
--- a/guidelines/terms/20/essential.html
+++ b/guidelines/terms/20/essential.html
@@ -1,8 +1,8 @@
-
essential
+
essential
if removed, would fundamentally change the information or functionality of the content,
and information and functionality cannot be achieved in another way that would conform
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/extended-audio-description.html b/guidelines/terms/20/extended-audio-description.html
index a1d4aad540..c97ea85645 100644
--- a/guidelines/terms/20/extended-audio-description.html
+++ b/guidelines/terms/20/extended-audio-description.html
@@ -1,4 +1,4 @@
-
extended audio description
+
extended audio description
audio description that is added to an audiovisual presentation by pausing the video so that there is time to add additional description
diff --git a/guidelines/terms/20/flash.html b/guidelines/terms/20/flash.html
index c8bda462a7..9530426c48 100644
--- a/guidelines/terms/20/flash.html
+++ b/guidelines/terms/20/flash.html
@@ -1,4 +1,4 @@
-
flash
+
flash
a pair of opposing changes in relative luminance that can cause seizures in some people if it is large enough and in the right frequency
diff --git a/guidelines/terms/20/functionality.html b/guidelines/terms/20/functionality.html
index 6f61b9632c..edd851bd16 100644
--- a/guidelines/terms/20/functionality.html
+++ b/guidelines/terms/20/functionality.html
@@ -1,7 +1,7 @@
-
functionality
+
functionality
processes and outcomes achievable through user action
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/general-flash-and-red-flash-thresholds.html b/guidelines/terms/20/general-flash-and-red-flash-thresholds.html
index 94ff8358ce..19048801f6 100644
--- a/guidelines/terms/20/general-flash-and-red-flash-thresholds.html
+++ b/guidelines/terms/20/general-flash-and-red-flash-thresholds.html
@@ -1,4 +1,4 @@
-
general flash and red flash thresholds
+
general flash and red flash thresholds
a flash or rapidly changing image sequence is below the threshold (i.e., content passes) if any of the following are true:
@@ -20,7 +20,7 @@
-
A general flash is defined as a pair of opposing changes in relative luminance of 10% or more of the maximum relative luminance where the relative luminance of
+
A general flash is defined as a pair of opposing changes in relative luminance of 10% or more of the maximum relative luminance (1.0) where the relative luminance of
the darker image is below 0.80; and where "a pair of opposing changes" is an increase
followed by a decrease, or a decrease followed by an increase, and
@@ -35,12 +35,7 @@
viewing distance) on a side does not violate the thresholds.
-
For general software or Web content, using a 341 x 256 pixel rectangle anywhere on
- the displayed screen area when the content is viewed at 1024 x 768 pixels will provide
- a good estimate of a 10 degree visual field for standard screen sizes and viewing
- distances (e.g., 15-17 inch screen at 22-26 inches). (Higher resolutions displays
- showing the same rendering of the content yield smaller and safer images so it is
- lower resolutions that are used to define the thresholds.)
+
For general software or Web content, using a 341 x 256 pixel rectangle anywhere on the displayed screen area when the content is viewed at 1024 x 768 pixels will provide a good estimate of a 10 degree visual field for standard screen sizes and viewing distances (e.g., 15-17 inch screen at 22-26 inches). This resolution of 75 - 85 ppi is known to be lower, and thus more conservative than the nominal CSS pixel resolution of 96 ppi in CSS specifications. Higher resolutions displays showing the same rendering of the content yield smaller and safer images so it is lower resolutions that are used to define the thresholds.
A transition is the change in relative luminance (or relative luminance/color for
@@ -48,12 +43,8 @@
relative luminance/color for red flashing) measurement against time. A flash consists
of two opposing transitions.
-
-
The current working definition in the field for "pair of opposing transitions involving a saturated red" is where, for either or both states involved in each transition, R/(R+ G + B) >=
- 0.8, and the change in the value of (R-G-B)x320 is > 20 (negative values of (R-G-B)x320
- are set to zero) for both transitions. R, G, B values range from 0-1 as specified
- in “relative luminance” definition. [[HARDING-BINNIE]]
-
+
+
The new working definition in the field for "pair of opposing transitions involving a saturated red" (from WCAG 2.2) is a pair of opposing transitions where, one transition is either to or from a state with a value R/(R + G + B) that is greater than or equal to 0.8, and the difference between states is more than 0.2 (unitless) in the CIE 1976 UCS chromaticity diagram. [[ISO_9241-391]]
Tools are available that will carry out analysis from video screen capture. However,
no tool is necessary to evaluate for this condition if flashing is less than or equal
diff --git a/guidelines/terms/20/human-language.html b/guidelines/terms/20/human-language.html
index f070d1f51c..17cc924943 100644
--- a/guidelines/terms/20/human-language.html
+++ b/guidelines/terms/20/human-language.html
@@ -1,4 +1,4 @@
-
human language
+
human language
language that is spoken, written or signed (through visual or tactile means) to communicate
diff --git a/guidelines/terms/20/idiom.html b/guidelines/terms/20/idiom.html
index 2e35d5528e..ce69f64abe 100644
--- a/guidelines/terms/20/idiom.html
+++ b/guidelines/terms/20/idiom.html
@@ -1,24 +1,24 @@
-
idiom
+
idiom
phrase whose meaning cannot be deduced from the meaning of the individual words and
the specific words cannot be changed without losing the meaning
-
idioms cannot be translated directly, word for word, without losing their (cultural
+
Idioms cannot be translated directly, word for word, without losing their (cultural
or language-dependent) meaning.
-
In English, "spilling the beans" means "revealing a secret." However, "knocking over
+
-
In Japanese, the phrase "さじを投げる" literally translates into "he throws a spoon," but it means that there is nothing
+
-
In Dutch, "Hij ging met de kippen op stok" literally translates into "He went to roost with the chickens," but it means that
+
interface used by software to obtain keystroke input
@@ -7,11 +7,11 @@
A keyboard interface allows users to provide keystroke input to programs even if the
native technology does not contain a keyboard.
-
A touchscreen PDA has a keyboard interface built into its operating system as well
+
Operation of the application (or parts of the application) through a keyboard-operated
diff --git a/guidelines/terms/20/label.html b/guidelines/terms/20/label.html
index cb8a61e515..b8624b4ae2 100644
--- a/guidelines/terms/20/label.html
+++ b/guidelines/terms/20/label.html
@@ -1,4 +1,4 @@
-
label
+
label
text or other component with a text alternative that is presented to a user to identify a component within Web content
The actual size of the character that a user sees is dependent both on the author-defined
- size and the user's display or user-agent settings. For many mainstream body text
+ size and the user's display or user agent settings. For many mainstream body text
fonts, 14 and 18 point is roughly equivalent to 1.2 and 1.5 em or to 120% or 150%
of the default size for body text (assuming that the body font is 100%), but authors
would need to check this for the particular fonts in use. When fonts are defined in
diff --git a/guidelines/terms/20/legal-commitments.html b/guidelines/terms/20/legal-commitments.html
index 431518846b..58248faa76 100644
--- a/guidelines/terms/20/legal-commitments.html
+++ b/guidelines/terms/20/legal-commitments.html
@@ -1,10 +1,10 @@
-
legal commitments
+
legal commitments
transactions where the person incurs a legally binding obligation or benefit
-
A marriage license, a stock trade (financial and legal), a will, a loan, adoption,
+
information captured from a real-world event and transmitted to the receiver with
diff --git a/guidelines/terms/20/lower-secondary-education-level.html b/guidelines/terms/20/lower-secondary-education-level.html
index a642496e60..12164166e0 100644
--- a/guidelines/terms/20/lower-secondary-education-level.html
+++ b/guidelines/terms/20/lower-secondary-education-level.html
@@ -1,4 +1,4 @@
-
lower secondary education level
+
lower secondary education level
the two or three year period of education that begins after completion of six years
diff --git a/guidelines/terms/20/mechanism.html b/guidelines/terms/20/mechanism.html
index bcaa507314..96b49da658 100644
--- a/guidelines/terms/20/mechanism.html
+++ b/guidelines/terms/20/mechanism.html
@@ -1,4 +1,4 @@
-
mechanism
+
mechanism
process or technique for achieving a result
diff --git a/guidelines/terms/20/media-alternative-for-text.html b/guidelines/terms/20/media-alternative-for-text.html
index e1d55bbc4a..e1adab92ab 100644
--- a/guidelines/terms/20/media-alternative-for-text.html
+++ b/guidelines/terms/20/media-alternative-for-text.html
@@ -1,4 +1,4 @@
-
media alternative for text
+
media alternative for text
media that presents no more information than is already presented in text (directly
diff --git a/guidelines/terms/20/name.html b/guidelines/terms/20/name.html
index 6aa0f2923e..9530872de2 100644
--- a/guidelines/terms/20/name.html
+++ b/guidelines/terms/20/name.html
@@ -1,4 +1,4 @@
-
name
+
name
text by which software can identify a component within Web content to the user
navigated in the order defined for advancing focus (from one element to the next)
using a keyboard interface
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/non-text-content.html b/guidelines/terms/20/non-text-content.html
index 41e0b40690..612b94689b 100644
--- a/guidelines/terms/20/non-text-content.html
+++ b/guidelines/terms/20/non-text-content.html
@@ -1,4 +1,4 @@
-
stopped by user request and not resumed until requested by user
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/prerecorded.html b/guidelines/terms/20/prerecorded.html
index 4606341550..68828d5aa8 100644
--- a/guidelines/terms/20/prerecorded.html
+++ b/guidelines/terms/20/prerecorded.html
@@ -1,6 +1,6 @@
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/presentation.html b/guidelines/terms/20/presentation.html
index 72efe3d4d3..b2decee50f 100644
--- a/guidelines/terms/20/presentation.html
+++ b/guidelines/terms/20/presentation.html
@@ -1,7 +1,7 @@
-
presentation
+
presentation
rendering of the content in a form to be perceived by users
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/primary-education-level.html b/guidelines/terms/20/primary-education-level.html
index c3434cb493..d34f2f6229 100644
--- a/guidelines/terms/20/primary-education-level.html
+++ b/guidelines/terms/20/primary-education-level.html
@@ -1,4 +1,4 @@
-
primary education level
+
primary education level
six year time period that begins between the ages of five and seven, possibly without
diff --git a/guidelines/terms/20/process.html b/guidelines/terms/20/process.html
index 3a22b8194e..9cafc80647 100644
--- a/guidelines/terms/20/process.html
+++ b/guidelines/terms/20/process.html
@@ -1,15 +1,15 @@
-
process
+
process
series of user actions where each action is required in order to complete an activity
-
Successful use of a series of Web pages on a shopping site requires users to view
+
-
An account registration page requires successful completion of a Turing test before
+
additional information that can be programmatically determined from relationships with a link, combined with the link text, and presented to users in different modalities
-
In HTML, information that is programmatically determinable from a link in English
+
Since screen readers interpret punctuation, they can also provide the context from
the current sentence, when the focus is on a link in that sentence.
diff --git a/guidelines/terms/20/programmatically-determined.html b/guidelines/terms/20/programmatically-determined.html
index 24d2994c17..8e7e7d248e 100644
--- a/guidelines/terms/20/programmatically-determined.html
+++ b/guidelines/terms/20/programmatically-determined.html
@@ -1,4 +1,4 @@
-
set by software using methods that are supported by user agents, including assistive
technologies
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/pure-decoration.html b/guidelines/terms/20/pure-decoration.html
index b4f4d57a54..84518d08ae 100644
--- a/guidelines/terms/20/pure-decoration.html
+++ b/guidelines/terms/20/pure-decoration.html
@@ -1,4 +1,4 @@
-
pure decoration
+
pure decoration
serving only an aesthetic purpose, providing no information, and having no functionality
@@ -7,6 +7,6 @@
changing their purpose.
-
The cover page of a dictionary has random words in very light text in the background.
meaningful associations between distinct pieces of content
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/relative-luminance.html b/guidelines/terms/20/relative-luminance.html
index 0fb72a3d29..a3dd3c369e 100644
--- a/guidelines/terms/20/relative-luminance.html
+++ b/guidelines/terms/20/relative-luminance.html
@@ -1,4 +1,4 @@
-
relative luminance
+
relative luminance
the relative brightness of any point in a colorspace, normalized to 0 for darkest
@@ -12,13 +12,13 @@
-
if RsRGB <= 0.03928 then R = RsRGB/12.92 else R = ((RsRGB+0.055)/1.055) ^ 2.4
+
if RsRGB <= 0.04045 then R = RsRGB/12.92 else R = ((RsRGB+0.055)/1.055) ^ 2.4
-
if GsRGB <= 0.03928 then G = GsRGB/12.92 else G = ((GsRGB+0.055)/1.055) ^ 2.4
+
if GsRGB <= 0.04045 then G = GsRGB/12.92 else G = ((GsRGB+0.055)/1.055) ^ 2.4
-
if BsRGB <= 0.03928 then B = BsRGB/12.92 else B = ((BsRGB+0.055)/1.055) ^ 2.4
+
if BsRGB <= 0.04045 then B = BsRGB/12.92 else B = ((BsRGB+0.055)/1.055) ^ 2.4
@@ -35,15 +35,17 @@
-
The "^" character is the exponentiation operator. (Formula taken from [[sRGB]] and
- [[IEC-4WD]]).
+
The "^" character is the exponentiation operator. (Formula taken from
+ [[SRGB]].)
+
+
Before May 2021 the value of 0.04045 in the definition was different (0.03928). It was taken from an older version of the specification and has been updated. It has no practical effect on the calculations in the context of these guidelines.
Almost all systems used today to view Web content assume sRGB encoding. Unless it
is known that another color space will be used to process and display the content,
- authors should evaluate using sRGB colorspace. If using other color spaces, see Understanding Success Criterion 1.4.3.
+ authors should evaluate using sRGB colorspace. If using other color spaces, see Understanding Success Criterion 1.4.3.
If dithering occurs after delivery, then the source color value is used. For colors
@@ -55,7 +57,7 @@
flash.
the content would not conform if that technology is turned off or is not supported
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/role.html b/guidelines/terms/20/role.html
index 0f766933cf..438e82e558 100644
--- a/guidelines/terms/20/role.html
+++ b/guidelines/terms/20/role.html
@@ -1,12 +1,12 @@
-
role
+
role
text or number by which software can identify the function of a component within Web
content
-
A number that indicates whether an image functions as a hyperlink, command button,
+
the success criterion does not evaluate to 'false' when applied to the page
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/section.html b/guidelines/terms/20/section.html
index 600179f9a3..2be0ce728c 100644
--- a/guidelines/terms/20/section.html
+++ b/guidelines/terms/20/section.html
@@ -1,4 +1,4 @@
-
section
+
section
a self-contained portion of written content that deals with one or more related topics
diff --git a/guidelines/terms/20/set-of-web-pages.html b/guidelines/terms/20/set-of-web-pages.html
index 01c5b084c2..bf154da489 100644
--- a/guidelines/terms/20/set-of-web-pages.html
+++ b/guidelines/terms/20/set-of-web-pages.html
@@ -1,4 +1,4 @@
-
set of Web pages
+
set of Web pages
collection of Web pages that share a common purpose and that are created by the same author, group or organization.
a language using combinations of movements of the hands and arms, facial expressions,
or body positions to convey meaning
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/specific-sensory-experience.html b/guidelines/terms/20/specific-sensory-experience.html
index 3762854baf..1b9d67f820 100644
--- a/guidelines/terms/20/specific-sensory-experience.html
+++ b/guidelines/terms/20/specific-sensory-experience.html
@@ -1,10 +1,10 @@
-
specific sensory experience
+
specific sensory experience
a sensory experience that is not purely decorative and does not primarily convey important
information or perform a function
-
Examples include a performance of a flute solo, works of visual art etc.
\ No newline at end of file
+
diff --git a/guidelines/terms/20/supplemental-content.html b/guidelines/terms/20/supplemental-content.html
index 69b3344d49..25cd2d5478 100644
--- a/guidelines/terms/20/supplemental-content.html
+++ b/guidelines/terms/20/supplemental-content.html
@@ -1,17 +1,17 @@
-
supplemental content
+
supplemental content
additional content that illustrates or clarifies the primary content
audio or video synchronized with another format for presenting information and/or with time-based
interactive components, unless the media is a media alternative for text that is clearly labeled as such
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/technology.html b/guidelines/terms/20/technology.html
index 9edb054581..08c0a2aa16 100644
--- a/guidelines/terms/20/technology.html
+++ b/guidelines/terms/20/technology.html
@@ -1,4 +1,4 @@
-
technology (Web content)
+
technology (Web content)
@@ -14,8 +14,8 @@
applications.
-
Some common examples of Web content technologies include HTML, CSS, SVG, PNG, PDF,
+
Text that is programmatically associated with non-text content or referred to from text that is programmatically associated with non-text content.
@@ -6,11 +6,11 @@
from the non-text content.
-
An image of a chart is described in text in the paragraph after the chart. The short
+
\ No newline at end of file
+
diff --git a/guidelines/terms/20/used-in-an-unusual-or-restricted-way.html b/guidelines/terms/20/used-in-an-unusual-or-restricted-way.html
index 03d6e87f2e..f8628fde38 100644
--- a/guidelines/terms/20/used-in-an-unusual-or-restricted-way.html
+++ b/guidelines/terms/20/used-in-an-unusual-or-restricted-way.html
@@ -1,14 +1,14 @@
-
used in an unusual or restricted way
+
used in an unusual or restricted way
words used in such a way that requires users to know exactly which definition to apply
in order to understand the content correctly
-
The term "gig" means something different if it occurs in a discussion of music concerts
+
any software that retrieves and presents Web content for users
-
Web browsers, media players, plug-ins, and other programs — including assistive technologies — that help in retrieving, rendering, and interacting with Web content.
-
a time-based presentation that contains only video (no audio and no interaction)
-
\ No newline at end of file
+
diff --git a/guidelines/terms/20/video.html b/guidelines/terms/20/video.html
index b5b3e21135..3365eef51b 100644
--- a/guidelines/terms/20/video.html
+++ b/guidelines/terms/20/video.html
@@ -1,4 +1,4 @@
-
video
+
video
the technology of moving or sequenced pictures or images
\ No newline at end of file
+
diff --git a/guidelines/terms/20/web-page.html b/guidelines/terms/20/web-page.html
index 57c69b4c42..bdbf6b5a07 100644
--- a/guidelines/terms/20/web-page.html
+++ b/guidelines/terms/20/web-page.html
@@ -1,4 +1,4 @@
-
Web page
+
Web page
a non-embedded resource obtained from a single URI using HTTP plus any other resources
@@ -12,24 +12,24 @@
within the scope of conformance to be considered a Web page.
-
A Web resource including all embedded images and media.
+
-
A Web mail program built using Asynchronous JavaScript and XML (AJAX). The program
+
-
A customizable portal site, where users can choose content to display from a set of
+
-
When you enter "http://shopping.example.com/" in your browser, you enter a movie-like
+
A CSS pixel is the canonical unit of measure for all lengths and measurements in CSS.
This unit is density-independent, and distinct from actual hardware pixels present
in a display. User agents and operating systems should ensure that a CSS pixel is
- set as closely as possible to the CSS Values and Units Module Level 3 reference pixel [[!css3-values]], which takes into account the physical dimensions of the display
+ set as closely as possible to the CSS Values and Units Module Level 3 reference pixel [[css3-values]], which takes into account the physical dimensions of the display
and the assumed viewing distance (factors that cannot be determined by content authors).
addition of steps between conditions to create the illusion of movement or to give a sense of a smooth transition
-
For example, an element which moves into place or changes size while appearing is considered to be animated. An element which appears instantly without transitioning is not using animation. Motion animation does not include changes of color, blurring or opacity.
\ No newline at end of file
+
diff --git a/guidelines/terms/21/region.html b/guidelines/terms/21/region.html
index 40f15ff844..bc94cc0675 100644
--- a/guidelines/terms/21/region.html
+++ b/guidelines/terms/21/region.html
@@ -1,4 +1,4 @@
-
region
+
region
perceivable, programmatically determined section of content
In HTML, any area designated with a landmark role would be a region.
collection of web pages that share a common purpose and that are created by the same author, group or organization
-
Examples include a publication which is split across multiple Web pages, where each page contains
- one chapter or other significant section of the work. The publication is logically
- a single contiguous unit, and contains navigation features that enable access to the
- full set of pages.
-
+
Different language versions would be considered different sets of Web pages.
pointer input that operates with one point of contact with the screen, including single taps and clicks, double-taps and clicks, long presses, and path-based gestures
-
+
an input that only targets a single point on the page/screen at a time – such as a mouse, single finger on a touch screen, or stylus.
+
In contrast to single pointer inputs, multipoint interactions involve the use of two or more pointers at the same time – such as two finger interactions on a touchscreen, or the simultaneous use of a mouse and stylus.
change in content that is not a change of context, and that provides information to the user on the success or results of an action, on the waiting state of an application, on the progress of a process, or on the existence of errors
property whose value determines the presentation (e.g. font, color, size, location, padding, volume, synthesized speech prosody) of
content elements as they are rendered (e.g. onscreen, via loudspeaker, via braille display) by user agents
region of the display that will accept a pointer action, such as the interactive area of a user interface component
-
If two or more touch targets are overlapping, the overlapping area should not be included in the measurement of the target size, except when the overlapping targets perform the same action or open the same page.
+
If two or more targets are overlapping, the overlapping area should not be included in the measurement of the target size, except when the overlapping targets perform the same action or open the same page.
A task that requires the user to remember, manipulate, or transcribe information. Examples include, but are not limited to:
-
memorization, such as remembering a username, password, set of characters, images, or patterns. The common identifiers name, e-mail, and phone number are not considered cognitive function tests as they are personal to the user and consistent across websites;
+
memorization, such as remembering a username, password, set of characters, images, or patterns. The common identifiers name, e-mail, and phone number are not considered cognitive function tests as they are personal to the user and consistent across Web sites;
an operation where the pointer engages with an element on the down event and the element (or a representation of its position) follows the pointer
-
The element could be, for example, a list item, a text element, or an image.
+
an operation where the pointer engages with an element on the down-event and the element (or a representation of its position) follows the pointer until an up-event
+
+
Examples of draggable elements include list items, text elements, and images.
Content presented as a collection of related articles, document in the form of a book, textbook, magazine article, journal, a single journal article that is presented as having different pages, scholarly journal, or newspaper article in digital format.
-
diff --git a/guidelines/terms/22/encloses.html b/guidelines/terms/22/encloses.html
new file mode 100644
index 0000000000..b601c7661c
--- /dev/null
+++ b/guidelines/terms/22/encloses.html
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/guidelines/terms/22/focus-indicator.html b/guidelines/terms/22/focus-indicator.html
new file mode 100644
index 0000000000..70875a6939
--- /dev/null
+++ b/guidelines/terms/22/focus-indicator.html
@@ -0,0 +1,9 @@
+
The point where the user’s input interacts with the web page. For example, tabbing through a page with a keyboard moves the focus. Clicking or tapping on the page would move the focus for mouse and touchscreen usage. Different inputs can be used by a user, but at any one time there would be one point of focus for the user with the last input used.
-
-
-
diff --git a/guidelines/terms/22/minimum-bounding-box.html b/guidelines/terms/22/minimum-bounding-box.html
new file mode 100644
index 0000000000..60627b5b59
--- /dev/null
+++ b/guidelines/terms/22/minimum-bounding-box.html
@@ -0,0 +1,6 @@
+
minimum bounding box
+
+
New
+
the smallest enclosing rectangle aligned to the horizontal axis within which all the points of a shape lie. For components which wrap onto multiple lines as part of a sentence or block of text (such as hypertext links), the bounding box is based on how the component would appear on a single line.
Visual and/or programmatic markers that are arranged in a meaningful sequence to determine the location of a page in relation to others in the set.
-
Examples would be:
-
-
Corresponding pages between a print book and a digital version of the same publication. (A digital pixel precise manifestation of the published print version)
-
Page numbering in the print version of an ebook
-
Page numbering in an electronic version of the ebook
-
A digital book is published is with no print equivalent and page break locators are inserted which supports direct navigation across platforms and form factors.
-
Virtual page
-
Synchronizing reading people with different form factors and platforms, screen sizes, can be on the same page.
-
-
-
diff --git a/guidelines/terms/22/perimeter.html b/guidelines/terms/22/perimeter.html
new file mode 100644
index 0000000000..c0c323bb5c
--- /dev/null
+++ b/guidelines/terms/22/perimeter.html
@@ -0,0 +1,7 @@
+
perimeter
+
+
New
+
continuous line forming the boundary of a shape not including shared pixels, or the minimum bounding box, whichever is shortest.
Pages obtained from a single URI that provide navigation which changes the meaning of the Web page
-
diff --git a/guidelines/wcag.json b/guidelines/wcag.json
new file mode 100644
index 0000000000..8e1bdcf24e
--- /dev/null
+++ b/guidelines/wcag.json
@@ -0,0 +1,8551 @@
+
+ {
+ "principles": [
+
+ {
+ "id": "WCAG2:perceivable",
+ "num": "1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Perceivable",
+ "title": "Information and user interface components must be presentable to users in ways they can perceive.",
+ "guidelines": [
+
+ {
+ "id": "WCAG2:text-alternatives",
+ "alt_id": ["text-equiv"],
+ "num": "1.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Text Alternatives",
+ "title": "Provide text alternatives for any non-text content so that it can be changed into other forms people need, such as large print, braille, speech, symbols or simpler language.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:non-text-content",
+ "alt_id": ["text-equiv-all"],
+ "num": "1.1.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Non-text Content",
+ "title": "All non-text content that is presented to the user has a text alternative that serves the equivalent purpose, except for the situations listed below.",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Controls, Input",
+ "text": "If non-text content is a control or accepts user input, then it has a name that describes its purpose. (Refer to Success Criterion 4.1.2 for additional requirements for controls and content that accepts user input.)"
+ },
+ {
+ "handle": "Time-Based Media",
+ "text": "If non-text content is time-based media, then text alternatives at least provide descriptive identification of the non-text content. (Refer to Guideline 1.2 for additional requirements for media.)"
+ },
+ {
+ "handle": "Test",
+ "text": "If non-text content is a test or exercise that would be invalid if presented in text, then text alternatives at least provide descriptive identification of the non-text content."
+ },
+ {
+ "handle": "Sensory",
+ "text": "If non-text content is primarily intended to create a specific sensory experience, then text alternatives at least provide descriptive identification of the non-text content."
+ },
+ {
+ "handle": "CAPTCHA",
+ "text": "If the purpose of non-text content is to confirm that content is being accessed by a person rather than a computer, then text alternatives that identify and describe the purpose of the non-text content are provided, and alternative forms of CAPTCHA using output modes for different types of sensory perception are provided to accommodate different disabilities."
+ },
+ {
+ "handle": "Decoration, Formatting, Invisible",
+ "text": "If non-text content is pure decoration, is used only for visual formatting, or is not presented to users, then it is implemented in a way that it can be ignored by assistive technology."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If a short description can serve the same purpose and present the same information as the non-text content:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G94"
+ ,
+ "title":
+ "Providing short text alternative for non-text content that serves the same purpose and presents the same information as the non-text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA6"
+ ,
+ "title":
+ "Using aria-label to provide labels for objects"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA10"
+ ,
+ "title":
+ "Using aria-labelledby to provide a text alternative for non-text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:G196"
+ ,
+ "title":
+ "Using a text alternative on one item within a group of images that describes all items in the group"
+ }
+ ,
+ {
+ "id":
+ "TECH:H2"
+ ,
+ "title":
+ "Combining adjacent image and text links for the same resource"
+ }
+ ,
+ {
+ "id":
+ "TECH:H37"
+ ,
+ "title":
+ "Using alt attributes on img elements"
+ }
+ ,
+ {
+ "id":
+ "TECH:H53"
+ ,
+ "title":
+ "Using the body of the object element"
+ }
+ ,
+ {
+ "id":
+ "TECH:H86"
+ ,
+ "title":
+ "Providing text alternatives for emojis, emoticons, ASCII art, and leetspeak"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF1"
+ ,
+ "title":
+ "Applying text alternatives to images with the Alt entry in PDF documents"
+ }
+
+ ]},
+ {"title": "Situation B: If a short description can not serve the same purpose and present the same information as the non-text content (e.g., a chart or diagram):",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G95"
+ ,
+ "title":
+ "Providing short text alternatives that provide a brief description of the non-text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA6"
+ ,
+ "title":
+ "Using aria-label to provide labels for objects"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA10"
+ ,
+ "title":
+ "Using aria-labelledby to provide a text alternative for non-text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:G196"
+ ,
+ "title":
+ "Using a text alternative on one item within a group of images that describes all items in the group"
+ }
+ ,
+ {
+ "id":
+ "TECH:H2"
+ ,
+ "title":
+ "Combining adjacent image and text links for the same resource"
+ }
+ ,
+ {
+ "id":
+ "TECH:H35"
+ ,
+ "title":
+ ""
+ }
+ ,
+ {
+ "id":
+ "TECH:H37"
+ ,
+ "title":
+ "Using alt attributes on img elements"
+ }
+ ,
+ {
+ "id":
+ "TECH:H53"
+ ,
+ "title":
+ "Using the body of the object element"
+ }
+ ,
+ {
+ "id":
+ "TECH:H86"
+ ,
+ "title":
+ "Providing text alternatives for emojis, emoticons, ASCII art, and leetspeak"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF1"
+ ,
+ "title":
+ "Applying text alternatives to images with the Alt entry in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA15"
+ ,
+ "title":
+ "Using aria-describedby to provide descriptions of images"
+ }
+ ,
+ {
+ "id":
+ "TECH:G73"
+ ,
+ "title":
+ "Providing a long description in another location with a link to it that is immediately adjacent to the non-text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:G74"
+ ,
+ "title":
+ "Providing a long description in text near the non-text content, with a reference to the location of the long description in the short description"
+ }
+ ,
+ {
+ "id":
+ "TECH:G92"
+ ,
+ "title":
+ "Providing long description for non-text content that serves the same purpose and presents the same information"
+ }
+ ,
+ {
+ "id":
+ "TECH:H53"
+ ,
+ "title":
+ "Using the body of the object element"
+ }
+
+ ]},
+ {"title": "Situation C: If non-text content is a control or accepts user input:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G82"
+ ,
+ "title":
+ "Providing a text alternative that identifies the purpose of the non-text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA6"
+ ,
+ "title":
+ "Using aria-label to provide labels for objects"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA9"
+ ,
+ "title":
+ "Using aria-labelledby to concatenate a label from several text nodes"
+ }
+ ,
+ {
+ "id":
+ "TECH:H24"
+ ,
+ "title":
+ "Providing text alternatives for the area elements of image maps"
+ }
+ ,
+ {
+ "id":
+ "TECH:H30"
+ ,
+ "title":
+ "Providing link text that describes the purpose of a link for anchor elements"
+ }
+ ,
+ {
+ "id":
+ "TECH:H36"
+ ,
+ "title":
+ "Using alt attributes on images used as submit buttons"
+ }
+ ,
+ {
+ "id":
+ "TECH:H44"
+ ,
+ "title":
+ "Using label elements to associate text labels with form controls"
+ }
+ ,
+ {
+ "id":
+ "TECH:H65"
+ ,
+ "title":
+ "Using the title attribute to identify form controls when the label element cannot be used"
+ }
+
+ ]},
+ {"title": "Situation D: If non-text content is time-based media (including live video-only and live audio-only); a test or exercise that would be invalid if presented in text; or primarily intended to create a specific sensory experience:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:future-non-text-content-1"
+ ,
+ "title":
+ "Providing a descriptive label using one of the following :"
+ }
+ ,
+ {
+ "id":
+ "TECH:G68"
+ ,
+ "title":
+ "Providing a short text alternative that describes the purpose of live audio-only and live video-only content"
+ }
+ ,
+ {
+ "id":
+ "TECH:G100"
+ ,
+ "title":
+ "Providing a short text alternative which is the accepted name or a descriptive name of the non-text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA6"
+ ,
+ "title":
+ "Using aria-label to provide labels for objects"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA10"
+ ,
+ "title":
+ "Using aria-labelledby to provide a text alternative for non-text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:G196"
+ ,
+ "title":
+ "Using a text alternative on one item within a group of images that describes all items in the group"
+ }
+ ,
+ {
+ "id":
+ "TECH:H2"
+ ,
+ "title":
+ "Combining adjacent image and text links for the same resource"
+ }
+ ,
+ {
+ "id":
+ "TECH:H37"
+ ,
+ "title":
+ "Using alt attributes on img elements"
+ }
+ ,
+ {
+ "id":
+ "TECH:H53"
+ ,
+ "title":
+ "Using the body of the object element"
+ }
+ ,
+ {
+ "id":
+ "TECH:H86"
+ ,
+ "title":
+ "Providing text alternatives for emojis, emoticons, ASCII art, and leetspeak"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF1"
+ ,
+ "title":
+ "Applying text alternatives to images with the Alt entry in PDF documents"
+ }
+
+ ]},
+ {"title": "Situation E: If non-text content is a CAPTCHA:",
+ "techniques": [
+
+ {"and": [
+
+ {
+ "id":
+ "TECH:G143"
+ ,
+ "title":
+ "Providing a text alternative that describes the purpose of the CAPTCHA"
+ }
+ ,
+ {
+ "id":
+ "TECH:G144"
+ ,
+ "title":
+ "Ensuring that the Web Page contains another CAPTCHA serving the same purpose using a different modality"
+ }
+
+ ]}
+
+ ]},
+ {"title": "Situation F: If the non-text content should be ignored by assistive technology:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:future-non-text-content-1"
+ ,
+ "title":
+ "Implementing or marking the non-text content so that it will be ignored by assistive technology using one of the following :"
+ }
+ ,
+ {
+ "id":
+ "TECH:C9"
+ ,
+ "title":
+ "Using CSS to include decorative images"
+ }
+ ,
+ {
+ "id":
+ "TECH:H67"
+ ,
+ "title":
+ "Using null alt text and no title attribute on img elements for images that assistive technology should ignore"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF4"
+ ,
+ "title":
+ "Hiding decorative images with the Artifact tag in PDF documents"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F3"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 due to using CSS to include images that convey important information"
+ }
+ ,
+ {
+ "id":
+ "TECH:F13"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 and 1.4.1 due to having a text alternative that does not include information that is conveyed by color differences in the image"
+ }
+ ,
+ {
+ "id":
+ "TECH:F20"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 and 4.1.2 due to not updating text alternatives when changes to non-text content occur"
+ }
+ ,
+ {
+ "id":
+ "TECH:F30"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 and 1.2.1 due to using text alternatives that are not alternatives (e.g., filenames or placeholder text)"
+ }
+ ,
+ {
+ "id":
+ "TECH:F38"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 due to not marking up decorative images in HTML in a way that allows assistive technology to ignore them"
+ }
+ ,
+ {
+ "id":
+ "TECH:F39"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 due to providing a text alternative that is not null (e.g., alt=\"spacer\" or alt=\"image\") for images that should be ignored by assistive technology"
+ }
+ ,
+ {
+ "id":
+ "TECH:F65"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 due to omitting the alt attribute or text alternative on img elements, area elements, and input elements of type \"image\""
+ }
+ ,
+ {
+ "id":
+ "TECH:F67"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 and 1.2.1 due to providing long descriptions for non-text content that does not serve the same purpose or does not present the same information"
+ }
+ ,
+ {
+ "id":
+ "TECH:F71"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 due to using text look-alikes to represent text without providing a text alternative"
+ }
+ ,
+ {
+ "id":
+ "TECH:F72"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 due to using ASCII art without providing a text alternative"
+ }
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ },
+ {
+ "id": "WCAG2:time-based-media",
+ "alt_id": ["media-equiv"],
+ "num": "1.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Time-based Media",
+ "title": "Provide alternatives for time-based media.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:audio-only-and-video-only-prerecorded",
+ "alt_id": ["media-equiv-av-only-alt"],
+ "num": "1.2.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Audio-only and Video-only (Prerecorded)",
+ "title": "For prerecorded audio-only and prerecorded video-only media, the following are true, except when the audio or video is a media alternative for text and is clearly labeled as such:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Prerecorded Audio-only",
+ "text": "An alternative for time-based media is provided that presents equivalent information for prerecorded audio-only content."
+ },
+ {
+ "handle": "Prerecorded Video-only",
+ "text": "Either an alternative for time-based media or an audio track is provided that presents equivalent information for prerecorded video-only content."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If the content is prerecorded audio-only:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G158"
+ ,
+ "title":
+ "Providing an alternative for time-based media for audio-only content"
+ }
+
+ ]},
+ {"title": "Situation B: If the content is prerecorded video-only:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G159"
+ ,
+ "title":
+ "Providing an alternative for time-based media for video-only content"
+ }
+ ,
+ {
+ "id":
+ "TECH:G166"
+ ,
+ "title":
+ "Providing audio that describes the important video content and describing it as such"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:H96"
+ ,
+ "title":
+ "Using the track element to provide audio descriptions"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F30"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 and 1.2.1 due to using text alternatives that are not alternatives (e.g., filenames or placeholder text)"
+ }
+ ,
+ {
+ "id":
+ "TECH:F67"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 and 1.2.1 due to providing long descriptions for non-text content that does not serve the same purpose or does not present the same information"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:captions-prerecorded",
+ "alt_id": ["media-equiv-captions"],
+ "num": "1.2.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Captions (Prerecorded)",
+ "title": "Captions are provided for all prerecorded audio content in synchronized media, except when the media is a media alternative for text and is clearly labeled as such.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G93"
+ ,
+ "title":
+ "Providing open (always visible) captions"
+ }
+ ,
+ {
+ "id":
+ "TECH:G87"
+ ,
+ "title":
+ "Providing closed captions"
+ }
+ ,
+ {
+ "id":
+ "TECH:G87"
+ ,
+ "title":
+ "Providing closed captions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SM11"
+ ,
+ "title":
+ "Providing captions through synchronized text streams in SMIL 1.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:SM12"
+ ,
+ "title":
+ "Providing captions through synchronized text streams in SMIL 2.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:H95"
+ ,
+ "title":
+ "Using the track element to provide captions"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F8"
+ ,
+ "title":
+ "Failure of Success Criterion 1.2.2 due to captions omitting some dialogue or important sound effects"
+ }
+ ,
+ {
+ "id":
+ "TECH:F75"
+ ,
+ "title":
+ "Failure of Success Criterion 1.2.2 by providing synchronized media without captions when the synchronized media presents more information than is presented on the page"
+ }
+ ,
+ {
+ "id":
+ "TECH:F74"
+ ,
+ "title":
+ "Failure of Success Criterion 1.2.2 and 1.2.8 due to not labeling a synchronized media alternative to text as an alternative"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:audio-description-or-media-alternative-prerecorded",
+ "alt_id": ["media-equiv-audio-desc"],
+ "num": "1.2.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Audio Description or Media Alternative (Prerecorded)",
+ "title": "An alternative for time-based media or audio description of the prerecorded video content is provided for synchronized media, except when the media is a media alternative for text and is clearly labeled as such.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G69"
+ ,
+ "title":
+ "Providing an alternative for time based media"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G58"
+ ,
+ "title":
+ "Placing a link to the alternative for time-based media immediately next to the non-text content"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:future-audio-description-or-media-alternative-prerecorded-1"
+ ,
+ "title":
+ "Linking to the alternative for time-based media using one of the following techniques"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H53"
+ ,
+ "title":
+ "Using the body of the object element"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G78"
+ ,
+ "title":
+ "Providing a second, user-selectable, audio track that includes audio descriptions"
+ }
+ ,
+ {
+ "id":
+ "TECH:G173"
+ ,
+ "title":
+ "Providing a version of a movie with audio descriptions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SM6"
+ ,
+ "title":
+ "Providing audio description in SMIL 1.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:SM7"
+ ,
+ "title":
+ "Providing audio description in SMIL 2.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-audio-description-or-media-alternative-prerecorded-1"
+ ,
+ "title":
+ "Using any player that supports audio and video"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G8"
+ ,
+ "title":
+ "Providing a movie with extended audio descriptions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SM1"
+ ,
+ "title":
+ "Adding extended audio description in SMIL 1.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:SM2"
+ ,
+ "title":
+ "Adding extended audio description in SMIL 2.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-audio-description-or-media-alternative-prerecorded-1"
+ ,
+ "title":
+ "Using any player that supports audio and video"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G203"
+ ,
+ "title":
+ "Using a static text alternative to describe a talking head video"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:H96"
+ ,
+ "title":
+ "Using the track element to provide audio descriptions"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:captions-live",
+ "alt_id": ["media-equiv-real-time-captions"],
+ "num": "1.2.4",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Captions (Live)",
+ "title": "Captions are provided for all live audio content in synchronized media.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"and": [
+
+ {
+ "id":
+ "TECH:G9"
+ ,
+ "title":
+ "Creating captions for live synchronized media"
+ }
+ ,
+ {
+ "id":
+ "TECH:G93"
+ ,
+ "title":
+ "Providing open (always visible) captions"
+ }
+
+ ]}
+ ,
+ {"and": [
+
+ {
+ "id":
+ "TECH:G9"
+ ,
+ "title":
+ "Creating captions for live synchronized media"
+ }
+ ,
+ {
+ "id":
+ "TECH:G87"
+ ,
+ "title":
+ "Providing closed captions"
+ }
+
+ ]}
+ ,
+ {"and": [
+
+ {
+ "id":
+ "TECH:G9"
+ ,
+ "title":
+ "Creating captions for live synchronized media"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SM11"
+ ,
+ "title":
+ "Providing captions through synchronized text streams in SMIL 1.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:SM12"
+ ,
+ "title":
+ "Providing captions through synchronized text streams in SMIL 2.0"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G87"
+ ,
+ "title":
+ "Providing closed captions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SM11"
+ ,
+ "title":
+ "Providing captions through synchronized text streams in SMIL 1.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:SM12"
+ ,
+ "title":
+ "Providing captions through synchronized text streams in SMIL 2.0"
+ }
+
+ ]
+
+ }
+
+ ]}
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:audio-description-prerecorded",
+ "alt_id": ["media-equiv-audio-desc-only"],
+ "num": "1.2.5",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Audio Description (Prerecorded)",
+ "title": "Audio description is provided for all prerecorded video content in synchronized media.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G78"
+ ,
+ "title":
+ "Providing a second, user-selectable, audio track that includes audio descriptions"
+ }
+ ,
+ {
+ "id":
+ "TECH:G173"
+ ,
+ "title":
+ "Providing a version of a movie with audio descriptions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SM6"
+ ,
+ "title":
+ "Providing audio description in SMIL 1.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:SM7"
+ ,
+ "title":
+ "Providing audio description in SMIL 2.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-audio-description-prerecorded-1"
+ ,
+ "title":
+ "Using any player that supports audio and video"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G8"
+ ,
+ "title":
+ "Providing a movie with extended audio descriptions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SM1"
+ ,
+ "title":
+ "Adding extended audio description in SMIL 1.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:SM2"
+ ,
+ "title":
+ "Adding extended audio description in SMIL 2.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-audio-description-prerecorded-1"
+ ,
+ "title":
+ "Using any player that supports audio and video"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G203"
+ ,
+ "title":
+ "Using a static text alternative to describe a talking head video"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:H96"
+ ,
+ "title":
+ "Using the track element to provide audio descriptions"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:sign-language-prerecorded",
+ "alt_id": ["media-equiv-sign"],
+ "num": "1.2.6",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Sign Language (Prerecorded)",
+ "title": "Sign language interpretation is provided for all prerecorded audio content in synchronized media.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G54"
+ ,
+ "title":
+ "Including a sign language interpreter in the video stream"
+ }
+ ,
+ {
+ "id":
+ "TECH:G81"
+ ,
+ "title":
+ "Providing a synchronized video of the sign language interpreter that can be displayed in a different viewport or overlaid on the image by the player"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SM13"
+ ,
+ "title":
+ "Providing sign language interpretation through synchronized video streams in SMIL 1.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:SM14"
+ ,
+ "title":
+ "Providing sign language interpretation through synchronized video streams in SMIL 2.0"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:extended-audio-description-prerecorded",
+ "alt_id": ["media-equiv-extended-ad"],
+ "num": "1.2.7",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Extended Audio Description (Prerecorded)",
+ "title": "Where pauses in foreground audio are insufficient to allow audio descriptions to convey the sense of the video, extended audio description is provided for all prerecorded video content in synchronized media.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G8"
+ ,
+ "title":
+ "Providing a movie with extended audio descriptions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SM1"
+ ,
+ "title":
+ "Adding extended audio description in SMIL 1.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:SM2"
+ ,
+ "title":
+ "Adding extended audio description in SMIL 2.0"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-extended-audio-description-prerecorded-1"
+ ,
+ "title":
+ "Using any player that supports audio and video"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:H96"
+ ,
+ "title":
+ "Using the track element to provide audio descriptions"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:media-alternative-prerecorded",
+ "alt_id": ["media-equiv-text-doc"],
+ "num": "1.2.8",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Media Alternative (Prerecorded)",
+ "title": "An alternative for time-based media is provided for all prerecorded synchronized media and for all prerecorded video-only media.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If the content is prerecorded synchronized media:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G69"
+ ,
+ "title":
+ "Providing an alternative for time based media"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G58"
+ ,
+ "title":
+ "Placing a link to the alternative for time-based media immediately next to the non-text content"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:future-media-alternative-prerecorded-1"
+ ,
+ "title":
+ "Linking to the alternative for time-based media using one of the following techniques"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H53"
+ ,
+ "title":
+ "Using the body of the object element"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation B: If the content is prerecorded video-only:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G159"
+ ,
+ "title":
+ "Providing an alternative for time-based media for video-only content"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F74"
+ ,
+ "title":
+ "Failure of Success Criterion 1.2.2 and 1.2.8 due to not labeling a synchronized media alternative to text as an alternative"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:audio-only-live",
+ "alt_id": ["media-equiv-live-audio-only"],
+ "num": "1.2.9",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Audio-only (Live)",
+ "title": "An alternative for time-based media that presents equivalent information for live audio-only content is provided.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G151"
+ ,
+ "title":
+ "Providing a link to a text transcript of a prepared statement or script if the script is followed"
+ }
+ ,
+ {
+ "id":
+ "TECH:G150"
+ ,
+ "title":
+ "Providing text based alternatives for live audio-only content"
+ }
+ ,
+ {
+ "id":
+ "TECH:G157"
+ ,
+ "title":
+ "Incorporating a live audio captioning service into a Web page"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ },
+ {
+ "id": "WCAG2:adaptable",
+ "alt_id": ["content-structure-separation"],
+ "num": "1.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Adaptable",
+ "title": "Create content that can be presented in different ways (for example simpler layout) without losing information or structure.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:info-and-relationships",
+ "alt_id": ["content-structure-separation-programmatic"],
+ "num": "1.3.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Info and Relationships",
+ "title": "Information, structure, and relationships conveyed through presentation can be programmatically determined or are available in text.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: The technology provides semantic structure to make information and relationships conveyed through presentation programmatically determinable:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:ARIA11"
+ ,
+ "title":
+ "Using ARIA landmarks to identify regions of a page"
+ }
+ ,
+ {
+ "id":
+ "TECH:H101"
+ ,
+ "title":
+ "Using semantic HTML elements to identify regions of a page"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA12"
+ ,
+ "title":
+ "Using role=heading to identify headings"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA13"
+ ,
+ "title":
+ "Using aria-labelledby to name regions and landmarks"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA16"
+ ,
+ "title":
+ "Using aria-labelledby to provide a name for user interface controls"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA17"
+ ,
+ "title":
+ "Using grouping roles to identify related form controls"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA20"
+ ,
+ "title":
+ "Using the region role to identify a region of the page"
+ }
+ ,
+ {"and": [
+
+ {
+ "id":
+ "TECH:G115"
+ ,
+ "title":
+ "Using semantic elements to mark up structure"
+ }
+ ,
+ {
+ "id":
+ "TECH:H49"
+ ,
+ "title":
+ "Using semantic markup to mark emphasized or special text"
+ }
+
+ ]}
+ ,
+ {
+ "id":
+ "TECH:G117"
+ ,
+ "title":
+ "Using text to convey information that is conveyed by variations in presentation of text"
+ }
+ ,
+ {
+ "id":
+ "TECH:G140"
+ ,
+ "title":
+ "Separating information and structure from presentation to enable different presentations"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA24"
+ ,
+ "title":
+ "Semantically identifying a font icon with role=\"img\""
+ }
+ ,
+ {
+ "id":
+ "TECH:future-info-and-relationships-1"
+ ,
+ "title":
+ "Making information and relationships conveyed through presentation programmatically determinable using the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G138"
+ ,
+ "title":
+ "Using semantic markup whenever color cues are used"
+ }
+ ,
+ {
+ "id":
+ "TECH:H51"
+ ,
+ "title":
+ "Using table markup to present tabular information"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF6"
+ ,
+ "title":
+ "Using table elements for table markup in PDF Documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF20"
+ ,
+ "title":
+ "Using Adobe Acrobat Pro's Table Editor to repair mistagged tables"
+ }
+ ,
+ {
+ "id":
+ "TECH:H39"
+ ,
+ "title":
+ "Using caption elements to associate data table captions with data tables"
+ }
+ ,
+ {
+ "id":
+ "TECH:H63"
+ ,
+ "title":
+ "Using the scope attribute to associate header cells and data cells in data tables"
+ }
+ ,
+ {
+ "id":
+ "TECH:H43"
+ ,
+ "title":
+ "Using id and headers attributes to associate data cells with header cells in data tables"
+ }
+ ,
+ {
+ "id":
+ "TECH:H44"
+ ,
+ "title":
+ "Using label elements to associate text labels with form controls"
+ }
+ ,
+ {
+ "id":
+ "TECH:H65"
+ ,
+ "title":
+ "Using the title attribute to identify form controls when the label element cannot be used"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF10"
+ ,
+ "title":
+ "Providing labels for interactive form controls in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF12"
+ ,
+ "title":
+ "Providing name, role, value information for form fields in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:H71"
+ ,
+ "title":
+ "Providing a description for groups of form controls using fieldset and legend elements"
+ }
+ ,
+ {
+ "id":
+ "TECH:H85"
+ ,
+ "title":
+ "Using optgroup to group option elements inside a select"
+ }
+ ,
+ {
+ "id":
+ "TECH:H48"
+ ,
+ "title":
+ "Using ol, ul and dl for lists or groups of links"
+ }
+ ,
+ {
+ "id":
+ "TECH:H42"
+ ,
+ "title":
+ "Using h1-h6 to identify headings"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF9"
+ ,
+ "title":
+ "Providing headings by marking content with heading tags in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR21"
+ ,
+ "title":
+ "Using functions of the Document Object Model (DOM) to add content to a page"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF11"
+ ,
+ "title":
+ "Providing links and link text using the Link annotation and the /Link structure element in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF17"
+ ,
+ "title":
+ "Specifying consistent page numbering for PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF21"
+ ,
+ "title":
+ "Using List tags for lists in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:H97"
+ ,
+ "title":
+ "Grouping related links using the nav element"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation B: The technology in use does NOT provide the semantic structure to make the information and relationships conveyed through presentation programmatically determinable:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G117"
+ ,
+ "title":
+ "Using text to convey information that is conveyed by variations in presentation of text"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-info-and-relationships-1"
+ ,
+ "title":
+ "Making information and relationships conveyed through presentation programmatically determinable or available in text using the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:T1"
+ ,
+ "title":
+ "Using standard text formatting conventions for paragraphs"
+ }
+ ,
+ {
+ "id":
+ "TECH:T2"
+ ,
+ "title":
+ "Using standard text formatting conventions for lists"
+ }
+ ,
+ {
+ "id":
+ "TECH:T3"
+ ,
+ "title":
+ "Using standard text formatting conventions for headings"
+ }
+
+ ]
+
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:C22"
+ ,
+ "title":
+ "Using CSS to control visual presentation of text"
+ }
+ ,
+ {
+ "id":
+ "TECH:G162"
+ ,
+ "title":
+ "Positioning labels to maximize predictability of relationships"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA1"
+ ,
+ "title":
+ "Using the aria-describedby property to provide a descriptive label for user interface controls"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA2"
+ ,
+ "title":
+ "Identifying a required field with the aria-required property"
+ }
+ ,
+ {
+ "id":
+ "TECH:G141"
+ ,
+ "title":
+ "Organizing a page using headings"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F2"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 due to using changes in text presentation to convey information without using the appropriate markup or text"
+ }
+ ,
+ {
+ "id":
+ "TECH:F33"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 and 1.3.2 due to using white space characters to create multiple columns in plain text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:F34"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 and 1.3.2 due to using white space characters to format tables in plain text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:F42"
+ ,
+ "title":
+ "Failure of Success Criteria 1.3.1, 2.1.1, 2.1.3, or 4.1.2 when emulating links"
+ }
+ ,
+ {
+ "id":
+ "TECH:F43"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 due to using structural markup in a way that does not represent relationships in the content"
+ }
+ ,
+ {
+ "id":
+ "TECH:F46"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 due to using th elements, layout tables"
+ }
+ ,
+ {
+ "id":
+ "TECH:F48"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 due to using the pre element to markup tabular information"
+ }
+ ,
+ {
+ "id":
+ "TECH:F87"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 due to inserting non-decorative content by using ::before and ::after pseudo-elements and the 'content' property in CSS"
+ }
+ ,
+ {
+ "id":
+ "TECH:F90"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 for incorrectly associating table headers and content via the headers and id attributes"
+ }
+ ,
+ {
+ "id":
+ "TECH:F91"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 for not correctly marking up table headers"
+ }
+ ,
+ {
+ "id":
+ "TECH:F92"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 due to the use of role presentation on content which conveys semantic information"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:meaningful-sequence",
+ "alt_id": ["content-structure-separation-sequence"],
+ "num": "1.3.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Meaningful Sequence",
+ "title": "When the sequence in which content is presented affects its meaning, a correct reading sequence can be programmatically determined.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G57"
+ ,
+ "title":
+ "Ordering the content in a meaningful sequence"
+ }
+ ,
+ {
+ "id":
+ "TECH:G57"
+ ,
+ "title":
+ "Ordering the content in a meaningful sequence"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H34"
+ ,
+ "title":
+ "Using a Unicode right-to-left mark (RLM) or left-to-right mark (LRM) to mix text direction inline"
+ }
+ ,
+ {
+ "id":
+ "TECH:H56"
+ ,
+ "title":
+ "Using the dir attribute on an inline element to resolve problems with nested directional runs"
+ }
+ ,
+ {
+ "id":
+ "TECH:C6"
+ ,
+ "title":
+ "Positioning content based on structural markup"
+ }
+ ,
+ {
+ "id":
+ "TECH:C8"
+ ,
+ "title":
+ "Using CSS letter-spacing to control spacing within a word"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:C27"
+ ,
+ "title":
+ "Making the DOM order match the visual order"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF3"
+ ,
+ "title":
+ "Ensuring correct tab and reading order in PDF documents"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F34"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 and 1.3.2 due to using white space characters to format tables in plain text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:F33"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.1 and 1.3.2 due to using white space characters to create multiple columns in plain text content"
+ }
+ ,
+ {
+ "id":
+ "TECH:F32"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.2 due to using white space characters to control spacing within a word"
+ }
+ ,
+ {
+ "id":
+ "TECH:F49"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.2 due to using an HTML layout table that does not make sense when linearized"
+ }
+ ,
+ {
+ "id":
+ "TECH:F1"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.2 due to changing the meaning of content by positioning information with CSS"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:sensory-characteristics",
+ "alt_id": ["content-structure-separation-understanding"],
+ "num": "1.3.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Sensory Characteristics",
+ "title": "Instructions provided for understanding and operating content do not rely solely on sensory characteristics of components such as shape, color, size, visual location, orientation, or sound.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G96"
+ ,
+ "title":
+ "Providing textual identification of items that otherwise rely only on sensory information to be understood"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F14"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.3 due to identifying content only by its shape or location"
+ }
+ ,
+ {
+ "id":
+ "TECH:F26"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.3 due to using a graphical symbol alone to convey information"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:orientation",
+ "alt_id": [],
+ "num": "1.3.4",
+ "versions": ["2.1", "2.2"],
+ "level": "AA",
+ "handle": "Orientation",
+ "title": "Content does not restrict its view and operation to a single display orientation, such as portrait or landscape, unless a specific display orientation is essential.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G214"
+ ,
+ "title":
+ "Using a control to allow access to content in different orientations which is otherwise restricted"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F97"
+ ,
+ "title":
+ "Failure due to locking the orientation to landscape or portrait view"
+ }
+ ,
+ {
+ "id":
+ "TECH:F100"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.4 due to showing a message asking to reorient device"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:identify-input-purpose",
+ "alt_id": [],
+ "num": "1.3.5",
+ "versions": ["2.1", "2.2"],
+ "level": "AA",
+ "handle": "Identify Input Purpose",
+ "title": "The purpose of each input field collecting information about the user can be programmatically determined when:",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:H98"
+ ,
+ "title":
+ "Using HTML 5.2 autocomplete attributes"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F107"
+ ,
+ "title":
+ "Failure of Success Criterion 1.3.5 due to incorrect autocomplete attribute values"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:identify-purpose",
+ "alt_id": [],
+ "num": "1.3.6",
+ "versions": ["2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Identify Purpose",
+ "title": "In content implemented using markup languages, the purpose of user interface components, icons, and regions can be programmatically determined.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:future-identify-purpose-1"
+ ,
+ "title":
+ "Programmatically indicating the purpose of icons, regions and user interface components"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA11"
+ ,
+ "title":
+ "Using ARIA landmarks to identify regions of a page"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-identify-purpose-1"
+ ,
+ "title":
+ "Using microdata to markup user interface components (future link)"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:future-identify-purpose-1"
+ ,
+ "title":
+ "Enabling user agents to find the version of the content that best fits their needs"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-identify-purpose-1"
+ ,
+ "title":
+ "Using semantics to identify important features (e.g., coga-simplification=\"simplest\")"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-identify-purpose-1"
+ ,
+ "title":
+ "Using aria-invalid and aria-required"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ },
+ {
+ "id": "WCAG2:distinguishable",
+ "alt_id": ["visual-audio-contrast"],
+ "num": "1.4",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Distinguishable",
+ "title": "Make it easier for users to see and hear content including separating foreground from background.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:use-of-color",
+ "alt_id": ["visual-audio-contrast-without-color"],
+ "num": "1.4.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Use of Color",
+ "title": "Color is not used as the only visual means of conveying information, indicating an action, prompting a response, or distinguishing a visual element.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If the color of particular words, backgrounds, or other content is used to indicate information:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G14"
+ ,
+ "title":
+ "Ensuring that information conveyed by color differences is also available in text"
+ }
+ ,
+ {
+ "id":
+ "TECH:G205"
+ ,
+ "title":
+ "Including a text cue for colored form control labels"
+ }
+ ,
+ {
+ "id":
+ "TECH:G182"
+ ,
+ "title":
+ "Ensuring that additional visual cues are available when text color differences are used to convey information"
+ }
+ ,
+ {
+ "id":
+ "TECH:G183"
+ ,
+ "title":
+ "Using a contrast ratio of 3:1 with surrounding text and providing additional visual cues on hover for links or controls where color alone is used to identify them"
+ }
+
+ ]},
+ {"title": "Situation B: If color is used within an image to convey information:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G111"
+ ,
+ "title":
+ "Using color and pattern"
+ }
+ ,
+ {
+ "id":
+ "TECH:G14"
+ ,
+ "title":
+ "Ensuring that information conveyed by color differences is also available in text"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:C15"
+ ,
+ "title":
+ "Using CSS to change the presentation of a user interface component when it receives focus"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F13"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 and 1.4.1 due to having a text alternative that does not include information that is conveyed by color differences in the image"
+ }
+ ,
+ {
+ "id":
+ "TECH:F73"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.1 due to creating links that are not visually evident without color vision"
+ }
+ ,
+ {
+ "id":
+ "TECH:F81"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.1 due to identifying required or error fields using color differences only"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:audio-control",
+ "alt_id": ["visual-audio-contrast-dis-audio"],
+ "num": "1.4.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Audio Control",
+ "title": "If any audio on a Web page plays automatically for more than 3 seconds, either a mechanism is available to pause or stop the audio, or a mechanism is available to control audio volume independently from the overall system volume level.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G60"
+ ,
+ "title":
+ "Playing a sound that turns off automatically within three seconds"
+ }
+ ,
+ {
+ "id":
+ "TECH:G170"
+ ,
+ "title":
+ "Providing a control near the beginning of the Web page that turns off sounds that play automatically"
+ }
+ ,
+ {
+ "id":
+ "TECH:G171"
+ ,
+ "title":
+ "Playing sounds only on user request"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F23"
+ ,
+ "title":
+ "Failure of 1.4.2 due to playing a sound longer than 3 seconds where there is no mechanism to turn it off"
+ }
+ ,
+ {
+ "id":
+ "TECH:F93"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.2 for absence of a way to pause or stop an HTML5 media element that autoplays"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:contrast-minimum",
+ "alt_id": ["visual-audio-contrast-contrast"],
+ "num": "1.4.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Contrast (Minimum)",
+ "title": "The visual presentation of text and images of text has a contrast ratio of at least 4.5:1, except for the following:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Large Text",
+ "text": "Large-scale text and images of large-scale text have a contrast ratio of at least 3:1;"
+ },
+ {
+ "handle": "Incidental",
+ "text": "Text or images of text that are part of an inactive user interface component, that are pure decoration, that are not visible to anyone, or that are part of a picture that contains significant other visual content, have no contrast requirement."
+ },
+ {
+ "handle": "Logotypes",
+ "text": "Text that is part of a logo or brand name has no contrast requirement."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: text is less than 18 point if not bold and less than 14 point if bold",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G18"
+ ,
+ "title":
+ "Ensuring that a contrast ratio of at least 4.5:1 exists between text (and images of text) and background behind the text"
+ }
+ ,
+ {
+ "id":
+ "TECH:G148"
+ ,
+ "title":
+ "Not specifying background color, not specifying text color, and not using technology features that change those defaults"
+ }
+ ,
+ {
+ "id":
+ "TECH:G174"
+ ,
+ "title":
+ "Providing a control with a sufficient contrast ratio that allows users to switch to a presentation that uses sufficient contrast"
+ }
+
+ ]},
+ {"title": "Situation B: text is at least 18 point if not bold and at least 14 point if bold",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G145"
+ ,
+ "title":
+ "Ensuring that a contrast ratio of at least 3:1 exists between text (and images of text) and background behind the text"
+ }
+ ,
+ {
+ "id":
+ "TECH:G148"
+ ,
+ "title":
+ "Not specifying background color, not specifying text color, and not using technology features that change those defaults"
+ }
+ ,
+ {
+ "id":
+ "TECH:G174"
+ ,
+ "title":
+ "Providing a control with a sufficient contrast ratio that allows users to switch to a presentation that uses sufficient contrast"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:G156"
+ ,
+ "title":
+ "Using a technology that has commonly-available user agents that can change the foreground and background of blocks of text"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F24"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.3, 1.4.6 and 1.4.8 due to specifying foreground colors without specifying background colors or vice versa"
+ }
+ ,
+ {
+ "id":
+ "TECH:F83"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.3 and 1.4.6 due to using background images that do not provide sufficient contrast with foreground text (or images of text)"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:resize-text",
+ "alt_id": ["visual-audio-contrast-scale"],
+ "num": "1.4.4",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Resize Text",
+ "title": "Except for captions and images of text, text can be resized without assistive technology up to 200 percent without loss of content or functionality.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G142"
+ ,
+ "title":
+ "Using a technology that has commonly-available user agents that support zoom"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-resize-text-1"
+ ,
+ "title":
+ "Ensuring that text containers resize when the text resizes AND using measurements that are relative to other measurements in the content by using one or more of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:C28"
+ ,
+ "title":
+ "Specifying the size of text containers using em units"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-resize-text-1"
+ ,
+ "title":
+ "Techniques for relative measurements"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:C12"
+ ,
+ "title":
+ "Using percent for font sizes"
+ }
+ ,
+ {
+ "id":
+ "TECH:C13"
+ ,
+ "title":
+ "Using named font sizes"
+ }
+ ,
+ {
+ "id":
+ "TECH:C14"
+ ,
+ "title":
+ "Using em units for font sizes"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:future-resize-text-1"
+ ,
+ "title":
+ "Techniques for text container resizing"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SCR34"
+ ,
+ "title":
+ "Calculating size and position in a way that scales with text size"
+ }
+ ,
+ {
+ "id":
+ "TECH:G146"
+ ,
+ "title":
+ "Using liquid layout"
+ }
+
+ ]
+
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G178"
+ ,
+ "title":
+ "Providing controls on the Web page that allow users to incrementally change the size of all text on the page up to 200 percent"
+ }
+ ,
+ {
+ "id":
+ "TECH:G179"
+ ,
+ "title":
+ "Ensuring that there is no loss of content or functionality when the text resizes and text containers do not change their width"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:C17"
+ ,
+ "title":
+ "Scaling form elements which contain text"
+ }
+ ,
+ {
+ "id":
+ "TECH:C20"
+ ,
+ "title":
+ "Using relative measurements to set column widths so that lines can average 80 characters or less when the browser is resized"
+ }
+ ,
+ {
+ "id":
+ "TECH:C22"
+ ,
+ "title":
+ "Using CSS to control visual presentation of text"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F69"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.4 when resizing visually rendered text up to 200 percent causes the text, image or controls to be clipped, truncated or obscured"
+ }
+ ,
+ {
+ "id":
+ "TECH:F80"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.4 when text-based form controls do not resize when visually rendered text is resized up to 200%"
+ }
+ ,
+ {
+ "id":
+ "TECH:F94"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.4 due to incorrect use of viewport units to resize text"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:images-of-text",
+ "alt_id": ["visual-audio-contrast-text-presentation"],
+ "num": "1.4.5",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Images of Text",
+ "title": "If the technologies being used can achieve the visual presentation, text is used to convey information rather than images of text except for the following:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Customizable",
+ "text": "The image of text can be visually customized to the user's requirements;"
+ },
+ {
+ "handle": "Essential",
+ "text": "A particular presentation of text is essential to the information being conveyed."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:C22"
+ ,
+ "title":
+ "Using CSS to control visual presentation of text"
+ }
+ ,
+ {
+ "id":
+ "TECH:C30"
+ ,
+ "title":
+ "Using CSS to replace text with images of text and providing user interface controls to switch"
+ }
+ ,
+ {
+ "id":
+ "TECH:G140"
+ ,
+ "title":
+ "Separating information and structure from presentation to enable different presentations"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF7"
+ ,
+ "title":
+ "Performing OCR on a scanned PDF document to provide actual text"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:contrast-enhanced",
+ "alt_id": ["visual-audio-contrast7"],
+ "num": "1.4.6",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Contrast (Enhanced)",
+ "title": "The visual presentation of text and images of text has a contrast ratio of at least 7:1, except for the following:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Large Text",
+ "text": "Large-scale text and images of large-scale text have a contrast ratio of at least 4.5:1;"
+ },
+ {
+ "handle": "Incidental",
+ "text": "Text or images of text that are part of an inactive user interface component, that are pure decoration, that are not visible to anyone, or that are part of a picture that contains significant other visual content, have no contrast requirement."
+ },
+ {
+ "handle": "Logotypes",
+ "text": "Text that is part of a logo or brand name has no contrast requirement."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: text is less than 18 point if not bold and less than 14 point if bold",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G17"
+ ,
+ "title":
+ "Ensuring that a contrast ratio of at least 7:1 exists between text (and images of text) and background behind the text"
+ }
+ ,
+ {
+ "id":
+ "TECH:G148"
+ ,
+ "title":
+ "Not specifying background color, not specifying text color, and not using technology features that change those defaults"
+ }
+ ,
+ {
+ "id":
+ "TECH:G174"
+ ,
+ "title":
+ "Providing a control with a sufficient contrast ratio that allows users to switch to a presentation that uses sufficient contrast"
+ }
+
+ ]},
+ {"title": "Situation B: text is as least 18 point if not bold and at least 14 point if bold",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G18"
+ ,
+ "title":
+ "Ensuring that a contrast ratio of at least 4.5:1 exists between text (and images of text) and background behind the text"
+ }
+ ,
+ {
+ "id":
+ "TECH:G148"
+ ,
+ "title":
+ "Not specifying background color, not specifying text color, and not using technology features that change those defaults"
+ }
+ ,
+ {
+ "id":
+ "TECH:G174"
+ ,
+ "title":
+ "Providing a control with a sufficient contrast ratio that allows users to switch to a presentation that uses sufficient contrast"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:G156"
+ ,
+ "title":
+ "Using a technology that has commonly-available user agents that can change the foreground and background of blocks of text"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F24"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.3, 1.4.6 and 1.4.8 due to specifying foreground colors without specifying background colors or vice versa"
+ }
+ ,
+ {
+ "id":
+ "TECH:F83"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.3 and 1.4.6 due to using background images that do not provide sufficient contrast with foreground text (or images of text)"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:low-or-no-background-audio",
+ "alt_id": ["visual-audio-contrast-noaudio"],
+ "num": "1.4.7",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Low or No Background Audio",
+ "title": "For prerecorded audio-only content that (1) contains primarily speech in the foreground, (2) is not an audio CAPTCHA or audio logo, and (3) is not vocalization intended to be primarily musical expression such as singing or rapping, at least one of the following is true:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "No Background",
+ "text": "The audio does not contain background sounds."
+ },
+ {
+ "handle": "Turn Off",
+ "text": "The background sounds can be turned off."
+ },
+ {
+ "handle": "20 dB",
+ "text": "The background sounds are at least 20 decibels lower than the foreground speech content, with the exception of occasional sounds that last for only one or two seconds. Per the definition of \"decibel,\" background sound that meets this requirement will be approximately four times quieter than the foreground speech content."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G56"
+ ,
+ "title":
+ "Mixing audio files so that non-speech sounds are at least 20 decibels lower than the speech audio content"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:visual-presentation",
+ "alt_id": ["visual-audio-contrast-visual-presentation"],
+ "num": "1.4.8",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Visual Presentation",
+ "title": "For the visual presentation of blocks of text, a mechanism is available to achieve the following:",
+
+ "techniques": [
+ {"sufficient": [
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F24"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.3, 1.4.6 and 1.4.8 due to specifying foreground colors without specifying background colors or vice versa"
+ }
+ ,
+ {
+ "id":
+ "TECH:F88"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.8 due to using text that is justified (aligned to both the left and the right margins)"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:images-of-text-no-exception",
+ "alt_id": ["visual-audio-contrast-text-images"],
+ "num": "1.4.9",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Images of Text (No Exception)",
+ "title": "Images of text are only used for pure decoration or where a particular presentation of text is essential to the information being conveyed.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:C22"
+ ,
+ "title":
+ "Using CSS to control visual presentation of text"
+ }
+ ,
+ {
+ "id":
+ "TECH:C30"
+ ,
+ "title":
+ "Using CSS to replace text with images of text and providing user interface controls to switch"
+ }
+ ,
+ {
+ "id":
+ "TECH:G140"
+ ,
+ "title":
+ "Separating information and structure from presentation to enable different presentations"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF7"
+ ,
+ "title":
+ "Performing OCR on a scanned PDF document to provide actual text"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:C12"
+ ,
+ "title":
+ "Using percent for font sizes"
+ }
+ ,
+ {
+ "id":
+ "TECH:C13"
+ ,
+ "title":
+ "Using named font sizes"
+ }
+ ,
+ {
+ "id":
+ "TECH:C14"
+ ,
+ "title":
+ "Using em units for font sizes"
+ }
+ ,
+ {
+ "id":
+ "TECH:C8"
+ ,
+ "title":
+ "Using CSS letter-spacing to control spacing within a word"
+ }
+ ,
+ {
+ "id":
+ "TECH:C6"
+ ,
+ "title":
+ "Positioning content based on structural markup"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:reflow",
+ "alt_id": [],
+ "num": "1.4.10",
+ "versions": ["2.1", "2.2"],
+ "level": "AA",
+ "handle": "Reflow",
+ "title": "Content can be presented without loss of information or functionality, and without requiring scrolling in two dimensions for:",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:C32"
+ ,
+ "title":
+ "Using media queries and grid CSS to reflow columns"
+ }
+ ,
+ {
+ "id":
+ "TECH:C31"
+ ,
+ "title":
+ "Using CSS Flexbox to reflow content"
+ }
+ ,
+ {
+ "id":
+ "TECH:C33"
+ ,
+ "title":
+ "Allowing for Reflow with Long URLs and Strings of Text"
+ }
+ ,
+ {
+ "id":
+ "TECH:C38"
+ ,
+ "title":
+ "Using CSS width, max-width and flexbox to fit labels and inputs"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR34"
+ ,
+ "title":
+ "Calculating size and position in a way that scales with text size"
+ }
+ ,
+ {
+ "id":
+ "TECH:G206"
+ ,
+ "title":
+ "Providing options within the content to switch to a layout that does not require the user to scroll horizontally to read a line of text"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-reflow-1"
+ ,
+ "title":
+ "Using PDF/UA when creating PDFs (Potential future technique)"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:C34"
+ ,
+ "title":
+ "Using media queries to un-fixing sticky headers / footers"
+ }
+ ,
+ {
+ "id":
+ "TECH:C37"
+ ,
+ "title":
+ "Using CSS max-width and height to fit images"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-reflow-1"
+ ,
+ "title":
+ "CSS, Reflowing simple data tables (Potential future technique)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-reflow-1"
+ ,
+ "title":
+ "CSS, Fitting data cells within the width of the viewport (Potential future technique)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-reflow-1"
+ ,
+ "title":
+ "Mechanism to allow mobile view at any time (Potential future technique)"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F102"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.10 due to content disappearing and not being available when content has reflowed"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:non-text-contrast",
+ "alt_id": [],
+ "num": "1.4.11",
+ "versions": ["2.1", "2.2"],
+ "level": "AA",
+ "handle": "Non-text Contrast",
+ "title": "The visual presentation of the following have a contrast ratio of at least 3:1 against adjacent color(s):",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "User Interface Components",
+ "text": "Visual information required to identify user interface components and states, except for inactive components or where the appearance of the component is determined by the user agent and not modified by the author;"
+ },
+ {
+ "handle": "Graphical Objects",
+ "text": "Parts of graphics required to understand the content, except when a particular presentation of graphics is essential to the information being conveyed."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: Color is used to identify user interface components or used to identify user interface component states",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G195"
+ ,
+ "title":
+ "Using an author-supplied, visible focus indicator"
+ }
+ ,
+ {
+ "id":
+ "TECH:G174"
+ ,
+ "title":
+ "Providing a control with a sufficient contrast ratio that allows users to switch to a presentation that uses sufficient contrast"
+ }
+
+ ]},
+ {"title": "Situation B: Color is required to understand graphical content",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G207"
+ ,
+ "title":
+ "Ensuring that a contrast ratio of 3:1 is provided for icons"
+ }
+ ,
+ {
+ "id":
+ "TECH:G209"
+ ,
+ "title":
+ "Provide sufficient contrast at the boundaries between adjoining colors"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F78"
+ ,
+ "title":
+ "Failure of Success Criterion 2.4.7 due to styling element outlines and borders in a way that removes or renders non-visible the visual focus indicator"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:text-spacing",
+ "alt_id": [],
+ "num": "1.4.12",
+ "versions": ["2.1", "2.2"],
+ "level": "AA",
+ "handle": "Text Spacing",
+ "title": "In content implemented using markup languages that support the following text style properties, no loss of content or functionality occurs by setting all of the following and by changing no other style property:",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:C36"
+ ,
+ "title":
+ "Allowing for text spacing override"
+ }
+ ,
+ {
+ "id":
+ "TECH:C35"
+ ,
+ "title":
+ "Allowing for text spacing without wrapping"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:C8"
+ ,
+ "title":
+ "Using CSS letter-spacing to control spacing within a word"
+ }
+ ,
+ {
+ "id":
+ "TECH:C21"
+ ,
+ "title":
+ "Specifying line spacing in CSS"
+ }
+ ,
+ {
+ "id":
+ "TECH:C28"
+ ,
+ "title":
+ "Specifying the size of text containers using em units"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F104"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.12 due to clipped or overlapped content when text spacing is adjusted"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:content-on-hover-or-focus",
+ "alt_id": [],
+ "num": "1.4.13",
+ "versions": ["2.1", "2.2"],
+ "level": "AA",
+ "handle": "Content on Hover or Focus",
+ "title": "Where receiving and then removing pointer hover or keyboard focus triggers additional content to become visible and then hidden, the following are true:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Dismissible",
+ "text": "A mechanism is available to dismiss the additional content without moving pointer hover or keyboard focus, unless the additional content communicates an input error or does not obscure or replace other content;"
+ },
+ {
+ "handle": "Hoverable",
+ "text": "If pointer hover can trigger the additional content, then the pointer can be moved over the additional content without the additional content disappearing;"
+ },
+ {
+ "handle": "Persistent",
+ "text": "The additional content remains visible until the hover or focus trigger is removed, the user dismisses it, or its information is no longer valid."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:SCR39"
+ ,
+ "title":
+ "Making content on focus or hover hoverable, dismissible, and persistent"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-content-on-hover-or-focus-1"
+ ,
+ "title":
+ "ARIA: Using role=\"tooltip\" (Potential future technique)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-content-on-hover-or-focus-1"
+ ,
+ "title":
+ "CSS: Using hover and focus pseudo classes (Potential future technique)"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F95"
+ ,
+ "title":
+ "Failure of Success Criterion 1.4.13 due to content shown on hover not being hoverable"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-content-on-hover-or-focus-1"
+ ,
+ "title":
+ "Failure to make content dismissable without moving pointer hover or keyboard focus (Potential future technique)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-content-on-hover-or-focus-1"
+ ,
+ "title":
+ "Failure to meet by content on hover or focus not remaining visible until dismissed or invalid (Potential future technique)"
+ }
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ }
+ ]
+ },
+ {
+ "id": "WCAG2:operable",
+ "num": "2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Operable",
+ "title": "User interface components and navigation must be operable.",
+ "guidelines": [
+
+ {
+ "id": "WCAG2:keyboard-accessible",
+ "alt_id": ["keyboard-operation"],
+ "num": "2.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Keyboard Accessible",
+ "title": "Make all functionality available from a keyboard.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:keyboard",
+ "alt_id": ["keyboard-operation-keyboard-operable"],
+ "num": "2.1.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Keyboard",
+ "title": "All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes, except where the underlying function requires input that depends on the path of the user's movement and not just the endpoints.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G202"
+ ,
+ "title":
+ "Ensuring keyboard control for all functionality"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-keyboard-1"
+ ,
+ "title":
+ "Ensuring keyboard control by using one of the following techniques."
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H91"
+ ,
+ "title":
+ "Using HTML form controls and links"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF3"
+ ,
+ "title":
+ "Ensuring correct tab and reading order in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF11"
+ ,
+ "title":
+ "Providing links and link text using the Link annotation and the /Link structure element in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF23"
+ ,
+ "title":
+ "Providing interactive form controls in PDF documents"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G90"
+ ,
+ "title":
+ "Providing keyboard-triggered event handlers"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SCR20"
+ ,
+ "title":
+ "Using both keyboard and other device-specific functions"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR35"
+ ,
+ "title":
+ "Making actions keyboard accessible by using the onclick event of anchors and buttons"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR2"
+ ,
+ "title":
+ "Using redundant keyboard and mouse event handlers"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:SCR29"
+ ,
+ "title":
+ "Adding keyboard-accessible actions to static HTML elements"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F54"
+ ,
+ "title":
+ "Failure of Success Criterion 2.1.1 due to using only pointing-device-specific event handlers (including gesture) for a function"
+ }
+ ,
+ {
+ "id":
+ "TECH:F55"
+ ,
+ "title":
+ "Failure of Success Criteria 2.1.1, 2.4.7, and 3.2.1 due to using script to remove focus when focus is received"
+ }
+ ,
+ {
+ "id":
+ "TECH:F42"
+ ,
+ "title":
+ "Failure of Success Criteria 1.3.1, 2.1.1, 2.1.3, or 4.1.2 when emulating links"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:no-keyboard-trap",
+ "alt_id": ["keyboard-operation-trapping"],
+ "num": "2.1.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "No Keyboard Trap",
+ "title": "If keyboard focus can be moved to a component of the page using a keyboard interface, then focus can be moved away from that component using only a keyboard interface, and, if it requires more than unmodified arrow or tab keys or other standard exit methods, the user is advised of the method for moving focus away.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G21"
+ ,
+ "title":
+ "Ensuring that users are not trapped in content"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F10"
+ ,
+ "title":
+ "Failure of Success Criterion 2.1.2 and Conformance Requirement 5 due to combining multiple content formats in a way that traps users inside one format type"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:keyboard-no-exception",
+ "alt_id": ["keyboard-operation-all-funcs"],
+ "num": "2.1.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Keyboard (No Exception)",
+ "title": "All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes.",
+
+ "techniques": [
+ {"sufficient": [
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:character-key-shortcuts",
+ "alt_id": [],
+ "num": "2.1.4",
+ "versions": ["2.1", "2.2"],
+ "level": "A",
+ "handle": "Character Key Shortcuts",
+ "title": "If a keyboard shortcut is implemented in content using only letter (including upper- and lower-case letters), punctuation, number, or symbol characters, then at least one of the following is true:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Turn off",
+ "text": "A mechanism is available to turn the shortcut off;"
+ },
+ {
+ "handle": "Remap",
+ "text": "A mechanism is available to remap the shortcut to include one or more non-printable keyboard keys (e.g., Ctrl, Alt);"
+ },
+ {
+ "handle": "Active only on focus",
+ "text": "The keyboard shortcut for a user interface component is only active when that component has focus."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G217"
+ ,
+ "title":
+ "Providing a mechanism to allow users to remap or turn off character key shortcuts"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F99"
+ ,
+ "title":
+ "Failure of Success Criterion 2.1.4 due to implementing character key shortcuts that cannot be turned off or remapped"
+ }
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ },
+ {
+ "id": "WCAG2:enough-time",
+ "alt_id": ["time-limits"],
+ "num": "2.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Enough Time",
+ "title": "Provide users enough time to read and use content.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:timing-adjustable",
+ "alt_id": ["time-limits-required-behaviors"],
+ "num": "2.2.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Timing Adjustable",
+ "title": "For each time limit that is set by the content, at least one of the following is true:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Turn off",
+ "text": "The user is allowed to turn off the time limit before encountering it; or"
+ },
+ {
+ "handle": "Adjust",
+ "text": "The user is allowed to adjust the time limit before encountering it over a wide range that is at least ten times the length of the default setting; or"
+ },
+ {
+ "handle": "Extend",
+ "text": "The user is warned before time expires and given at least 20 seconds to extend the time limit with a simple action (for example, \"press the space bar\"), and the user is allowed to extend the time limit at least ten times; or"
+ },
+ {
+ "handle": "Real-time Exception",
+ "text": "The time limit is a required part of a real-time event (for example, an auction), and no alternative to the time limit is possible; or"
+ },
+ {
+ "handle": "Essential Exception",
+ "text": "The time limit is essential and extending it would invalidate the activity; or"
+ },
+ {
+ "handle": "20 Hour Exception",
+ "text": "The time limit is longer than 20 hours."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If there are session time limits:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G133"
+ ,
+ "title":
+ "Providing a checkbox on the first page of a multipart form that allows users to ask for longer session time limit or no session time limit"
+ }
+ ,
+ {
+ "id":
+ "TECH:G198"
+ ,
+ "title":
+ "Providing a way for the user to turn the time limit off"
+ }
+
+ ]},
+ {"title": "Situation B: If a time limit is controlled by a script on the page:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G198"
+ ,
+ "title":
+ "Providing a way for the user to turn the time limit off"
+ }
+ ,
+ {
+ "id":
+ "TECH:G180"
+ ,
+ "title":
+ "Providing the user with a means to set the time limit to 10 times the default time limit"
+ }
+ ,
+ {"and": [
+
+ {
+ "id":
+ "TECH:SCR16"
+ ,
+ "title":
+ "Providing a script that warns the user a time limit is about to expire"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR1"
+ ,
+ "title":
+ "Allowing the user to extend the default time limit"
+ }
+
+ ]}
+
+ ]},
+ {"title": "Situation C: If there are time limits on reading:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G4"
+ ,
+ "title":
+ "Allowing the content to be paused and restarted from where it was paused"
+ }
+ ,
+ {
+ "id":
+ "TECH:G198"
+ ,
+ "title":
+ "Providing a way for the user to turn the time limit off"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR33"
+ ,
+ "title":
+ "Using script to scroll content, and providing a mechanism to pause it"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR36"
+ ,
+ "title":
+ "Providing a mechanism to allow users to display moving, scrolling, or auto-updating text in a static window or area"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F40"
+ ,
+ "title":
+ "Failure due to using meta redirect with a time limit"
+ }
+ ,
+ {
+ "id":
+ "TECH:F41"
+ ,
+ "title":
+ "Failure of Success Criterion 2.2.1, 2.2.4, and 3.2.5 due to using meta refresh to reload the page"
+ }
+ ,
+ {
+ "id":
+ "TECH:F58"
+ ,
+ "title":
+ "Failure of Success Criterion 2.2.1 due to using server-side techniques to automatically redirect pages after a time-out"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:pause-stop-hide",
+ "alt_id": ["time-limits-pause"],
+ "num": "2.2.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Pause, Stop, Hide",
+ "title": "For moving, blinking, scrolling, or auto-updating information, all of the following are true:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Moving, blinking, scrolling",
+ "text": "For any moving, blinking or scrolling information that (1) starts automatically, (2) lasts more than five seconds, and (3) is presented in parallel with other content, there is a mechanism for the user to pause, stop, or hide it unless the movement, blinking, or scrolling is part of an activity where it is essential; and"
+ },
+ {
+ "handle": "Auto-updating",
+ "text": "For any auto-updating information that (1) starts automatically and (2) is presented in parallel with other content, there is a mechanism for the user to pause, stop, or hide it or to control the frequency of the update unless the auto-updating is part of an activity where it is essential."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G4"
+ ,
+ "title":
+ "Allowing the content to be paused and restarted from where it was paused"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR33"
+ ,
+ "title":
+ "Using script to scroll content, and providing a mechanism to pause it"
+ }
+ ,
+ {
+ "id":
+ "TECH:G11"
+ ,
+ "title":
+ "Creating content that blinks for less than 5 seconds"
+ }
+ ,
+ {
+ "id":
+ "TECH:G187"
+ ,
+ "title":
+ "Using a technology to include blinking content that can be turned off via the user agent"
+ }
+ ,
+ {
+ "id":
+ "TECH:G152"
+ ,
+ "title":
+ "Setting animated gif images to stop blinking after n cycles (within 5 seconds)"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR22"
+ ,
+ "title":
+ "Using scripts to control blinking and stop it in five seconds or less"
+ }
+ ,
+ {
+ "id":
+ "TECH:G186"
+ ,
+ "title":
+ "Using a control in the Web page that stops moving, blinking, or auto-updating content"
+ }
+ ,
+ {
+ "id":
+ "TECH:G191"
+ ,
+ "title":
+ "Providing a link, button, or other mechanism that reloads the page without any blinking content"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F16"
+ ,
+ "title":
+ "Failure of Success Criterion 2.2.2 due to including scrolling content where movement is not essential to the activity without also including a mechanism to pause and restart the content"
+ }
+ ,
+ {
+ "id":
+ "TECH:F47"
+ ,
+ "title":
+ "Failure of Success Criterion 2.2.2 due to using the blink element"
+ }
+ ,
+ {
+ "id":
+ "TECH:F4"
+ ,
+ "title":
+ "Failure of Success Criterion 2.2.2 due to using text-decoration:blink without a mechanism to stop it in less than five seconds"
+ }
+ ,
+ {
+ "id":
+ "TECH:F50"
+ ,
+ "title":
+ "Failure of Success Criterion 2.2.2 due to a script that causes a blink effect without a mechanism to stop the blinking at 5 seconds or less"
+ }
+ ,
+ {
+ "id":
+ "TECH:F7"
+ ,
+ "title":
+ "Failure of Success Criterion 2.2.2 due to an object or applet for more than five seconds"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:no-timing",
+ "alt_id": ["time-limits-no-exceptions"],
+ "num": "2.2.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "No Timing",
+ "title": "Timing is not an essential part of the event or activity presented by the content, except for non-interactive synchronized media and real-time events.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G5"
+ ,
+ "title":
+ "Allowing users to complete an activity without any time limit"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:interruptions",
+ "alt_id": ["time-limits-postponed"],
+ "num": "2.2.4",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Interruptions",
+ "title": "Interruptions can be postponed or suppressed by the user, except interruptions involving an emergency.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G75"
+ ,
+ "title":
+ "Providing a mechanism to postpone any updating of content"
+ }
+ ,
+ {
+ "id":
+ "TECH:G76"
+ ,
+ "title":
+ "Providing a mechanism to request an update of the content instead of updating automatically"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR14"
+ ,
+ "title":
+ "Using scripts to make nonessential alerts optional"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F40"
+ ,
+ "title":
+ "Failure due to using meta redirect with a time limit"
+ }
+ ,
+ {
+ "id":
+ "TECH:F41"
+ ,
+ "title":
+ "Failure of Success Criterion 2.2.1, 2.2.4, and 3.2.5 due to using meta refresh to reload the page"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:re-authenticating",
+ "alt_id": ["time-limits-server-timeout"],
+ "num": "2.2.5",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Re-authenticating",
+ "title": "When an authenticated session expires, the user can continue the activity without loss of data after re-authenticating.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:future-re-authenticating-1"
+ ,
+ "title":
+ "Providing options to continue without loss of data using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G105"
+ ,
+ "title":
+ "Saving data so that it can be used after a user re-authenticates"
+ }
+ ,
+ {
+ "id":
+ "TECH:G181"
+ ,
+ "title":
+ "Encoding user data as hidden or encrypted data in a re-authorization page"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F12"
+ ,
+ "title":
+ "Failure of Success Criterion 2.2.5 due to having a session time limit without a mechanism re-authentication"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:timeouts",
+ "alt_id": [],
+ "num": "2.2.6",
+ "versions": ["2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Timeouts",
+ "title": "Users are warned of the duration of any user inactivity that could cause data loss, unless the data is preserved for more than 20 hours when the user does not take any actions.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:future-timeouts-1"
+ ,
+ "title":
+ "Setting a session timeout to occur following at least 20 hours of inactivity."
+ }
+ ,
+ {
+ "id":
+ "TECH:future-timeouts-1"
+ ,
+ "title":
+ "Store user data for more than 20 hours."
+ }
+ ,
+ {
+ "id":
+ "TECH:future-timeouts-1"
+ ,
+ "title":
+ "Provide a warning of the duration of user inactivity at the start of a process."
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ },
+ {
+ "id": "WCAG2:seizures-and-physical-reactions",
+ "alt_id": [],
+ "num": "2.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Seizures and Physical Reactions",
+ "title": "Do not design content in a way that is known to cause seizures or physical reactions.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:three-flashes-or-below-threshold",
+ "alt_id": ["seizure-does-not-violate"],
+ "num": "2.3.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Three Flashes or Below Threshold",
+ "title": "Web pages do not contain anything that flashes more than three times in any one second period, or the flash is below the general flash and red flash thresholds.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G19"
+ ,
+ "title":
+ "Ensuring that no component of the content flashes more than three times in any 1-second period"
+ }
+ ,
+ {
+ "id":
+ "TECH:G176"
+ ,
+ "title":
+ "Keeping the flashing area small enough"
+ }
+ ,
+ {
+ "id":
+ "TECH:G15"
+ ,
+ "title":
+ "Using a tool to ensure that content does not violate the general flash threshold or red flash threshold"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:three-flashes",
+ "alt_id": ["seizure-three-times"],
+ "num": "2.3.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Three Flashes",
+ "title": "Web pages do not contain anything that flashes more than three times in any one second period.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G19"
+ ,
+ "title":
+ "Ensuring that no component of the content flashes more than three times in any 1-second period"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:animation-from-interactions",
+ "alt_id": [],
+ "num": "2.3.3",
+ "versions": ["2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Animation from Interactions",
+ "title": "Motion animation triggered by interaction can be disabled, unless the animation is essential to the functionality or the information being conveyed.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:C39"
+ ,
+ "title":
+ "Using the CSS reduce-motion query to prevent motion"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-animation-from-interactions-1"
+ ,
+ "title":
+ "Gx: Allowing users to set a preference that prevents animation."
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ },
+ {
+ "id": "WCAG2:navigable",
+ "alt_id": ["navigation-mechanisms"],
+ "num": "2.4",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Navigable",
+ "title": "Provide ways to help users navigate, find content, and determine where they are.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:bypass-blocks",
+ "alt_id": ["navigation-mechanisms-skip"],
+ "num": "2.4.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Bypass Blocks",
+ "title": "A mechanism is available to bypass blocks of content that are repeated on multiple Web pages.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:future-bypass-blocks-1"
+ ,
+ "title":
+ "Creating links to skip blocks of repeated material using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G1"
+ ,
+ "title":
+ "Adding a link at the top of each page that goes directly to the main content area"
+ }
+ ,
+ {
+ "id":
+ "TECH:G123"
+ ,
+ "title":
+ "Adding a link at the beginning of a block of repeated content to go to the end of the block"
+ }
+ ,
+ {
+ "id":
+ "TECH:G124"
+ ,
+ "title":
+ "Adding links at the top of the page to each area of the content"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:future-bypass-blocks-1"
+ ,
+ "title":
+ "Grouping blocks of repeated material in a way that can be skipped, using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:ARIA11"
+ ,
+ "title":
+ "Using ARIA landmarks to identify regions of a page"
+ }
+ ,
+ {
+ "id":
+ "TECH:H69"
+ ,
+ "title":
+ "Providing heading elements at the beginning of each section of content"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF9"
+ ,
+ "title":
+ "Providing headings by marking content with heading tags in PDF documents"
+ }
+ ,
+ {"and": [
+
+ {
+ "id":
+ "TECH:H70"
+ ,
+ "title":
+ "Using frame elements to group blocks of repeated material"
+ }
+ ,
+ {
+ "id":
+ "TECH:H64"
+ ,
+ "title":
+ "Using the title attribute of the iframe element"
+ }
+
+ ]}
+ ,
+ {
+ "id":
+ "TECH:SCR28"
+ ,
+ "title":
+ "Using an expandable and collapsible menu to bypass block of content"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:C6"
+ ,
+ "title":
+ "Positioning content based on structural markup"
+ }
+ ,
+ {
+ "id":
+ "TECH:H97"
+ ,
+ "title":
+ "Grouping related links using the nav element"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:page-titled",
+ "alt_id": ["navigation-mechanisms-title"],
+ "num": "2.4.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Page Titled",
+ "title": "Web pages have titles that describe topic or purpose.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G88"
+ ,
+ "title":
+ "Providing descriptive titles for Web pages"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H25"
+ ,
+ "title":
+ "Providing a title using the title element"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF18"
+ ,
+ "title":
+ "Specifying the document title using the Title entry in the document information dictionary of a PDF document"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:G127"
+ ,
+ "title":
+ "Identifying a Web page's relationship to a larger collection of Web pages"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F25"
+ ,
+ "title":
+ "Failure of Success Criterion 2.4.2 due to the title of a Web page not identifying the contents"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:focus-order",
+ "alt_id": ["navigation-mechanisms-focus-order"],
+ "num": "2.4.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Focus Order",
+ "title": "If a Web page can be navigated sequentially and the navigation sequences affect meaning or operation, focusable components receive focus in an order that preserves meaning and operability.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G59"
+ ,
+ "title":
+ "Placing the interactive elements in an order that follows sequences and relationships within the content"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-focus-order-1"
+ ,
+ "title":
+ "Giving focus to elements in an order that follows sequences and relationships within the content using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:C27"
+ ,
+ "title":
+ "Making the DOM order match the visual order"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF3"
+ ,
+ "title":
+ "Ensuring correct tab and reading order in PDF documents"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:future-focus-order-1"
+ ,
+ "title":
+ "Changing a Web page dynamically using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:SCR26"
+ ,
+ "title":
+ "Inserting dynamic content into the Document Object Model immediately following its trigger element"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR37"
+ ,
+ "title":
+ "Creating Custom Dialogs in a Device Independent Way"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR27"
+ ,
+ "title":
+ "Reordering page sections using the Document Object Model"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F44"
+ ,
+ "title":
+ "Failure of Success Criterion 2.4.3 due to using tabindex to create a tab order that does not preserve meaning and operability"
+ }
+ ,
+ {
+ "id":
+ "TECH:F85"
+ ,
+ "title":
+ "Failure of Success Criterion 2.4.3 due to using dialogs or menus that are not adjacent to their trigger control in the sequential navigation order"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:link-purpose-in-context",
+ "alt_id": ["navigation-mechanisms-refs"],
+ "num": "2.4.4",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Link Purpose (In Context)",
+ "title": "The purpose of each link can be determined from the link text alone or from the link text together with its programmatically determined link context, except where the purpose of the link would be ambiguous to users in general.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G91"
+ ,
+ "title":
+ "Providing link text that describes the purpose of a link"
+ }
+ ,
+ {
+ "id":
+ "TECH:H30"
+ ,
+ "title":
+ "Providing link text that describes the purpose of a link for anchor elements"
+ }
+ ,
+ {
+ "id":
+ "TECH:H24"
+ ,
+ "title":
+ "Providing text alternatives for the area elements of image maps"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-link-purpose-in-context-1"
+ ,
+ "title":
+ "Allowing the user to choose short or long link text using one of the techniques below:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G189"
+ ,
+ "title":
+ "Providing a control near the beginning of the Web page that changes the link text"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR30"
+ ,
+ "title":
+ "Using scripts to change the link text"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G53"
+ ,
+ "title":
+ "Identifying the purpose of a link using link text combined with the text of the enclosing sentence"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-link-purpose-in-context-1"
+ ,
+ "title":
+ "Providing a supplemental description of the purpose of a link using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H33"
+ ,
+ "title":
+ "Supplementing link text with the title attribute"
+ }
+ ,
+ {
+ "id":
+ "TECH:C7"
+ ,
+ "title":
+ "Using CSS to hide a portion of the link text"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:future-link-purpose-in-context-1"
+ ,
+ "title":
+ "Identifying the purpose of a link using link text combined with programmatically determined link context using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:ARIA7"
+ ,
+ "title":
+ "Using aria-labelledby for link purpose"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA8"
+ ,
+ "title":
+ "Using aria-label for link purpose"
+ }
+ ,
+ {
+ "id":
+ "TECH:H77"
+ ,
+ "title":
+ "Identifying the purpose of a link using link text combined with its enclosing list item"
+ }
+ ,
+ {
+ "id":
+ "TECH:H78"
+ ,
+ "title":
+ "Identifying the purpose of a link using link text combined with its enclosing paragraph"
+ }
+ ,
+ {
+ "id":
+ "TECH:H79"
+ ,
+ "title":
+ "Identifying the purpose of a link in a data table using the link text combined with its enclosing table cell and associated table header cells"
+ }
+ ,
+ {
+ "id":
+ "TECH:H81"
+ ,
+ "title":
+ "Identifying the purpose of a link in a nested list using link text combined with the parent list item under which the list is nested"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G91"
+ ,
+ "title":
+ "Providing link text that describes the purpose of a link"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:PDF11"
+ ,
+ "title":
+ "Providing links and link text using the Link annotation and the /Link structure element in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF13"
+ ,
+ "title":
+ "Providing replacement text using the /Alt entry for links in PDF documents"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:H2"
+ ,
+ "title":
+ "Combining adjacent image and text links for the same resource"
+ }
+ ,
+ {
+ "id":
+ "TECH:H80"
+ ,
+ "title":
+ "Identifying the purpose of a link using link text combined with the preceding heading element"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F63"
+ ,
+ "title":
+ "Failure of Success Criterion 2.4.4 due to providing link context only in content that is not related to the link"
+ }
+ ,
+ {
+ "id":
+ "TECH:F89"
+ ,
+ "title":
+ "Failure of Success Criteria 2.4.4, 2.4.9 and 4.1.2 due to not providing an accessible name for an image which is the only content in a link"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:multiple-ways",
+ "alt_id": ["navigation-mechanisms-mult-loc"],
+ "num": "2.4.5",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Multiple Ways",
+ "title": "More than one way is available to locate a Web page within a set of Web pages except where the Web Page is the result of, or a step in, a process.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:future-multiple-ways-1"
+ ,
+ "title":
+ "Using two or more of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G125"
+ ,
+ "title":
+ "Providing links to navigate to related Web pages"
+ }
+ ,
+ {
+ "id":
+ "TECH:G64"
+ ,
+ "title":
+ "Providing a Table of Contents"
+ }
+ ,
+ {
+ "id":
+ "TECH:G63"
+ ,
+ "title":
+ "Providing a site map"
+ }
+ ,
+ {
+ "id":
+ "TECH:G161"
+ ,
+ "title":
+ "Providing a search function to help users find content"
+ }
+ ,
+ {
+ "id":
+ "TECH:G126"
+ ,
+ "title":
+ "Providing a list of links to all other Web pages"
+ }
+ ,
+ {
+ "id":
+ "TECH:G185"
+ ,
+ "title":
+ "Linking to all of the pages on the site from the home page"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:H59"
+ ,
+ "title":
+ "Using the link element and navigation tools"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF2"
+ ,
+ "title":
+ "Creating bookmarks in PDF documents"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:headings-and-labels",
+ "alt_id": ["navigation-mechanisms-descriptive"],
+ "num": "2.4.6",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Headings and Labels",
+ "title": "Headings and labels describe topic or purpose.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G130"
+ ,
+ "title":
+ "Providing descriptive headings"
+ }
+ ,
+ {
+ "id":
+ "TECH:G131"
+ ,
+ "title":
+ "Providing descriptive labels"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:focus-visible",
+ "alt_id": ["navigation-mechanisms-focus-visible"],
+ "num": "2.4.7",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Focus Visible",
+ "title": "Any keyboard operable user interface has a mode of operation where the keyboard focus indicator is visible.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G149"
+ ,
+ "title":
+ "Using user interface components that are highlighted by the user agent when they receive focus"
+ }
+ ,
+ {
+ "id":
+ "TECH:C15"
+ ,
+ "title":
+ "Using CSS to change the presentation of a user interface component when it receives focus"
+ }
+ ,
+ {
+ "id":
+ "TECH:G165"
+ ,
+ "title":
+ "Using the default focus indicator for the platform so that high visibility default focus indicators will carry over"
+ }
+ ,
+ {
+ "id":
+ "TECH:G195"
+ ,
+ "title":
+ "Using an author-supplied, visible focus indicator"
+ }
+ ,
+ {
+ "id":
+ "TECH:C40"
+ ,
+ "title":
+ "Creating a two-color focus indicator to ensure sufficient contrast with all components"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR31"
+ ,
+ "title":
+ "Using script to change the background color or border of the element with focus"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F55"
+ ,
+ "title":
+ "Failure of Success Criteria 2.1.1, 2.4.7, and 3.2.1 due to using script to remove focus when focus is received"
+ }
+ ,
+ {
+ "id":
+ "TECH:F78"
+ ,
+ "title":
+ "Failure of Success Criterion 2.4.7 due to styling element outlines and borders in a way that removes or renders non-visible the visual focus indicator"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:location",
+ "alt_id": ["navigation-mechanisms-location"],
+ "num": "2.4.8",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Location",
+ "title": "Information about the user's location within a set of Web pages is available.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G65"
+ ,
+ "title":
+ "Providing a breadcrumb trail"
+ }
+ ,
+ {
+ "id":
+ "TECH:G63"
+ ,
+ "title":
+ "Providing a site map"
+ }
+ ,
+ {
+ "id":
+ "TECH:G128"
+ ,
+ "title":
+ "Indicating current location within navigation bars"
+ }
+ ,
+ {
+ "id":
+ "TECH:G127"
+ ,
+ "title":
+ "Identifying a Web page's relationship to a larger collection of Web pages"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H59"
+ ,
+ "title":
+ "Using the link element and navigation tools"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:PDF14"
+ ,
+ "title":
+ "Providing running headers and footers in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF17"
+ ,
+ "title":
+ "Specifying consistent page numbering for PDF documents"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:link-purpose-link-only",
+ "alt_id": ["navigation-mechanisms-link"],
+ "num": "2.4.9",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Link Purpose (Link Only)",
+ "title": "A mechanism is available to allow the purpose of each link to be identified from link text alone, except where the purpose of the link would be ambiguous to users in general.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:ARIA8"
+ ,
+ "title":
+ "Using aria-label for link purpose"
+ }
+ ,
+ {
+ "id":
+ "TECH:G91"
+ ,
+ "title":
+ "Providing link text that describes the purpose of a link"
+ }
+ ,
+ {
+ "id":
+ "TECH:H30"
+ ,
+ "title":
+ "Providing link text that describes the purpose of a link for anchor elements"
+ }
+ ,
+ {
+ "id":
+ "TECH:H24"
+ ,
+ "title":
+ "Providing text alternatives for the area elements of image maps"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-link-purpose-link-only-1"
+ ,
+ "title":
+ "Allowing the user to choose short or long link text using one of the techniques below:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G189"
+ ,
+ "title":
+ "Providing a control near the beginning of the Web page that changes the link text"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR30"
+ ,
+ "title":
+ "Using scripts to change the link text"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:future-link-purpose-link-only-1"
+ ,
+ "title":
+ "Providing a supplemental description of the purpose of a link using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:C7"
+ ,
+ "title":
+ "Using CSS to hide a portion of the link text"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:future-link-purpose-link-only-1"
+ ,
+ "title":
+ "Semantically indicating links using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:PDF11"
+ ,
+ "title":
+ "Providing links and link text using the Link annotation and the /Link structure element in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF13"
+ ,
+ "title":
+ "Providing replacement text using the /Alt entry for links in PDF documents"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:H2"
+ ,
+ "title":
+ "Combining adjacent image and text links for the same resource"
+ }
+ ,
+ {
+ "id":
+ "TECH:H33"
+ ,
+ "title":
+ "Supplementing link text with the title attribute"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F84"
+ ,
+ "title":
+ "Failure of Success Criterion 2.4.9 due to using a non-specific link such as \"click here\" or \"more\" without a mechanism to change the link text to specific text."
+ }
+ ,
+ {
+ "id":
+ "TECH:F89"
+ ,
+ "title":
+ "Failure of Success Criteria 2.4.4, 2.4.9 and 4.1.2 due to not providing an accessible name for an image which is the only content in a link"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:section-headings",
+ "alt_id": ["navigation-mechanisms-headings"],
+ "num": "2.4.10",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Section Headings",
+ "title": "Section headings are used to organize the content.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G141"
+ ,
+ "title":
+ "Organizing a page using headings"
+ }
+ ,
+ {
+ "id":
+ "TECH:H69"
+ ,
+ "title":
+ "Providing heading elements at the beginning of each section of content"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:focus-not-obscured-minimum",
+ "alt_id": [],
+ "num": "2.4.11",
+ "versions": ["2.2"],
+ "level": "AA",
+ "handle": "Focus Not Obscured (Minimum)",
+ "title": "When a user interface component receives keyboard focus, the component is not entirely hidden due to author-created content.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:C43"
+ ,
+ "title":
+ "Using CSS margin and scroll-margin to un-obscure content"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F110"
+ ,
+ "title":
+ "Failure of Success Criterion 2.4.11 due to a sticky footers or headers hiding focused elements"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:focus-not-obscured-enhanced",
+ "alt_id": [],
+ "num": "2.4.12",
+ "versions": ["2.2"],
+ "level": "AAA",
+ "handle": "Focus Not Obscured (Enhanced)",
+ "title": "When a user interface component receives keyboard focus, no part of the component is hidden by author-created content.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:C43"
+ ,
+ "title":
+ "Using CSS margin and scroll-margin to un-obscure content"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:future-focus-not-obscured-enhanced-1"
+ ,
+ "title":
+ "An interaction that causes content to appear over the component with keyboard focus, visually covering part of the focus indicator. This behavior might be encountered with advertising or promotional material meant to provide more information about a product as the user navigates through a catalogue."
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:focus-appearance",
+ "alt_id": [],
+ "num": "2.4.13",
+ "versions": ["2.2"],
+ "level": "AAA",
+ "handle": "Focus Appearance",
+ "title": "When the keyboard focus indicator is visible, an area of the focus indicator meets all the following:",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G195"
+ ,
+ "title":
+ "Using an author-supplied, visible focus indicator"
+ }
+ ,
+ {
+ "id":
+ "TECH:C40"
+ ,
+ "title":
+ "Creating a two-color focus indicator to ensure sufficient contrast with all components"
+ }
+ ,
+ {
+ "id":
+ "TECH:C41"
+ ,
+ "title":
+ "Creating a strong focus indicator within the component"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:future-focus-appearance-1"
+ ,
+ "title":
+ "Using a CSS border for inline text which can wrap (Potential future technique)"
+ }
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ },
+ {
+ "id": "WCAG2:input-modalities",
+ "alt_id": [],
+ "num": "2.5",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Input Modalities",
+ "title": "Make it easier for users to operate functionality through various inputs beyond keyboard.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:pointer-gestures",
+ "alt_id": [],
+ "num": "2.5.1",
+ "versions": ["2.1", "2.2"],
+ "level": "A",
+ "handle": "Pointer Gestures",
+ "title": "All functionality that uses multipoint or path-based gestures for operation can be operated with a single pointer without a path-based gesture, unless a multipoint or path-based gesture is essential.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G215"
+ ,
+ "title":
+ "Providing controls to achieve the same result as path based or multipoint gestures"
+ }
+ ,
+ {
+ "id":
+ "TECH:G216"
+ ,
+ "title":
+ "Providing single point activation for a control slider"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F105"
+ ,
+ "title":
+ "Failure of Success Criterion 2.5.1 due to providing functionality via a path-based gesture without simple pointer alternative"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:pointer-cancellation",
+ "alt_id": [],
+ "num": "2.5.2",
+ "versions": ["2.1", "2.2"],
+ "level": "A",
+ "handle": "Pointer Cancellation",
+ "title": "For functionality that can be operated using a single pointer, at least one of the following is true:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "No Down-Event",
+ "text": "The down-event of the pointer is not used to execute any part of the function;"
+ },
+ {
+ "handle": "Abort or Undo",
+ "text": "Completion of the function is on the up-event, and a mechanism is available to abort the function before completion or to undo the function after completion;"
+ },
+ {
+ "handle": "Up Reversal",
+ "text": "The up-event reverses any outcome of the preceding down-event;"
+ },
+ {
+ "handle": "Essential",
+ "text": "Completing the function on the down-event is essential."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G210"
+ ,
+ "title":
+ "Ensuring that drag-and-drop actions can be cancelled"
+ }
+ ,
+ {
+ "id":
+ "TECH:G212"
+ ,
+ "title":
+ "Using native controls to ensure functionality is triggered on the up-event."
+ }
+ ,
+ {
+ "id":
+ "TECH:future-pointer-cancellation-1"
+ ,
+ "title":
+ "Touch events are only triggered when touch is removed from a control (Potential future technique)"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F101"
+ ,
+ "title":
+ "Failure of Success Criterion 2.5.2 due to activating a control on the down-event"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:label-in-name",
+ "alt_id": [],
+ "num": "2.5.3",
+ "versions": ["2.1", "2.2"],
+ "level": "A",
+ "handle": "Label in Name",
+ "title": "For user interface components with labels that include text or images of text, the name contains the text that is presented visually.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G208"
+ ,
+ "title":
+ "Including the text of the visible label as part of the accessible name"
+ }
+ ,
+ {
+ "id":
+ "TECH:G211"
+ ,
+ "title":
+ "Matching the accessible name to the visible label"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:future-label-in-name-1"
+ ,
+ "title":
+ "If an icon has no accompanying text, consider using its hover text as its accessible name (Potential future technique)"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F96"
+ ,
+ "title":
+ "Failure due to the accessible name not containing the visible label text"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-label-in-name-1"
+ ,
+ "title":
+ "Accessible name contains the visible label text, but the words of the visible label are not in the same order as they are in the visible label text (Potential future technique)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-label-in-name-1"
+ ,
+ "title":
+ "Accessible name contains the visible label text, but one or more other words are interspersed in the label (Potential future technique)"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:motion-actuation",
+ "alt_id": [],
+ "num": "2.5.4",
+ "versions": ["2.1", "2.2"],
+ "level": "A",
+ "handle": "Motion Actuation",
+ "title": "Functionality that can be operated by device motion or user motion can also be operated by user interface components and responding to the motion can be disabled to prevent accidental actuation, except when:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Supported Interface",
+ "text": "The motion is used to operate functionality through an accessibility supported interface;"
+ },
+ {
+ "handle": "Essential",
+ "text": "The motion is essential for the function and doing so would invalidate the activity."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G213"
+ ,
+ "title":
+ "Provide conventional controls and an application setting for motion activated input"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-motion-actuation-1"
+ ,
+ "title":
+ "GXXX: Supporting system level features which allow the user to disable motion actuation"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F106"
+ ,
+ "title":
+ "Failure due to inability to deactivate motion actuation"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-motion-actuation-1"
+ ,
+ "title":
+ "FXXX: Failure of Success Criterion 2.5.4 due to disrupting or disabling system level features which allow the user to disable motion actuation"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:target-size-enhanced",
+ "alt_id": [],
+ "num": "2.5.5",
+ "versions": ["2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Target Size (Enhanced)",
+ "title": "The size of the target for pointer inputs is at least 44 by 44 CSS pixels except when:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Equivalent",
+ "text": "The target is available through an equivalent link or control on the same page that is at least 44 by 44 CSS pixels;"
+ },
+ {
+ "handle": "Inline",
+ "text": "The target is in a sentence or block of text;"
+ },
+ {
+ "handle": "User Agent Control",
+ "text": "The size of the target is determined by the user agent and is not modified by the author;"
+ },
+ {
+ "handle": "Essential",
+ "text": "A particular presentation of the target is essential to the information being conveyed."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:future-target-size-enhanced-1"
+ ,
+ "title":
+ "Ensuring that targets are at least 44 by 44 CSS pixels."
+ }
+ ,
+ {
+ "id":
+ "TECH:future-target-size-enhanced-1"
+ ,
+ "title":
+ "Ensuring inline links provide sufficiently large activation target."
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:future-target-size-enhanced-1"
+ ,
+ "title":
+ "none documented"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:future-target-size-enhanced-1"
+ ,
+ "title":
+ "Failure of success criterion 2.5.5 due to target being less than 44 by 44 CSS pixels."
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:concurrent-input-mechanisms",
+ "alt_id": [],
+ "num": "2.5.6",
+ "versions": ["2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Concurrent Input Mechanisms",
+ "title": "Web content does not restrict use of input modalities available on a platform except where the restriction is essential, required to ensure the security of the content, or required to respect user settings.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:future-concurrent-input-mechanisms-1"
+ ,
+ "title":
+ "Only using high-level, input-agnostic event handlers, such as focus, blur, click, in Javascript (Potential future technique)."
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F98"
+ ,
+ "title":
+ "Failure due to interactions being limited to touch-only on touchscreen devices"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:dragging-movements",
+ "alt_id": [],
+ "num": "2.5.7",
+ "versions": ["2.2"],
+ "level": "AA",
+ "handle": "Dragging Movements",
+ "title": "All functionality that uses a dragging movement for operation can be achieved by a single pointer without dragging, unless dragging is essential or the functionality is determined by the user agent and not modified by the author.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G219"
+ ,
+ "title":
+ "Ensuring that an alternative is available for dragging movements that operate on content"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F108"
+ ,
+ "title":
+ "Failure of Success Criterion 2.5.7 Dragging Movements due to not providing a single pointer method for the user to operate a function that does not require a dragging movement"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:target-size-minimum",
+ "alt_id": [],
+ "num": "2.5.8",
+ "versions": ["2.2"],
+ "level": "AA",
+ "handle": "Target Size (Minimum)",
+ "title": "The size of the target for pointer inputs is at least 24 by 24 CSS pixels, except where:",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:C42"
+ ,
+ "title":
+ "Using min-height and min-width to ensure sufficient target spacing"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ }
+ ]
+ },
+ {
+ "id": "WCAG2:understandable",
+ "num": "3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Understandable",
+ "title": "Information and the operation of the user interface must be understandable.",
+ "guidelines": [
+
+ {
+ "id": "WCAG2:readable",
+ "alt_id": ["meaning"],
+ "num": "3.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Readable",
+ "title": "Make text content readable and understandable.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:language-of-page",
+ "alt_id": ["meaning-doc-lang-id"],
+ "num": "3.1.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Language of Page",
+ "title": "The default human language of each Web page can be programmatically determined.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:H57"
+ ,
+ "title":
+ "Using the language attribute on the HTML element"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF16"
+ ,
+ "title":
+ "Setting the default language using the /Lang entry in the document catalog of a PDF document"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF19"
+ ,
+ "title":
+ "Specifying the language for a passage or phrase with the Lang entry in PDF documents"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:SVR5"
+ ,
+ "title":
+ "Specifying the default language in the HTTP header"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:language-of-parts",
+ "alt_id": ["meaning-other-lang-id"],
+ "num": "3.1.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Language of Parts",
+ "title": "The human language of each passage or phrase in the content can be programmatically determined except for proper names, technical terms, words of indeterminate language, and words or phrases that have become part of the vernacular of the immediately surrounding text.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:H58"
+ ,
+ "title":
+ "Using language attributes to identify changes in the human language"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF19"
+ ,
+ "title":
+ "Specifying the language for a passage or phrase with the Lang entry in PDF documents"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:unusual-words",
+ "alt_id": ["meaning-idioms"],
+ "num": "3.1.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Unusual Words",
+ "title": "A mechanism is available for identifying specific definitions of words or phrases used in an unusual or restricted way, including idioms and jargon.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If the word or phrase has a unique meaning within the Web page:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G101"
+ ,
+ "title":
+ "Providing the definition of a word or phrase used in an unusual or restricted way"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G55"
+ ,
+ "title":
+ "Linking to definitions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H40"
+ ,
+ "title":
+ "Using description lists"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G112"
+ ,
+ "title":
+ "Using inline definitions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H54"
+ ,
+ "title":
+ "Using the dfn element to identify the defining instance of a word"
+ }
+
+ ]
+
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G101"
+ ,
+ "title":
+ "Providing the definition of a word or phrase used in an unusual or restricted way"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G55"
+ ,
+ "title":
+ "Linking to definitions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H40"
+ ,
+ "title":
+ "Using description lists"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G62"
+ ,
+ "title":
+ "Providing a glossary"
+ }
+ ,
+ {
+ "id":
+ "TECH:G70"
+ ,
+ "title":
+ "Providing a function to search an online dictionary"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation B: If the word or phrase means different things within the same Web page:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G101"
+ ,
+ "title":
+ "Providing the definition of a word or phrase used in an unusual or restricted way"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G55"
+ ,
+ "title":
+ "Linking to definitions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H40"
+ ,
+ "title":
+ "Using description lists"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G112"
+ ,
+ "title":
+ "Using inline definitions"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H54"
+ ,
+ "title":
+ "Using the dfn element to identify the defining instance of a word"
+ }
+
+ ]
+
+ }
+
+ ]
+
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:abbreviations",
+ "alt_id": ["meaning-located"],
+ "num": "3.1.4",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Abbreviations",
+ "title": "A mechanism for identifying the expanded form or meaning of abbreviations is available.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If the abbreviation has only one meaning within the Web page:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G102"
+ ,
+ "title":
+ "Providing the expansion or explanation of an abbreviation"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G97"
+ ,
+ "title":
+ "Providing the first use of an abbreviation immediately before or after the expanded form"
+ }
+ ,
+ {
+ "id":
+ "TECH:G55"
+ ,
+ "title":
+ "Linking to definitions"
+ }
+ ,
+ {
+ "id":
+ "TECH:H28"
+ ,
+ "title":
+ "Providing definitions for abbreviations by using the abbr element"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF8"
+ ,
+ "title":
+ "Providing definitions for abbreviations via an E entry for a structure element"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G102"
+ ,
+ "title":
+ "Providing the expansion or explanation of an abbreviation"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G55"
+ ,
+ "title":
+ "Linking to definitions"
+ }
+ ,
+ {
+ "id":
+ "TECH:G62"
+ ,
+ "title":
+ "Providing a glossary"
+ }
+ ,
+ {
+ "id":
+ "TECH:G70"
+ ,
+ "title":
+ "Providing a function to search an online dictionary"
+ }
+ ,
+ {
+ "id":
+ "TECH:H28"
+ ,
+ "title":
+ "Providing definitions for abbreviations by using the abbr element"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF8"
+ ,
+ "title":
+ "Providing definitions for abbreviations via an E entry for a structure element"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation B: If the abbreviation means different things within the same Web page:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G102"
+ ,
+ "title":
+ "Providing the expansion or explanation of an abbreviation"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G55"
+ ,
+ "title":
+ "Linking to definitions"
+ }
+ ,
+ {
+ "id":
+ "TECH:H28"
+ ,
+ "title":
+ "Providing definitions for abbreviations by using the abbr element"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF8"
+ ,
+ "title":
+ "Providing definitions for abbreviations via an E entry for a structure element"
+ }
+
+ ]
+
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:reading-level",
+ "alt_id": ["meaning-supplements"],
+ "num": "3.1.5",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Reading Level",
+ "title": "When text requires reading ability more advanced than the lower secondary education level after removal of proper names and titles, supplemental content, or a version that does not require reading ability more advanced than the lower secondary education level, is available.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G86"
+ ,
+ "title":
+ "Providing a text summary that can be understood by people with lower secondary education level reading ability"
+ }
+ ,
+ {
+ "id":
+ "TECH:G103"
+ ,
+ "title":
+ "Providing visual illustrations, pictures, and symbols to help explain ideas, events, and processes"
+ }
+ ,
+ {
+ "id":
+ "TECH:G79"
+ ,
+ "title":
+ "Providing a spoken version of the text"
+ }
+ ,
+ {
+ "id":
+ "TECH:G153"
+ ,
+ "title":
+ "Making the text easier to read"
+ }
+ ,
+ {
+ "id":
+ "TECH:G160"
+ ,
+ "title":
+ "Providing sign language versions of information, ideas, and processes that must be understood in order to use the content"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:pronunciation",
+ "alt_id": ["meaning-pronunciation"],
+ "num": "3.1.6",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Pronunciation",
+ "title": "A mechanism is available for identifying specific pronunciation of words where meaning of the words, in context, is ambiguous without knowing the pronunciation.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G120"
+ ,
+ "title":
+ "Providing the pronunciation immediately following the word"
+ }
+ ,
+ {
+ "id":
+ "TECH:G121"
+ ,
+ "title":
+ "Linking to pronunciations"
+ }
+ ,
+ {
+ "id":
+ "TECH:G62"
+ ,
+ "title":
+ "Providing a glossary"
+ }
+ ,
+ {
+ "id":
+ "TECH:G163"
+ ,
+ "title":
+ "Using standard diacritical marks that can be turned off"
+ }
+ ,
+ {
+ "id":
+ "TECH:H62"
+ ,
+ "title":
+ "Using the ruby element"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ },
+ {
+ "id": "WCAG2:predictable",
+ "alt_id": ["consistent-behavior"],
+ "num": "3.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Predictable",
+ "title": "Make Web pages appear and operate in predictable ways.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:on-focus",
+ "alt_id": ["consistent-behavior-receive-focus"],
+ "num": "3.2.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "On Focus",
+ "title": "When any user interface component receives focus, it does not initiate a change of context.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G107"
+ ,
+ "title":
+ "Using \"activate\" rather than \"focus\" as a trigger for changes of context"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:G200"
+ ,
+ "title":
+ "Opening new windows and tabs from a link only when necessary"
+ }
+ ,
+ {
+ "id":
+ "TECH:G201"
+ ,
+ "title":
+ "Giving users advanced warning when opening a new window"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F55"
+ ,
+ "title":
+ "Failure of Success Criteria 2.1.1, 2.4.7, and 3.2.1 due to using script to remove focus when focus is received"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:on-input",
+ "alt_id": ["consistent-behavior-unpredictable-change"],
+ "num": "3.2.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "On Input",
+ "title": "Changing the setting of any user interface component does not automatically cause a change of context unless the user has been advised of the behavior before using the component.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G80"
+ ,
+ "title":
+ "Providing a submit button to initiate a change of context"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H32"
+ ,
+ "title":
+ "Providing submit buttons"
+ }
+ ,
+ {
+ "id":
+ "TECH:H84"
+ ,
+ "title":
+ "Using a button with a select element to perform an action"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF15"
+ ,
+ "title":
+ "Providing submit buttons with the submit-form action in PDF forms"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:G13"
+ ,
+ "title":
+ "Describing what will happen before a change to a form control that causes a change of context to occur is made"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR19"
+ ,
+ "title":
+ "Using an onchange event on a select element without causing a change of context"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:G201"
+ ,
+ "title":
+ "Giving users advanced warning when opening a new window"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F36"
+ ,
+ "title":
+ "Failure of Success Criterion 3.2.2 due to automatically submitting a form and given a value"
+ }
+ ,
+ {
+ "id":
+ "TECH:F37"
+ ,
+ "title":
+ "Failure of Success Criterion 3.2.2 due to launching a new window without prior warning when the selection of a radio button, check box or select list is changed"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:consistent-navigation",
+ "alt_id": ["consistent-behavior-consistent-locations"],
+ "num": "3.2.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Consistent Navigation",
+ "title": "Navigational mechanisms that are repeated on multiple Web pages within a set of Web pages occur in the same relative order each time they are repeated, unless a change is initiated by the user.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G61"
+ ,
+ "title":
+ "Presenting repeated components in the same relative order each time they appear"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:PDF14"
+ ,
+ "title":
+ "Providing running headers and footers in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF17"
+ ,
+ "title":
+ "Specifying consistent page numbering for PDF documents"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F66"
+ ,
+ "title":
+ "Failure of Success Criterion 3.2.3 due to presenting navigation links in a different relative order on different pages"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:consistent-identification",
+ "alt_id": ["consistent-behavior-consistent-functionality"],
+ "num": "3.2.4",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Consistent Identification",
+ "title": "Components that have the same functionality within a set of Web pages are identified consistently.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"and": [
+
+ {
+ "id":
+ "TECH:G197"
+ ,
+ "title":
+ "Using labels, names, and text alternatives consistently for content that has the same functionality"
+ }
+
+ ]}
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F31"
+ ,
+ "title":
+ "Failure of Success Criterion 3.2.4 due to using two different labels for the same function on different Web pages within a set of Web pages"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:change-on-request",
+ "alt_id": ["consistent-behavior-no-extreme-changes-context"],
+ "num": "3.2.5",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Change on Request",
+ "title": "Changes of context are initiated only by user request or a mechanism is available to turn off such changes.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If the Web page allows automatic updates:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G76"
+ ,
+ "title":
+ "Providing a mechanism to request an update of the content instead of updating automatically"
+ }
+
+ ]},
+ {"title": "Situation B: If automatic redirects are possible:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:SVR1"
+ ,
+ "title":
+ "Implementing automatic redirects on the server side instead of on the client side"
+ }
+ ,
+ {
+ "id":
+ "TECH:G110"
+ ,
+ "title":
+ "Using an instant client-side redirect"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H76"
+ ,
+ "title":
+ "Using meta refresh to create an instant client-side redirect"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation C: If the Web page uses pop-up windows:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:future-change-on-request-1"
+ ,
+ "title":
+ "Including pop-up windows using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H83"
+ ,
+ "title":
+ "Using the target attribute to open a new window on user request and indicating this in link text"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR24"
+ ,
+ "title":
+ "Using progressive enhancement to open new windows on user request"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation D: If using an onchange event on a select element:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:SCR19"
+ ,
+ "title":
+ "Using an onchange event on a select element without causing a change of context"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:G200"
+ ,
+ "title":
+ "Opening new windows and tabs from a link only when necessary"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F60"
+ ,
+ "title":
+ "Failure of Success Criterion 3.2.5 due to launching a new window when a user enters text into an input field"
+ }
+ ,
+ {
+ "id":
+ "TECH:F61"
+ ,
+ "title":
+ "Failure of Success Criterion 3.2.5 due to complete change of main content through an automatic update that the user cannot disable from within the content"
+ }
+ ,
+ {
+ "id":
+ "TECH:F9"
+ ,
+ "title":
+ "Failure of Success Criterion 3.2.5 due to changing the context when the user removes focus from a form element"
+ }
+ ,
+ {
+ "id":
+ "TECH:F22"
+ ,
+ "title":
+ "Failure of Success Criterion 3.2.5 due to opening windows that are not requested by the user"
+ }
+ ,
+ {
+ "id":
+ "TECH:F52"
+ ,
+ "title":
+ "Failure of Success Criterion 3.2.1 and 3.2.5 due to opening a new window as soon as a new page is loaded"
+ }
+ ,
+ {
+ "id":
+ "TECH:F40"
+ ,
+ "title":
+ "Failure due to using meta redirect with a time limit"
+ }
+ ,
+ {
+ "id":
+ "TECH:F41"
+ ,
+ "title":
+ "Failure of Success Criterion 2.2.1, 2.2.4, and 3.2.5 due to using meta refresh to reload the page"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:consistent-help",
+ "alt_id": [],
+ "num": "3.2.6",
+ "versions": ["2.2"],
+ "level": "A",
+ "handle": "Consistent Help",
+ "title": "If a Web page contains any of the following help mechanisms, and those mechanisms are repeated on multiple Web pages within a set of Web pages, they occur in the same order relative to other page content, unless a change is initiated by the user:",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G220"
+ ,
+ "title":
+ "Provide a contact-us link in a consistent location"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:future-consistent-help-1"
+ ,
+ "title":
+ "Inconsistent Help Location"
+ }
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ },
+ {
+ "id": "WCAG2:input-assistance",
+ "alt_id": ["minimize-error"],
+ "num": "3.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Input Assistance",
+ "title": "Help users avoid and correct mistakes.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:error-identification",
+ "alt_id": ["minimize-error-identified"],
+ "num": "3.3.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Error Identification",
+ "title": "If an input error is automatically detected, the item that is in error is identified and the error is described to the user in text.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If a form contains fields for which information from the user is mandatory.",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G83"
+ ,
+ "title":
+ "Providing text descriptions to identify required fields that were not completed"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA21"
+ ,
+ "title":
+ "Using Aria-Invalid to Indicate An Error Field"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR18"
+ ,
+ "title":
+ "Providing client-side validation and alert"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF5"
+ ,
+ "title":
+ "Indicating required form controls in PDF forms"
+ }
+
+ ]},
+ {"title": "Situation B: If information provided by the user is required to be in a specific data format or of certain values.",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:ARIA18"
+ ,
+ "title":
+ "Using aria-alertdialog to Identify Errors"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA19"
+ ,
+ "title":
+ "Using ARIA role=alert or Live Regions to Identify Errors"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA21"
+ ,
+ "title":
+ "Using Aria-Invalid to Indicate An Error Field"
+ }
+ ,
+ {
+ "id":
+ "TECH:G84"
+ ,
+ "title":
+ "Providing a text description when the user provides information that is not in the list of allowed values"
+ }
+ ,
+ {
+ "id":
+ "TECH:G85"
+ ,
+ "title":
+ "Providing a text description when user input falls outside the required format or values"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR18"
+ ,
+ "title":
+ "Providing client-side validation and alert"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR32"
+ ,
+ "title":
+ "Providing client-side validation and adding error text via the DOM"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF22"
+ ,
+ "title":
+ "Indicating when user input falls outside the required format or values in PDF forms"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:G139"
+ ,
+ "title":
+ "Creating a mechanism that allows users to jump to errors"
+ }
+ ,
+ {
+ "id":
+ "TECH:G199"
+ ,
+ "title":
+ "Providing success feedback when data is submitted successfully"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:labels-or-instructions",
+ "alt_id": ["minimize-error-cues"],
+ "num": "3.3.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Labels or Instructions",
+ "title": "Labels or instructions are provided when content requires user input.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G131"
+ ,
+ "title":
+ "Providing descriptive labels"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:ARIA1"
+ ,
+ "title":
+ "Using the aria-describedby property to provide a descriptive label for user interface controls"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA9"
+ ,
+ "title":
+ "Using aria-labelledby to concatenate a label from several text nodes"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA17"
+ ,
+ "title":
+ "Using grouping roles to identify related form controls"
+ }
+ ,
+ {
+ "id":
+ "TECH:G89"
+ ,
+ "title":
+ "Providing expected data format and example"
+ }
+ ,
+ {
+ "id":
+ "TECH:G184"
+ ,
+ "title":
+ "Providing text instructions at the beginning of a form or set of fields that describes the necessary input"
+ }
+ ,
+ {
+ "id":
+ "TECH:G162"
+ ,
+ "title":
+ "Positioning labels to maximize predictability of relationships"
+ }
+ ,
+ {
+ "id":
+ "TECH:G83"
+ ,
+ "title":
+ "Providing text descriptions to identify required fields that were not completed"
+ }
+ ,
+ {
+ "id":
+ "TECH:H90"
+ ,
+ "title":
+ "Indicating required form controls using label or legend"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF5"
+ ,
+ "title":
+ "Indicating required form controls in PDF forms"
+ }
+
+ ]
+
+ }
+ ,
+ {
+ "id":
+ "TECH:H44"
+ ,
+ "title":
+ "Using label elements to associate text labels with form controls"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF10"
+ ,
+ "title":
+ "Providing labels for interactive form controls in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:H71"
+ ,
+ "title":
+ "Providing a description for groups of form controls using fieldset and legend elements"
+ }
+ ,
+ {
+ "id":
+ "TECH:G167"
+ ,
+ "title":
+ "Using an adjacent button to label the purpose of a field"
+ }
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:G13"
+ ,
+ "title":
+ "Describing what will happen before a change to a form control that causes a change of context to occur is made"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F82"
+ ,
+ "title":
+ "Failure of Success Criterion 3.3.2 by visually formatting a set of phone number fields but not including a text label"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:error-suggestion",
+ "alt_id": ["minimize-error-suggestions"],
+ "num": "3.3.3",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Error Suggestion",
+ "title": "If an input error is automatically detected and suggestions for correction are known, then the suggestions are provided to the user, unless it would jeopardize the security or purpose of the content.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If information for a field is required to be in a specific data format:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:ARIA18"
+ ,
+ "title":
+ "Using aria-alertdialog to Identify Errors"
+ }
+ ,
+ {
+ "id":
+ "TECH:G85"
+ ,
+ "title":
+ "Providing a text description when user input falls outside the required format or values"
+ }
+ ,
+ {
+ "id":
+ "TECH:G177"
+ ,
+ "title":
+ "Providing suggested correction text"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF22"
+ ,
+ "title":
+ "Indicating when user input falls outside the required format or values in PDF forms"
+ }
+
+ ]},
+ {"title": "Situation B: Information provided by the user is required to be one of a limited set of values:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:ARIA18"
+ ,
+ "title":
+ "Using aria-alertdialog to Identify Errors"
+ }
+ ,
+ {
+ "id":
+ "TECH:G84"
+ ,
+ "title":
+ "Providing a text description when the user provides information that is not in the list of allowed values"
+ }
+ ,
+ {
+ "id":
+ "TECH:G177"
+ ,
+ "title":
+ "Providing suggested correction text"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF22"
+ ,
+ "title":
+ "Indicating when user input falls outside the required format or values in PDF forms"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:G139"
+ ,
+ "title":
+ "Creating a mechanism that allows users to jump to errors"
+ }
+ ,
+ {
+ "id":
+ "TECH:G199"
+ ,
+ "title":
+ "Providing success feedback when data is submitted successfully"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:error-prevention-legal-financial-data",
+ "alt_id": ["minimize-error-reversible"],
+ "num": "3.3.4",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AA",
+ "handle": "Error Prevention (Legal, Financial, Data)",
+ "title": "For Web pages that cause legal commitments or financial transactions for the user to occur, that modify or delete user-controllable data in data storage systems, or that submit user test responses, at least one of the following is true:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Reversible",
+ "text": "Submissions are reversible."
+ },
+ {
+ "handle": "Checked",
+ "text": "Data entered by the user is checked for input errors and the user is provided an opportunity to correct them."
+ },
+ {
+ "handle": "Confirmed",
+ "text": "A mechanism is available for reviewing, confirming, and correcting information before finalizing the submission."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If an application causes a legal transaction to occur, such as making a purchase or submitting an income tax return:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G164"
+ ,
+ "title":
+ "Providing a stated time within which an online request (or transaction) may be amended or canceled by the user after making the request"
+ }
+ ,
+ {
+ "id":
+ "TECH:G98"
+ ,
+ "title":
+ "Providing the ability for the user to review and correct answers before submitting"
+ }
+ ,
+ {
+ "id":
+ "TECH:G155"
+ ,
+ "title":
+ "Providing a checkbox in addition to a submit button"
+ }
+
+ ]},
+ {"title": "Situation B: If an action causes information to be deleted:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G99"
+ ,
+ "title":
+ "Providing the ability to recover deleted information"
+ }
+ ,
+ {
+ "id":
+ "TECH:G168"
+ ,
+ "title":
+ "Requesting confirmation to continue with selected action"
+ }
+ ,
+ {
+ "id":
+ "TECH:G155"
+ ,
+ "title":
+ "Providing a checkbox in addition to a submit button"
+ }
+
+ ]},
+ {"title": "Situation C: If the Web page includes a testing application:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G98"
+ ,
+ "title":
+ "Providing the ability for the user to review and correct answers before submitting"
+ }
+ ,
+ {
+ "id":
+ "TECH:G168"
+ ,
+ "title":
+ "Requesting confirmation to continue with selected action"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:SCR18"
+ ,
+ "title":
+ "Providing client-side validation and alert"
+ }
+ ,
+ {
+ "id":
+ "TECH:G199"
+ ,
+ "title":
+ "Providing success feedback when data is submitted successfully"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:help",
+ "alt_id": ["minimize-error-context-help"],
+ "num": "3.3.5",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Help",
+ "title": "Context-sensitive help is available.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If a form requires text input:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G71"
+ ,
+ "title":
+ "Providing a help link on every Web page"
+ }
+ ,
+ {
+ "id":
+ "TECH:G193"
+ ,
+ "title":
+ "Providing help by an assistant in the Web page"
+ }
+ ,
+ {
+ "id":
+ "TECH:G194"
+ ,
+ "title":
+ "Providing spell checking and suggestions for text input"
+ }
+ ,
+ {
+ "id":
+ "TECH:G184"
+ ,
+ "title":
+ "Providing text instructions at the beginning of a form or set of fields that describes the necessary input"
+ }
+
+ ]},
+ {"title": "Situation B: If a form requires text input in an expected data format:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G89"
+ ,
+ "title":
+ "Providing expected data format and example"
+ }
+ ,
+ {
+ "id":
+ "TECH:G184"
+ ,
+ "title":
+ "Providing text instructions at the beginning of a form or set of fields that describes the necessary input"
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:H89"
+ ,
+ "title":
+ "Using the title attribute to provide context-sensitive help"
+ }
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:error-prevention-all",
+ "alt_id": ["minimize-error-reversible-all"],
+ "num": "3.3.6",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "AAA",
+ "handle": "Error Prevention (All)",
+ "title": "For Web pages that require the user to submit information, at least one of the following is true:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Reversible",
+ "text": "Submissions are reversible."
+ },
+ {
+ "handle": "Checked",
+ "text": "Data entered by the user is checked for input errors and the user is provided an opportunity to correct them."
+ },
+ {
+ "handle": "Confirmed",
+ "text": "A mechanism is available for reviewing, confirming, and correcting information before finalizing the submission."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:redundant-entry",
+ "alt_id": [],
+ "num": "3.3.7",
+ "versions": ["2.2"],
+ "level": "A",
+ "handle": "Redundant Entry",
+ "title": "Information previously entered by or provided to the user that is required to be entered again in the same process is either:",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G221"
+ ,
+ "title":
+ "Provide data from a previous step in a process"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-redundant-entry-1"
+ ,
+ "title":
+ "Not requesting the same information twice (Potential future technique)"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:accessible-authentication-minimum",
+ "alt_id": [],
+ "num": "3.3.8",
+ "versions": ["2.2"],
+ "level": "AA",
+ "handle": "Accessible Authentication (Minimum)",
+ "title": "A cognitive function test (such as remembering a password or solving a puzzle) is not required for any step in an authentication process unless that step provides at least one of the following:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Alternative",
+ "text": "Another authentication method that does not rely on a cognitive function test."
+ },
+ {
+ "handle": "Mechanism",
+ "text": "A mechanism is available to assist the user in completing the cognitive function test."
+ },
+ {
+ "handle": "Object Recognition",
+ "text": "The cognitive function test is to recognize objects."
+ },
+ {
+ "handle": "Personal Content",
+ "text": "The cognitive function test is to identify non-text content the user provided to the Web site."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G218"
+ ,
+ "title":
+ "Email link authentication"
+ }
+ ,
+ {
+ "id":
+ "TECH:H100"
+ ,
+ "title":
+ "Providing properly marked up email and password inputs"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-accessible-authentication-minimum-1"
+ ,
+ "title":
+ "Providing WebAuthn as an alternative to username/password (Potential future technique)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-accessible-authentication-minimum-1"
+ ,
+ "title":
+ "Providing a 3rd party login using OAuth (Potential future technique)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-accessible-authentication-minimum-1"
+ ,
+ "title":
+ "Using two techniques to provide 2 factor authentication (Potential future technique)"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F109"
+ ,
+ "title":
+ "Failure of Success Criterion 3.3.8 and 3.3.9 due to preventing password or code re-entry in the same format"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:accessible-authentication-enhanced",
+ "alt_id": [],
+ "num": "3.3.9",
+ "versions": ["2.2"],
+ "level": "AAA",
+ "handle": "Accessible Authentication (Enhanced)",
+ "title": "A cognitive function test (such as remembering a password or solving a puzzle) is not required for any step in an authentication process unless that step provides at least one of the following:",
+
+ "details": [{
+ "type": "ulist",
+ "items": [
+
+ {
+ "handle": "Alternative",
+ "text": "Another authentication method that does not rely on a cognitive function test."
+ },
+ {
+ "handle": "Mechanism",
+ "text": "A mechanism is available to assist the user in completing the cognitive function test."
+ }
+ ]
+ }],
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G218"
+ ,
+ "title":
+ "Email link authentication"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-accessible-authentication-enhanced-1"
+ ,
+ "title":
+ "Providing a properly marked up email and password inputs (Potential future technique)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-accessible-authentication-enhanced-1"
+ ,
+ "title":
+ "Providing WebAuthn as an alternative to username/password (Potential future technique)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-accessible-authentication-enhanced-1"
+ ,
+ "title":
+ "Providing a 3rd party login using OAuth (Potential future technique)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-accessible-authentication-enhanced-1"
+ ,
+ "title":
+ "Using two techniques to provide 2 factor authentication (Potential future technique)"
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F109"
+ ,
+ "title":
+ "Failure of Success Criterion 3.3.8 and 3.3.9 due to preventing password or code re-entry in the same format"
+ }
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ }
+ ]
+ },
+ {
+ "id": "WCAG2:robust",
+ "num": "4",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Robust",
+ "title": "Content must be robust enough that it can be interpreted by a wide variety of user agents, including assistive technologies.",
+ "guidelines": [
+
+ {
+ "id": "WCAG2:compatible",
+ "alt_id": ["ensure-compat"],
+ "num": "4.1",
+ "versions": ["2.0", "2.1", "2.2"],
+ "handle": "Compatible",
+ "title": "Maximize compatibility with current and future user agents, including assistive technologies.",
+ "successcriteria": [
+
+ {
+ "id": "WCAG2:parsing",
+ "alt_id": ["ensure-compat-parses"],
+ "num": "4.1.1",
+ "versions": ["2.0", "2.1"],
+ "level": "",
+ "handle": "Parsing (Obsolete and removed)",
+ "title": "This criterion was originally adopted to address problems that assistive technology had directly parsing HTML. Assistive technology no longer has any need to directly parse HTML. Consequently, these problems either no longer exist or are addressed by other criteria. This criterion no longer has utility and is removed.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {
+ "id":
+ "TECH:G134"
+ ,
+ "title":
+ "Validating Web pages"
+ }
+ ,
+ {
+ "id":
+ "TECH:G192"
+ ,
+ "title":
+ "Fully conforming to specifications"
+ }
+ ,
+ {
+ "id":
+ "TECH:H88"
+ ,
+ "title":
+ "Using HTML according to spec"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-parsing-1"
+ ,
+ "title":
+ "Ensuring that Web pages can be parsed by using one of the following techniques:"
+ ,
+ "using": [
+
+ {"and": [
+
+ {
+ "id":
+ "TECH:H74"
+ ,
+ "title":
+ "Ensuring that opening and closing tags are used according to specification"
+ }
+ ,
+ {
+ "id":
+ "TECH:H93"
+ ,
+ "title":
+ "Ensuring that id attributes are unique on a Web page"
+ }
+ ,
+ {
+ "id":
+ "TECH:H94"
+ ,
+ "title":
+ "Ensuring that elements do not contain duplicate attributes"
+ }
+
+ ]}
+ ,
+ {
+ "id":
+ "TECH:H75"
+ ,
+ "title":
+ "Ensuring that Web pages are well-formed"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F70"
+ ,
+ "title":
+ "Failure of Success Criterion 4.1.1 due to incorrect use of start and end tags or attribute markup"
+ }
+ ,
+ {
+ "id":
+ "TECH:F77"
+ ,
+ "title":
+ "Failure of Success Criterion 4.1.1 due to duplicate values of type ID"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:name-role-value",
+ "alt_id": ["ensure-compat-rsv"],
+ "num": "4.1.2",
+ "versions": ["2.0", "2.1", "2.2"],
+ "level": "A",
+ "handle": "Name, Role, Value",
+ "title": "For all user interface components (including but not limited to: form elements, links and components generated by scripts), the name and role can be programmatically determined; states, properties, and values that can be set by the user can be programmatically set; and notification of changes to these items is available to user agents, including assistive technologies.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If using a standard user interface component in a markup language (e.g., HTML):",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:ARIA14"
+ ,
+ "title":
+ "Using aria-label to provide an invisible label where a visible label cannot be used"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA16"
+ ,
+ "title":
+ "Using aria-labelledby to provide a name for user interface controls"
+ }
+ ,
+ {
+ "id":
+ "TECH:G108"
+ ,
+ "title":
+ "Using markup features to expose the name and role, allow user-settable properties to be directly set, and provide notification of changes"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:H91"
+ ,
+ "title":
+ "Using HTML form controls and links"
+ }
+ ,
+ {
+ "id":
+ "TECH:H44"
+ ,
+ "title":
+ "Using label elements to associate text labels with form controls"
+ }
+ ,
+ {
+ "id":
+ "TECH:H64"
+ ,
+ "title":
+ "Using the title attribute of the iframe element"
+ }
+ ,
+ {
+ "id":
+ "TECH:H65"
+ ,
+ "title":
+ "Using the title attribute to identify form controls when the label element cannot be used"
+ }
+ ,
+ {
+ "id":
+ "TECH:H88"
+ ,
+ "title":
+ "Using HTML according to spec"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation B: If using script or code to re-purpose a standard user interface component in a markup language:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:future-name-role-value-1"
+ ,
+ "title":
+ "Exposing the names and roles, allowing user-settable properties to be directly set, and providing notification of changes using one of the following techniques:"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:ARIA16"
+ ,
+ "title":
+ "Using aria-labelledby to provide a name for user interface controls"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation C: If using a standard user interface component in a programming technology:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G135"
+ ,
+ "title":
+ "Using the accessibility API features of a technology to expose names and notification of changes"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:PDF10"
+ ,
+ "title":
+ "Providing labels for interactive form controls in PDF documents"
+ }
+ ,
+ {
+ "id":
+ "TECH:PDF12"
+ ,
+ "title":
+ "Providing name, role, value information for form fields in PDF documents"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation D: If creating your own user interface component in a programming language:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:G10"
+ ,
+ "title":
+ "Creating components using a technology that supports the accessibility notification of changes"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:ARIA4"
+ ,
+ "title":
+ "Using a WAI-ARIA role to expose the role of a user interface component"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA5"
+ ,
+ "title":
+ "Using WAI-ARIA state and property attributes to expose the state of a user interface component"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA16"
+ ,
+ "title":
+ "Using aria-labelledby to provide a name for user interface controls"
+ }
+
+ ]
+
+ }
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F59"
+ ,
+ "title":
+ "Failure of Success Criterion 4.1.2 due to using script to make div or span a user interface control in HTML without providing a role for the control"
+ }
+ ,
+ {
+ "id":
+ "TECH:F15"
+ ,
+ "title":
+ "Failure of Success Criterion 4.1.2 due to implementing custom controls that do not use an accessibility API for the technology, or do so incompletely"
+ }
+ ,
+ {
+ "id":
+ "TECH:F20"
+ ,
+ "title":
+ "Failure of Success Criterion 1.1.1 and 4.1.2 due to not updating text alternatives when changes to non-text content occur"
+ }
+ ,
+ {
+ "id":
+ "TECH:F68"
+ ,
+ "title":
+ "Failure of Success Criterion 4.1.2 due to a user interface control not having a programmatically determined name"
+ }
+ ,
+ {
+ "id":
+ "TECH:F79"
+ ,
+ "title":
+ "Failure of Success Criterion 4.1.2 due to the focus state of a user interface component not being programmatically determinable or no notification of change of focus state available"
+ }
+ ,
+ {
+ "id":
+ "TECH:F86"
+ ,
+ "title":
+ "Failure of Success Criterion 4.1.2 due to not providing names for each part of a multi-part form field, such as a US telephone number"
+ }
+ ,
+ {
+ "id":
+ "TECH:F89"
+ ,
+ "title":
+ "Failure of Success Criteria 2.4.4, 2.4.9 and 4.1.2 due to not providing an accessible name for an image which is the only content in a link"
+ }
+
+ ]}]
+ },
+ {
+ "id": "WCAG2:status-messages",
+ "alt_id": [],
+ "num": "4.1.3",
+ "versions": ["2.1", "2.2"],
+ "level": "AA",
+ "handle": "Status Messages",
+ "title": "In content implemented using markup languages, status messages can be programmatically determined through role or properties such that they can be presented to the user by assistive technologies without receiving focus.",
+
+ "techniques": [
+ {"sufficient": [
+
+ {"situations": [
+
+ {"title": "Situation A: If a status message advises on the success or results of an action, or the state of an application:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:ARIA22"
+ ,
+ "title":
+ "Using role=status to present status messages"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G199"
+ ,
+ "title":
+ "Providing success feedback when data is submitted successfully"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation B: If a status message conveys a suggestion, or a warning on the existence of an error:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:ARIA19"
+ ,
+ "title":
+ "Using ARIA role=alert or Live Regions to Identify Errors"
+ ,
+ "using": [
+
+ {
+ "id":
+ "TECH:G83"
+ ,
+ "title":
+ "Providing text descriptions to identify required fields that were not completed"
+ }
+ ,
+ {
+ "id":
+ "TECH:G84"
+ ,
+ "title":
+ "Providing a text description when the user provides information that is not in the list of allowed values"
+ }
+ ,
+ {
+ "id":
+ "TECH:G85"
+ ,
+ "title":
+ "Providing a text description when user input falls outside the required format or values"
+ }
+ ,
+ {
+ "id":
+ "TECH:G177"
+ ,
+ "title":
+ "Providing suggested correction text"
+ }
+ ,
+ {
+ "id":
+ "TECH:G194"
+ ,
+ "title":
+ "Providing spell checking and suggestions for text input"
+ }
+
+ ]
+
+ }
+
+ ]},
+ {"title": "Situation C: If a status message conveys information on the progress of a process:",
+ "techniques": [
+
+ {
+ "id":
+ "TECH:ARIA23"
+ ,
+ "title":
+ "Using role=log to identify sequential information updates"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-status-messages-1"
+ ,
+ "title":
+ "Using role=\"progressbar\" (future link)"
+ }
+ ,
+ {"and": [
+
+ {
+ "id":
+ "TECH:ARIA22"
+ ,
+ "title":
+ "Using role=status to present status messages"
+ }
+ ,
+ {
+ "id":
+ "TECH:G193"
+ ,
+ "title":
+ "Providing help by an assistant in the Web page"
+ }
+
+ ]}
+
+ ]}
+ ]}
+
+ ]},
+ {"advisory": [
+
+ {
+ "id":
+ "TECH:future-status-messages-1"
+ ,
+ "title":
+ "Using aria-live regions with chat clients (future link)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-status-messages-1"
+ ,
+ "title":
+ "Using role=\"marquee\" (future link)"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-status-messages-1"
+ ,
+ "title":
+ "Using role=\"timer\" (future link)"
+ }
+ ,
+ {
+ "id":
+ "TECH:ARIA18"
+ ,
+ "title":
+ "Using aria-alertdialog to Identify Errors"
+ }
+ ,
+ {
+ "id":
+ "TECH:SCR14"
+ ,
+ "title":
+ "Using scripts to make nonessential alerts optional"
+ }
+
+ ]},
+ {"failure": [
+
+ {
+ "id":
+ "TECH:F103"
+ ,
+ "title":
+ "Failure of Success Criterion 4.1.3 due to providing status messages that cannot be programmatically determined through role or properties"
+ }
+ ,
+ {
+ "id":
+ "TECH:future-status-messages-1"
+ ,
+ "title":
+ "Using role=\"alert\" or aria-live=\"assertive\" on content which is not important and time-sensitive (future link)"
+ }
+
+ ]}]
+ }
+ ],
+ "techniques": []
+ }
+ ]
+ }
+ ]
+ }
+
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000000..9fcfa92eb7
--- /dev/null
+++ b/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+ Web Content Accessibility Guidelines {{ versionDecimal }}
+
+
+
Web Content Accessibility Guidelines {{ versionDecimal }}
+
+
+
diff --git a/understanding/22/img/focus-indicator-extra-outline.png b/understanding/22/img/focus-indicator-extra-outline.png
new file mode 100644
index 0000000000..1810f48f4b
Binary files /dev/null and b/understanding/22/img/focus-indicator-extra-outline.png differ
diff --git a/understanding/22/img/focus-indicator-good-adjacent-bad-change.png b/understanding/22/img/focus-indicator-good-adjacent-bad-change.png
new file mode 100644
index 0000000000..b2fbb271f1
Binary files /dev/null and b/understanding/22/img/focus-indicator-good-adjacent-bad-change.png differ
diff --git a/understanding/22/img/focus-indicator-good-change-bad-adjacent.png b/understanding/22/img/focus-indicator-good-change-bad-adjacent.png
new file mode 100644
index 0000000000..49fc670d73
Binary files /dev/null and b/understanding/22/img/focus-indicator-good-change-bad-adjacent.png differ
diff --git a/understanding/22/img/focus-indicator-group-and-star.svg b/understanding/22/img/focus-indicator-group-and-star.svg
new file mode 100644
index 0000000000..f73f7c2172
--- /dev/null
+++ b/understanding/22/img/focus-indicator-group-and-star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicator-group-outline.svg b/understanding/22/img/focus-indicator-group-outline.svg
new file mode 100644
index 0000000000..860e8562a6
--- /dev/null
+++ b/understanding/22/img/focus-indicator-group-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicator-non-text-contrast.html b/understanding/22/img/focus-indicator-non-text-contrast.html
new file mode 100644
index 0000000000..6f2e850483
--- /dev/null
+++ b/understanding/22/img/focus-indicator-non-text-contrast.html
@@ -0,0 +1,47 @@
+
+
+ Figure source: Focus Indicator Custom Shapes
+
+
+
+
Figure source: Focus Indicator Relationship with Non-text Contrast
+
+
Passes Focus Appearance, fails Non-text Contrast
+
+
+
+
+
+
Passes Non-text Contrast, fails Focus Appearance
+
+
+
+
+
+
+
diff --git a/understanding/22/img/focus-indicator-ntc-comparison1.png b/understanding/22/img/focus-indicator-ntc-comparison1.png
new file mode 100644
index 0000000000..fc0a1fa38f
Binary files /dev/null and b/understanding/22/img/focus-indicator-ntc-comparison1.png differ
diff --git a/understanding/22/img/focus-indicator-offset-types.html b/understanding/22/img/focus-indicator-offset-types.html
new file mode 100644
index 0000000000..8f3d1e45da
--- /dev/null
+++ b/understanding/22/img/focus-indicator-offset-types.html
@@ -0,0 +1,91 @@
+
+
+ Figure source: Focus Indicator Offset Types
+
+
+
+
Figure source: Focus Indicator Offset Types
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/understanding/22/img/focus-indicator-offset-types.png b/understanding/22/img/focus-indicator-offset-types.png
new file mode 100644
index 0000000000..2ba42891ca
Binary files /dev/null and b/understanding/22/img/focus-indicator-offset-types.png differ
diff --git a/understanding/22/img/focus-indicator-outerline.png b/understanding/22/img/focus-indicator-outerline.png
index 63fa99975d..873775989e 100644
Binary files a/understanding/22/img/focus-indicator-outerline.png and b/understanding/22/img/focus-indicator-outerline.png differ
diff --git a/understanding/22/img/focus-indicator-select.png b/understanding/22/img/focus-indicator-select.png
new file mode 100644
index 0000000000..089e1d6667
Binary files /dev/null and b/understanding/22/img/focus-indicator-select.png differ
diff --git a/understanding/22/img/focus-indicator-solid-border.png b/understanding/22/img/focus-indicator-solid-border.png
new file mode 100644
index 0000000000..7f8e0f1db3
Binary files /dev/null and b/understanding/22/img/focus-indicator-solid-border.png differ
diff --git a/understanding/22/img/focus-indicator-solid-border.svg b/understanding/22/img/focus-indicator-solid-border.svg
new file mode 100644
index 0000000000..ce4f80676f
--- /dev/null
+++ b/understanding/22/img/focus-indicator-solid-border.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicator-solid-outline.png b/understanding/22/img/focus-indicator-solid-outline.png
new file mode 100644
index 0000000000..dcadc0b8ec
Binary files /dev/null and b/understanding/22/img/focus-indicator-solid-outline.png differ
diff --git a/understanding/22/img/focus-indicator-solid-outline.svg b/understanding/22/img/focus-indicator-solid-outline.svg
new file mode 100644
index 0000000000..433a4c3673
--- /dev/null
+++ b/understanding/22/img/focus-indicator-solid-outline.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicator-star-with-abutted-line.png b/understanding/22/img/focus-indicator-star-with-abutted-line.png
new file mode 100644
index 0000000000..f466e7cfcf
Binary files /dev/null and b/understanding/22/img/focus-indicator-star-with-abutted-line.png differ
diff --git a/understanding/22/img/focus-indicator-star-with-abutted-line.svg b/understanding/22/img/focus-indicator-star-with-abutted-line.svg
new file mode 100644
index 0000000000..595e447fed
--- /dev/null
+++ b/understanding/22/img/focus-indicator-star-with-abutted-line.svg
@@ -0,0 +1,7 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicator-star-with-focus.png b/understanding/22/img/focus-indicator-star-with-focus.png
new file mode 100644
index 0000000000..e1c82cbdc2
Binary files /dev/null and b/understanding/22/img/focus-indicator-star-with-focus.png differ
diff --git a/understanding/22/img/focus-indicator-star-with-focus.svg b/understanding/22/img/focus-indicator-star-with-focus.svg
new file mode 100644
index 0000000000..496f7543bf
--- /dev/null
+++ b/understanding/22/img/focus-indicator-star-with-focus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicator-star-with-light-focus.png b/understanding/22/img/focus-indicator-star-with-light-focus.png
new file mode 100644
index 0000000000..e37af2db88
Binary files /dev/null and b/understanding/22/img/focus-indicator-star-with-light-focus.png differ
diff --git a/understanding/22/img/focus-indicator-star-with-light-focus.svg b/understanding/22/img/focus-indicator-star-with-light-focus.svg
new file mode 100644
index 0000000000..02e0d0e6dc
--- /dev/null
+++ b/understanding/22/img/focus-indicator-star-with-light-focus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicator-star-without-focus.png b/understanding/22/img/focus-indicator-star-without-focus.png
new file mode 100644
index 0000000000..74ad6604c0
Binary files /dev/null and b/understanding/22/img/focus-indicator-star-without-focus.png differ
diff --git a/understanding/22/img/focus-indicator-star-without-focus.svg b/understanding/22/img/focus-indicator-star-without-focus.svg
new file mode 100644
index 0000000000..67157b1a35
--- /dev/null
+++ b/understanding/22/img/focus-indicator-star-without-focus.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicator-strong-dashed-border.png b/understanding/22/img/focus-indicator-strong-dashed-border.png
new file mode 100644
index 0000000000..12589b03bd
Binary files /dev/null and b/understanding/22/img/focus-indicator-strong-dashed-border.png differ
diff --git a/understanding/22/img/focus-indicator-strong-dashed-border.svg b/understanding/22/img/focus-indicator-strong-dashed-border.svg
new file mode 100644
index 0000000000..8852e04f03
--- /dev/null
+++ b/understanding/22/img/focus-indicator-strong-dashed-border.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicator-two-color-thick.png b/understanding/22/img/focus-indicator-two-color-thick.png
new file mode 100644
index 0000000000..aea14637c4
Binary files /dev/null and b/understanding/22/img/focus-indicator-two-color-thick.png differ
diff --git a/understanding/22/img/focus-indicator-two-color-thin.png b/understanding/22/img/focus-indicator-two-color-thin.png
new file mode 100644
index 0000000000..8d5ff4db69
Binary files /dev/null and b/understanding/22/img/focus-indicator-two-color-thin.png differ
diff --git a/understanding/22/img/focus-indicator-two-color.html b/understanding/22/img/focus-indicator-two-color.html
new file mode 100644
index 0000000000..5f145c335c
--- /dev/null
+++ b/understanding/22/img/focus-indicator-two-color.html
@@ -0,0 +1,46 @@
+
+
+ Figure source: Focus Indicator Two Color
+
+
+
+
Figure source: Focus Indicator Two Color
+
+
Passes: the 2px thick black line passes
+
+
+
+
+
Fails: the indicator is 2px thick, but the part of the indicator meeting change contrast is only 1px thick
+
+
+
+
+
+
diff --git a/understanding/22/img/focus-indicator-weak-dashed-border.png b/understanding/22/img/focus-indicator-weak-dashed-border.png
new file mode 100644
index 0000000000..08cde7c6a9
Binary files /dev/null and b/understanding/22/img/focus-indicator-weak-dashed-border.png differ
diff --git a/understanding/22/img/focus-indicator-weak-dashed-border.svg b/understanding/22/img/focus-indicator-weak-dashed-border.svg
new file mode 100644
index 0000000000..1600f1f080
--- /dev/null
+++ b/understanding/22/img/focus-indicator-weak-dashed-border.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicator-whole-star.png b/understanding/22/img/focus-indicator-whole-star.png
new file mode 100644
index 0000000000..dd15c3bbd2
Binary files /dev/null and b/understanding/22/img/focus-indicator-whole-star.png differ
diff --git a/understanding/22/img/focus-indicator-whole-star.svg b/understanding/22/img/focus-indicator-whole-star.svg
new file mode 100644
index 0000000000..b7cbfe4f92
--- /dev/null
+++ b/understanding/22/img/focus-indicator-whole-star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/focus-indicators-passing.png b/understanding/22/img/focus-indicators-passing.png
new file mode 100644
index 0000000000..01fb3531c0
Binary files /dev/null and b/understanding/22/img/focus-indicators-passing.png differ
diff --git a/understanding/22/img/focus-inline-link-outline.png b/understanding/22/img/focus-inline-link-outline.png
new file mode 100644
index 0000000000..8012eed63f
Binary files /dev/null and b/understanding/22/img/focus-inline-link-outline.png differ
diff --git a/understanding/22/img/focus-inline-link.png b/understanding/22/img/focus-inline-link.png
index 67579bedf4..f58e7671a5 100644
Binary files a/understanding/22/img/focus-inline-link.png and b/understanding/22/img/focus-inline-link.png differ
diff --git a/understanding/22/img/pointer-target-example1.png b/understanding/22/img/pointer-target-example1.png
deleted file mode 100644
index 8b8fff1022..0000000000
Binary files a/understanding/22/img/pointer-target-example1.png and /dev/null differ
diff --git a/understanding/22/img/pointer-target-example2.png b/understanding/22/img/pointer-target-example2.png
deleted file mode 100644
index 4822923cae..0000000000
Binary files a/understanding/22/img/pointer-target-example2.png and /dev/null differ
diff --git a/understanding/22/img/pointer-target-example3.png b/understanding/22/img/pointer-target-example3.png
deleted file mode 100644
index d81f88136f..0000000000
Binary files a/understanding/22/img/pointer-target-example3.png and /dev/null differ
diff --git a/understanding/22/img/pointer-target-example4.png b/understanding/22/img/pointer-target-example4.png
deleted file mode 100644
index 0342f9c93a..0000000000
Binary files a/understanding/22/img/pointer-target-example4.png and /dev/null differ
diff --git a/understanding/22/img/pointer-target-example5.png b/understanding/22/img/pointer-target-example5.png
deleted file mode 100644
index be4456a8a3..0000000000
Binary files a/understanding/22/img/pointer-target-example5.png and /dev/null differ
diff --git a/understanding/22/img/target-dropdown.afdesign b/understanding/22/img/target-dropdown.afdesign
new file mode 100644
index 0000000000..1c8e08e9bc
Binary files /dev/null and b/understanding/22/img/target-dropdown.afdesign differ
diff --git a/understanding/22/img/target-dropdown.png b/understanding/22/img/target-dropdown.png
new file mode 100644
index 0000000000..cd1ec5a3a6
Binary files /dev/null and b/understanding/22/img/target-dropdown.png differ
diff --git a/understanding/22/img/target-dropdown.svg b/understanding/22/img/target-dropdown.svg
new file mode 100644
index 0000000000..69c14bcf1d
--- /dev/null
+++ b/understanding/22/img/target-dropdown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/target-large-small-clipping.afdesign b/understanding/22/img/target-large-small-clipping.afdesign
new file mode 100644
index 0000000000..7147bb94b0
Binary files /dev/null and b/understanding/22/img/target-large-small-clipping.afdesign differ
diff --git a/understanding/22/img/target-large-small-clipping.png b/understanding/22/img/target-large-small-clipping.png
new file mode 100644
index 0000000000..cbb4c39844
Binary files /dev/null and b/understanding/22/img/target-large-small-clipping.png differ
diff --git a/understanding/22/img/target-large-small-clipping.svg b/understanding/22/img/target-large-small-clipping.svg
new file mode 100644
index 0000000000..7513c40b4d
--- /dev/null
+++ b/understanding/22/img/target-large-small-clipping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/target-large-small-touching.afdesign b/understanding/22/img/target-large-small-touching.afdesign
new file mode 100644
index 0000000000..43afbd3e00
Binary files /dev/null and b/understanding/22/img/target-large-small-touching.afdesign differ
diff --git a/understanding/22/img/target-large-small-touching.png b/understanding/22/img/target-large-small-touching.png
new file mode 100644
index 0000000000..d54240b8af
Binary files /dev/null and b/understanding/22/img/target-large-small-touching.png differ
diff --git a/understanding/22/img/target-large-small-touching.svg b/understanding/22/img/target-large-small-touching.svg
new file mode 100644
index 0000000000..8a05adbd26
--- /dev/null
+++ b/understanding/22/img/target-large-small-touching.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/target-size-basic.afdesign b/understanding/22/img/target-size-basic.afdesign
new file mode 100644
index 0000000000..533abaf054
Binary files /dev/null and b/understanding/22/img/target-size-basic.afdesign differ
diff --git a/understanding/22/img/target-size-basic.png b/understanding/22/img/target-size-basic.png
new file mode 100644
index 0000000000..92dc95b80c
Binary files /dev/null and b/understanding/22/img/target-size-basic.png differ
diff --git a/understanding/22/img/target-size-basic.svg b/understanding/22/img/target-size-basic.svg
new file mode 100644
index 0000000000..274c2337ef
--- /dev/null
+++ b/understanding/22/img/target-size-basic.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/target-size-bounding-boxes.afdesign b/understanding/22/img/target-size-bounding-boxes.afdesign
new file mode 100644
index 0000000000..378e8214b6
Binary files /dev/null and b/understanding/22/img/target-size-bounding-boxes.afdesign differ
diff --git a/understanding/22/img/target-size-bounding-boxes.png b/understanding/22/img/target-size-bounding-boxes.png
new file mode 100644
index 0000000000..35f8b9aa51
Binary files /dev/null and b/understanding/22/img/target-size-bounding-boxes.png differ
diff --git a/understanding/22/img/target-size-bounding-boxes.svg b/understanding/22/img/target-size-bounding-boxes.svg
new file mode 100644
index 0000000000..9aca20ca03
--- /dev/null
+++ b/understanding/22/img/target-size-bounding-boxes.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/target-size-skewed.afdesign b/understanding/22/img/target-size-skewed.afdesign
new file mode 100644
index 0000000000..5061a64bc4
Binary files /dev/null and b/understanding/22/img/target-size-skewed.afdesign differ
diff --git a/understanding/22/img/target-size-skewed.png b/understanding/22/img/target-size-skewed.png
new file mode 100644
index 0000000000..22153e6b72
Binary files /dev/null and b/understanding/22/img/target-size-skewed.png differ
diff --git a/understanding/22/img/target-size-skewed.svg b/understanding/22/img/target-size-skewed.svg
new file mode 100644
index 0000000000..9f6987679f
--- /dev/null
+++ b/understanding/22/img/target-size-skewed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/target-size-undersized-rounded.afdesign b/understanding/22/img/target-size-undersized-rounded.afdesign
new file mode 100644
index 0000000000..0d14bf90a0
Binary files /dev/null and b/understanding/22/img/target-size-undersized-rounded.afdesign differ
diff --git a/understanding/22/img/target-size-undersized-rounded.png b/understanding/22/img/target-size-undersized-rounded.png
new file mode 100644
index 0000000000..3d92a1b887
Binary files /dev/null and b/understanding/22/img/target-size-undersized-rounded.png differ
diff --git a/understanding/22/img/target-size-undersized-rounded.svg b/understanding/22/img/target-size-undersized-rounded.svg
new file mode 100644
index 0000000000..a308f28063
--- /dev/null
+++ b/understanding/22/img/target-size-undersized-rounded.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/target-spacing-toolbar.afdesign b/understanding/22/img/target-spacing-toolbar.afdesign
new file mode 100644
index 0000000000..bf90181127
Binary files /dev/null and b/understanding/22/img/target-spacing-toolbar.afdesign differ
diff --git a/understanding/22/img/target-spacing-toolbar.png b/understanding/22/img/target-spacing-toolbar.png
new file mode 100644
index 0000000000..895e340014
Binary files /dev/null and b/understanding/22/img/target-spacing-toolbar.png differ
diff --git a/understanding/22/img/target-spacing-toolbar.svg b/understanding/22/img/target-spacing-toolbar.svg
new file mode 100644
index 0000000000..d488b49480
--- /dev/null
+++ b/understanding/22/img/target-spacing-toolbar.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/target-text-buttons-single-row.afdesign b/understanding/22/img/target-text-buttons-single-row.afdesign
new file mode 100644
index 0000000000..a6d9f87570
Binary files /dev/null and b/understanding/22/img/target-text-buttons-single-row.afdesign differ
diff --git a/understanding/22/img/target-text-buttons-single-row.png b/understanding/22/img/target-text-buttons-single-row.png
new file mode 100644
index 0000000000..d1971fe4e4
Binary files /dev/null and b/understanding/22/img/target-text-buttons-single-row.png differ
diff --git a/understanding/22/img/target-text-buttons-single-row.svg b/understanding/22/img/target-text-buttons-single-row.svg
new file mode 100644
index 0000000000..5d2dbfb405
--- /dev/null
+++ b/understanding/22/img/target-text-buttons-single-row.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/img/target-text-buttons-two-rows.afdesign b/understanding/22/img/target-text-buttons-two-rows.afdesign
new file mode 100644
index 0000000000..a9f3d1dbaa
Binary files /dev/null and b/understanding/22/img/target-text-buttons-two-rows.afdesign differ
diff --git a/understanding/22/img/target-text-buttons-two-rows.png b/understanding/22/img/target-text-buttons-two-rows.png
new file mode 100644
index 0000000000..bb78992288
Binary files /dev/null and b/understanding/22/img/target-text-buttons-two-rows.png differ
diff --git a/understanding/22/img/target-text-buttons-two-rows.svg b/understanding/22/img/target-text-buttons-two-rows.svg
new file mode 100644
index 0000000000..9f856f9a66
--- /dev/null
+++ b/understanding/22/img/target-text-buttons-two-rows.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/understanding/22/pointer-target-spacing.html b/understanding/22/pointer-target-spacing.html
deleted file mode 100644
index 729b67f8db..0000000000
--- a/understanding/22/pointer-target-spacing.html
+++ /dev/null
@@ -1,153 +0,0 @@
-
-
-
-
- Understanding Pointer Target Spacing
-
-
-
-
Understanding Pointer Target Spacing
-
-
-
Status
-
This understanding document is part of the draft WCAG 2.2 content. It may change or be removed before the final WCAG 2.2 is published.
-
-
-
-
-
Pointer Target Spacing Success Criterion text
-
-
Pointer Target Spacing
-
-
AA
-
New
-
-
For each target, there is an area with a width and height of at least 44 CSS pixels that includes it, and no other targets, except when:
-
-
Enlarge: A mechanism is available to change the CSS pixel size of each target, or its spacing, so there is an area with a width and height of at least 44 CSS pixels that includes it, and no other targets;
-
Inline: The target is in a sentence or block of text;
-
User agent: The size of the target is controlled by the user agent and is not modified by the author;
-
Essential: A particular presentation of the target is essential to the information being conveyed.
-
-
This criterion has been formulated to make it less likely that users accidentally hit a target adjacent to the one they intend to hit. The group would like feedback from providers of touch-screen devices if there is another way of forming the criterion to better complement the tap-heuristics used.
-
Are there issues with internationalization when describing inline links?
-
Are there issues with pop-over content overlapping targets triggering failures?
-
-
-
-
-
Intent of Pointer Target Spacing
-
-
The intent of this Success Criterion is to ensure targets can easily be activated without accidentally activating an adjacent target. When targets are small, it is difficult for users with hand tremors and those who have difficulty with fine motor movement to activate them accurately. Providing spacing between targets will reduce the likelihood of accidentally activating the wrong control.
-
-
The requirement is for targets that are smaller than 44 x 44px to be included in an area with a width and height of at least 44px each. For the horizontal dimension, this means that the total width of 44px is composed of the width of the target and the width of the spacing that separates it from adjacent targets. The same applies to the height. For example, a target of 24 x 24px would meet the requirement if it had a spacing of 10 px on all sides. If the target is 44 x 44px or larger, no spacing between it and adjacent targets would be required.
-
-
-
There are three exceptions:
-
-
If there is a mechanism to change the target sizes or spacing to meet the minimum, such as a button to change the sizes and layout of the targets.
-
If the target is inline within a sentence there doesn’t need to be a minimum target size.
-
If the spacing of the targets is essential to the information being conveyed there doesn’t need to be a minimum target size.
-
-
-
The requirement is independent of the zoom factor of the page, when users zoom in the CSS pixel size of elements does not change. This means that authors cannot meet it by claiming that the target will have enough spacing or sufficient size if the user zooms into the page.
-
-
The requirement does not apply to the spacing of targets inside unstyled native elements. For example, when a default select element is used, the vertical spacing of option elements inside the select's dropdown list is exempt.
-
-
While the Success Criterion primarily helps touch users by ensuring that activation with the 'fat finger' will not accidentally trigger adjacent targets, it is also useful for mouse or pen users. It reduces the chances of erroneous activation due to a tremor or some other input imprecision.
-
-
As mobile devices generally have internal heuristics to identify which link is closest, spacing can work as effectively as a larger target size.
-
-
-
- The dimension of each icon target in a row is 44 by 44 CSS pixels, so the targets pass this Success Criterion without additional spacing.
-
-
-
-
- The dimension of each icon target in a row is 38 by 38 CSS pixels, so a spacing of 6 CSS pixels is required to arrive at 44 CSS pixels for the combined width and spacing of the target. No adjacent targets are present above and below, i.e., there is sufficient vertical spacing for the height of 38 CSS pixels to be sufficient.
-
-
-
-
- The widths of the button with adjacent neighbors is at least 44 CSS pixels, while the height is only 22 CSS pixels. The target height combined with the vertical spacing above and below exceeds 44 CSS pixels, therefore, the targets pass this Success Criterion.
-
-
-
-
- Fail: Two rows of buttons, all with a height of only 20 CSS pixels. In the top row, buttons all have a width of more than 44 CSS pixels. For the top row, targets above and below are in close proximity. The top spacing of the first row is 4 px while the bottom spacing is 2 px, which adds up to 26 px for target height and vertical spacing combined. Therefore, the buttons in the top row fail the Success Criterion. The button "Pop" in the second row is only 32px wide with no horizontal spacing, so it also fails the Success Criterion even when there is sufficient space below to meet the vertical spacing requirement.
-
-
-
Where targets are embedded inside other targets, the inner target either needs a size of at least 44 x 44 CSS pixels or must be placed at the edge or corner to make sure that there is sufficient adjacent spacing in each dimension.
-
-
-
- Three examples of a person's profile image, which is supposed to be a target leading to another page, and a magnifying glass icon, which is supposed to open a lightbox view of the profile image. In the first example, the magnifying icon is outside the picture and passes. In the second example, the icon overlaps with the top-left corner of the image, but passes due to sufficient spacing top and left. In the third example, the icon sits inside the linked image. Since it is surrounded by an active click area, the icon target is not large enough to pass the success criterion.
-
-
-
Users with different disabilities have different needs for control sizes. It can be beneficial to provide an option to increase the active target area without increasing the visible target size. Another option is to provide a mechanism to control the density of layout and thereby change target size or spacing, or both. This can be beneficial for a wide range of users. For example, users with visual field loss may prefer a more condensed layout with smaller sized controls while users with other forms of low vision may prefer large controls.
-
-
Where user-agents control the size of a target, such as the options in a select drop-down, and the author has not tried to change the size of target with size or padding adjustments, the target is exempted from this criterion. It would be beneficial for users if the minimum size & spacing requirement is met, but where the user-agent has defined the target it is not the authors responsibility.
-
-
-
-
-
Benefits of Pointer Target Spacing
-
Having targets with sufficient target spacing can help all users who may have difficulty in confidently targeting or operating small controls. Users who benefit include, but are not limited to:
-
-
Users who use a mobile device where the touch screen is the primary mode of interaction;
-
Users with mobility impairments such as hand tremors;
-
Users who use a device in environments where they are exposed to shaking such as public transportation;
-
Users who have difficulty with fine motor movements;
-
Users who access a device using one hand;
-
Users with large fingers, or who are operating the device with only a part of their finger or knuckle.
-
-
-
-
-
-
Examples of Pointer Target Spacing
-
-
-
Three buttons are on-screen and the target area of each button is 44 by 44 CSS pixels. Since the target size itself is 44 x 44 px, no additional spacing is required, the Success Criterion passes.
-
A row of buttons, each of which has a horizontal width of more than 44 px, but a height of only 30 px. Since there is sufficient spacing above and below the row of buttons, the Success Criterion passes.
-
Links within a paragraph of text have varying target dimensions. Links within paragraphs of text do not need to meet the 44 by 44 CSS pixels requirements, so the Success Criterion passes.
For steps in a process, information previously entered by or provided to the user that is required on subsequent steps is either:
-
-
auto-populated, or
-
available for the user to select.
-
-
Exception: When re-entering the information is essential.
-
Security verification, such as repeating a password, is considered essential.
-
-
-
-
-
Intent of Redundant Entry
+
Understanding Redundant Entry
+
+
In brief
+
+
Goal
Make it easier for users to complete multi-step processes.
+
What to do
Don't ask for the same information twice in the same session.
+
Why it's important
Some people with cognitive disabilities have difficulty remembering what they entered before.
+
+
-
The intent of this Success Criterion is to ensure that users can successfully navigate multi-step processes. It reduces cognitive effort where information is asked for more than once during steps in a process. It also reduces the need to recall information provided in a previous step.
+
-
This Success Criterion pertains to the current user session, and is not applicable when a user returns after closing a session or navigating away.
+
Intent of Redundant Entry
+
+
The intent of this Success Criterion is to ensure that users can successfully complete multi-step processes. It reduces cognitive effort where information is asked for more than once during a process. It also reduces the need to recall information provided in a previous step.
-
Information that is required to be remembered for input can pose a significant barrier to users with cognitive or memory difficulty. All users experience a natural gradual mental fatigue as they proceed through steps in a process. This fatigue is accelerated by the stress of recalling information from short-term working memory. Users with learning, and cognitive disabilities are highly susceptible to mental fatigue.
+
Information that is required to be remembered for input can pose a significant barrier to users with cognitive or memory difficulties. All users experience a natural gradual mental fatigue as they proceed through steps in a process. This fatigue is accelerated by the stress of recalling information from short-term working memory. Users with learning, and cognitive disabilities are highly susceptible to mental fatigue.
-
Requiring people to recall information already entered in the previous steps can cause them to give up or enter incorrect information. The autocomplete feature of browsers is not considered sufficient because it is the content (the web site) that needs to provide the stored information for a redundant entry, or avoid asking for the same information again.
+
Requiring people to recall information previously entered can cause them to give up or re-enter the same information incorrectly. The autocomplete feature of browsers is not considered sufficient because it is the content (the web site) that needs to provide the stored information for a redundant entry, or avoid asking for the same information again.
-
This Success Criterion does not add a requirement to remember information between sessions, a process is defined on the basis of an activity and does not continue across sessions.
+
This Success Criterion does not add a requirement to store information between sessions. A process is defined on the basis of an activity and is not applicable when a user returns after closing a session or navigating away. However, a process can run across different domains, so if a check-out process includes a 3rd party payment provider, that would be in scope.
+
+
The term "available to select" is not prescriptive. The term allows authors to develop techniques where auto-population is not possible. It can include allowing the user to:
+
+
+
select and populate a field, including from a drop-down;
+
select text from the page and copy it into an input;
+
tick a checkbox to populate inputs with the same values as previously entered (e.g., my billing address is the same as my shipping address).
+
+
+
Data which is "available to select" would need to be on the same page. Ideally, it would be visible by default and closely associated with the input where the data is required. However, it could be elsewhere on a page, including within a show/hide component.
+
+
This Success Criterion does not apply if data is provided by the user with a different method, such as uploading a resume in a document format.
-
This success criterion does not apply if data is provide by the user with a different method, such as uploading a resume in a document format.
+
This Success Criterion does not impact Accessible Authentication (Minimum), for which allowing auto-filling of passwords is a sufficient technique. In that case the filling is performed by the user's browser. Redundant Entry is asking for the website content to make the previous entry available, but not between sessions or for essential purposes such as asking for a password.
+
+
This criterion does not include requirements or exceptions specific to privacy or personally identifiable information (PII), but when implementing techniques such as auto-population, authors should ensure data protection when storing information even temporarily during a process. It is possible to eliminate redundant entry in ways that do not introduce additional privacy risks, but it is also possible that a poor implementation (for meeting this criterion) could leak additional PII.
+
+
Exceptions
-
There is an exception for essential uses of input re-entry for things like password entry (security), or memory games which would not be possible if the previous answers were supplied.
+
There are exceptions for:
+
+
Essential uses of input re-entry for things like memory games which would be invalidated if the previous answers were supplied.
+
Security measures such as preventing a password string from being shown or copied. When creating a password, it should be a unique and complex string and therefore cannot be validated by the author. If the system requires the user to manually create a password that is not displayed, having users re-validate their new string is allowed as an exception.
+
When the previously entered information is no longer valid, it can be requested that the user enter that information again.
+
@@ -46,7 +60,7 @@
Benefits of Redundant Entry
Users with cognitive disabilities experience short-term, working memory difficulty. Not having to repeatedly remember particular information reduces stress and the likelihood of mistakes.
-
Users that experience difficulty forming new memories, recalling information, and other functions related to cognition can complete processes without having to unnecessarily rely on their memory.
+
Users who experience difficulty forming new memories, recalling information, and other functions related to cognition can complete processes without having to unnecessarily rely on their memory.
Users with mobility impairments, for example using switch control or voice input, benefit from a reduced need for text entry.
@@ -57,23 +71,23 @@
Examples of Redundant Entry
A form requests the user’s corporate identification number (ID) in the first step of a process to purchase a new computer. In the 3rd step the user is asked to confirm that the computer will belong to the user (rather than a colleague), and re-shows the ID. It allows the user to change the ID, but defaults to the previously entered one.
-
A form on an e-commerce website allows the user to confirm that the billing address and delivery address are the same address.
+
A form on an e-commerce website allows the user to confirm that the billing address and delivery address are the same address.
+
A search results page pre-fills the search input with the previously entered search term in the same process.
Ensure targets meet a minimum size or have sufficient spacing around them.
+
Why it's important
Some people with physical impairments cannot click small buttons that are close together.
+
+
+
+
+
Intent of Target Size (Minimum)
+
+
The intent of this Success Criterion is to help ensure targets can be easily activated without accidentally activating an adjacent target. Users with dexterity limitations and those who have difficulty with fine motor movement find it difficult to accurately activate small targets when there are other targets that are too close. Providing sufficient size, or sufficient spacing between targets, will reduce the likelihood of accidentally activating the wrong control.
+
Disabilities addressed by this requirement include hand tremors, spasticity, and quadriplegia. Some people with disabilities use specialized input devices instead of a computer mouse or trackpad. Typically these types of input device do not provide as much accuracy as mainstream pointing devices. Meeting this requirement also ensures that touchscreen interfaces are easier to use.
+
This Success Criterion defines a minimum size and, if this can't be met, a minimum spacing. It is still possible to have very small, and difficult to activate, targets and meet the requirements of this Success Criterion, provided that the targets don't have any adjacent targets that are too close. However, using larger target sizes will help many people use targets more easily. As a best practice it is recommended to at least meet the minimum size requirement of the Success Criterion, regardless of spacing. For important links/controls, consider aiming for the stricter 2.5.5 Target Size (Enhanced).
+
+
+
Exceptions
+
The requirement is for targets to be at least 24 by 24 CSS pixels in size. There are five exceptions:
+
+
+
Spacing: Undersized targets (those less than 24 by 24 CSS pixels) are positioned so that if a 24 CSS pixel diameter circle is centered on the bounding box of each, the circles do not intersect another target or the circle for another undersized target.
+
Equivalent: In cases where a target does not have a size equivalent to 24 by 24 CSS pixels, but there is another control that can achieve the underlying function that does meet the requirements of this success criterion, the target can be excepted based on the "Equivalent" exception.
+
Inline: The success criterion does not apply to inline targets in sentences, or where the size of the target is constrained by the line-height of non-target text. This exception is allowed because text reflow based on viewport size makes it impossible for authors to anticipate where links may be positioned relative to one another. Applying this success criterion when multiple links are embedded in blocks of smaller text often results in an undesirable design. It is more important to set the line height to a value that improves readability.
+
User agent control: Browsers have default renderings of some controls, such as the days of the month calendar in an <input type="date">. As long as the author has not modified the user agent default, the target size for a User agent control is excepted.
+
Essential: If the size and spacing of the targets is fundamental to the information being conveyed, the Essential exception applies. For example, in digital maps, the position of pins is analogous to the position of places shown on the map. If there are many pins close together, the spacing between pins and neighboring pins will often be below 24 CSS pixels. It is essential to show the pins at the correct map location, therefore the Essential exception applies. A similar example is an interactive data visualization where targets are necessarily dense. Another example is where jurisdictions legally require online forms to replicate paper forms, which can impose constraints on the size of targets. In such jurisdictions, any legal requirement to replicate small targets can be considered essential. When the "Essential" exception is applicable, authors are strongly encouraged to provide equivalent functionality through alternative means to the extent practical.
+
+
+
+
+
Size requirement
+
+
For a target to be "at least 24 by 24 CSS pixels", it must be possible to draw a solid 24 by 24 CSS pixel square, aligned to the horizontal and vertical axis such that the square is completely within the target (does not extend outside the target's area).
+
+
+
+ Where targets are a 24 by 24px square (and larger is better), they meet the size requirement of the criterion and pass (image shown to scale - see the scalable original version)
+
+
+
The 24 by 24px square has to be aligned with the page, although the target itself could be skewed.
+
+
+
+ So long as there is a solid 24 by 24px square within the target, it meets the size requirement of the criterion and passes (image shown to scale - see the scalable original version)
+
+
+
If a target is not large enough to allow for a 24 by 24px square to be drawn inside it, it is considered undersized, and does not pass the size requirement of the Success Criterion. However, if it has sufficient space around it without adjacent targets, it may still pass the criterion thanks to the spacing exception (below).
+
+
+
+ The rounded corners do not leave sufficient space to draw a 24 by 24px square inside the target, making the target undersized. Depending on the spacing to other targets, it may still pass if it has sufficient clearance (image shown at 1:1 and 2:1 scale - see the scalable original version)
+
+
+
The requirement is independent of the zoom factor of the page; when users zoom in, the CSS pixel size of elements does not change. This means that authors cannot meet it by claiming that the target will have enough spacing or sufficient size if the user zooms into the page.
+
+
The requirement does not apply to targets while they are obscured by content displayed as a result of a user interaction or scripted behavior of content, for example:
+
+
+
interacting with a combobox shows a dropdown list of suggestions
+
activating a button displays a modal dialog
+
content displays a cookie banner after page load
+
content displays a "Take a survey" dialog after some period of user inactivity
+
+
The requirement does however apply to targets in any new content that appears on top of other content.
+
+
While the Success Criterion primarily helps touch users by providing target sizing to prevent accidental triggering of adjacent targets, it is also useful for mouse or pen users. It reduces the chances of erroneous activation due to either a tremor or reduced precision, whether because of reduced fine motor control or input imprecision.
+
+
+
+
Spacing
+
+
When the minimum size for a target is not met, spacing can at least improve the user experience. There is less chance of accidentally activating a neighboring target if a target is not immediately adjacent to another. Touchscreen devices and user agents generally have internal heuristics to identify which link or control is closest to a user's touch interaction - this means that sufficient spacing between targets can work as effectively as a larger target size itself.
+
+
When a target is smaller than 24 by 24 CSS pixels, it is undersized. In this case, we check if it at least has sufficient spacing by drawing a 24 CSS pixel diameter circle over the undersized target, centered on the target's bounding box. For rectangular targets, the bounding box coincides with the target itself – thus, the circle is placed on the center of the target. If the target is not rectangular – for instance, if the target is clipped, has rounded corners, or if it's a more complex clickable SVG shape – we need to first determine the bounding box, and then find the box's center. Note that for concave shapes, the center of the bounding box may be outside of the target itself. Now, we center the circle on the center of the bounding box.
+
+
+
+ For a square/rectangular target, the 24 CSS pixel diameter circle is centered on the target itself. For convex and concave targets, it is centered on the bounding box of the shape. Note the concave target, where in this case the center of the bounding box is outside of the actual target (image shown to scale - see the scalable original version)
+
+
+
We repeat this process for all adjacent undersized targets. To determine if an undersized target has sufficient spacing (to pass this Success Criterion's spacing exception), we check that the 24 CSS pixel diameter circle of the target does not intersect another target or the circle of any other adjacent undersized targets.
+
+
The following example shows three versions of a horizontal row of six icon-based buttons:
+
+
In the top row, the dimensions of each target are 24 by 24 CSS pixels, passing this Success Criterion.
+
In the second row, the same targets are only 20 by 20 CSS pixels, but have a 4 CSS pixel space between them – as the target size is below 24 by 24 CSS pixels, these need to be evaluated against the Success Criterion's spacing exception, and they pass.
+
In the last row, the targets are again 20 by 20 CSS pixels, but have no space between them – these fail the spacing exception. This is because, when drawing the 24 CSS pixel diameter circles over the targets, the circles intersect.
+
+
+
+
+ Three rows of targets, illustrating two ways of meeting this Success Criterion and one way of failing it (image shown to scale - see the scalable original version)
+
+
The next two illustrations show sets of buttons which are only 16 CSS pixels tall. In the first set, there are no targets immediately above or below the buttons, so they pass. In the second illustration, there are further buttons, and they have been stacked on top of one another, resulting in a fail.
+
+
+ While the height of the targets is only 16 CSS pixels, the lack of adjacent targets above and below means that the targets pass this Success Criterion (image shown to scale - see the scalable original version)
+
+
+
+
+ Two rows of buttons, both with a height of only 16 CSS pixels. The rows are close, with only a 1 CSS pixel gap between them. This means that the 24 CSS pixel spacing circles of the targets in one row will intersect the targets (and their circles, depending on their respective widths) in the other line, thus failing the Success Criterion. Image shown to scale - see the scalable original version.
+
+
The following two illustrations show how menu items can be adjusted to properly meet this requirement. In the first illustration, the About us menu has been activated, showing that each of the menu item targets has a 24 CSS pixel height (text and padding), and so passes. In the second illustration, the same menu is expanded, but the menu items only achieve 18 CSS pixels in height, and so fail.
+
+
+ The menu items with a height of 24 CSS pixels pass. For the menu items that are only 18 CSS pixels high, the 24 CSS pixel spacing circles of the targets in one row will intersect the adjacent menu item targets and circles, and fail (image shown to scale - see the scalable original version)
+
+
+
The following example has one large target (an image that links to a new page related to that image) and a very small second target (a control with a magnifier icon to open a zoomed-in preview, possibly in a modal, of the image).
+
In the top row, the small target overlaps - or, to be more technically accurate, clips - the large target. The small target itself has a size of 24 by 24 CSS pixels, so passes. In the second row, we see that if the second target is any smaller – in this case 16 by 16 CSS pixels – it fails the criterion, as the circle with a 24 CSS pixel diameter we draw over the small target will intersect the large target itself.
+
+
+
+ The 24 by 24 CSS pixel small target passes, while the 16 by 16 CSS pixel small target fails, since the 24 CSS pixel diameter circle used for undersized targets intersect the large target (image shown to scale - see the scalable original version)
+
+
+
In the following example, we have the same two targets – a large target and a small target. This time, the small target touches/abuts the large target. If the small target is smaller than 24 by 24 CSS pixels, the circle with a 24 CSS pixel diameter we draw over the small target will intersect the large target itself, failing the requirement. The undersized target must be spaced further away from the large target until its circle doesn't intersect the large target.
+
+
+
+ In the first row, the 16 by 16 CSS pixel target touching/abutting the large target fails, as its 24 CSS pixel diameter circle used for undersized targets intersects the large target. In the second row we see that the only way the undersized target can pass is by adding a 4 CSS pixel spacing gap between the targets (image shown to scale - see the scalable original version)
+
+
+
Users with different disabilities have different needs for control sizes. It can be beneficial to provide an option to increase the active target area without increasing the visible target size. Another option is to provide a mechanism to control the density of layout and thereby change target size or spacing, or both. This can be beneficial for a wide range of users. For example, users with visual field loss may prefer a more condensed layout with smaller sized controls while users with other forms of low vision may prefer large controls.
+
+
+
+
+
Benefits of Target Size (Minimum)
+
Having targets with sufficient size - or at least sufficient target spacing - can help all users who may have difficulty in confidently targeting or operating small controls. Users who benefit include, but are not limited to:
+
+
People who use a mobile device where the touch screen is the primary mode of interaction;
+
People using mouse, stylus or touch input who have mobility impairments such as hand tremors;
+
People using a device in environments where they are exposed to shaking such as public transportation;
+
Mouse users who have difficulty with fine motor movements;
+
People who access a device using one hand;
+
People with large fingers, or who are operating the device with only a part of their finger or knuckle.
+
+
+
+
+
+
Examples of Target Size (Minimum)
+
+
+
Three buttons are on-screen and the target size of each button is 24 by 24 CSS pixels. Since the target size itself is 24 by 24 CSS pixels, no additional spacing is required, the Success Criterion passes.
+
A row of buttons, each of which has a horizontal width of more than 24 CSS pixels, a height of only 20 CSS pixels, and vertical margin of 4 CSS pixels above and below the row of buttons. Since there is sufficient spacing both above and below the row of buttons, the Success Criterion passes.
+
Links within a paragraph of text have varying target dimensions. Links within paragraphs of text do not need to meet the 24 by 24 CSS pixels requirements, so the Success Criterion passes.
Web Content Accessibility Guidelines (WCAG) provides requirements for making websites, applications, and other digital content accessible to people with disabilities. For an introduction to WCAG, supporting technical documents, and educational material, see WCAG 2 Overview.
+
There are additional resources that help you understand and implement WCAG. These Understanding documents are one type of resource. Others are explained in the WCAG 2 Documents.
+
+
+
About the Understanding Documents
+
WCAG Understanding documents are guides to understanding and implementing WCAG. They provide detailed explanations for
+ each guideline and each success criterion to help readers better understand the intent
+ of the success criteria. They include background information and technical details. They include techniques that are examples of ways to meet the success criteria. Each technique is linked to more details in a techniques page. Techniques are explained in Understanding Techniques for WCAG Success Criteria.
+
WCAG Understanding documents are not introductory resources. They are for people who want to understand WCAG more thoroughly. The WCAG Overview provides introductory information.
+
+
+
Structure of the Documents
+
Understanding Guidelinepages include:
+
+
The intent
+
Any advisory techniques that are related
+ to the guideline and not specifically related to any of its success criteria
+
+
Understanding Success Criterion pages include:
+
+
The success criterion wording from WCAG
+
Intent of the success criterion
+
Benefits, how it helps people with disabilities
+
Examples
+
Related resources
+
Techniques
+
+
Sufficient techniques
+
Advisory techniques
+
Failures
+
+
+
Key terms for this success criterion, from the WCAG Glossary
+
+
+
+
+
+
+
Change Log
+
For a detailed view of recent changes to the informative documents see the github updates.
All WCAG 2.0 Success Criteria are written as testable criteria for objectively determining
- if content satisfies them. Testing the Success Criteria would involve a combination
+
All WCAG 2 success criteria are written as testable criteria for objectively determining
+ if content satisfies them. Testing the success criteria would involve a combination
of automated testing and human evaluation. The content should be tested by those who
understand how people with different types of disabilities use the Web.
Testing and testable in the context refer to functional testing, that is verifying
- that the content functions as expected, or in this case, that it satisfies the Success
- Criteria. Although content may satisfy all Success Criteria, the content may not always
+ that the content functions as expected, or in this case, that it satisfies the success criteria.
+ Although content may satisfy all success criteria, the content may not always
be usable by people with a wide variety of disabilities. Therefore, usability testing
is recommended, in addition to the required functional testing. Usability testing
aims to determine how well people can use the content for its intended purpose. It
@@ -29,22 +29,21 @@
Understanding Conformance
What does conformance mean?
Conformance to a standard means that you meet or satisfy the 'requirements' of the
- standard. In WCAG 2.0 the 'requirements' are the Success Criteria. To conform to WCAG
- 2.0, you need to satisfy the Success Criteria, that is, there is no content which
- violates the Success Criteria.
+ standard. In WCAG 2 the 'requirements' are the success criteria. To conform to WCAG
+ 2, you need to satisfy the success criteria, that is, there is no content which
+ violates the success criteria.
-
This means that if there is no content to which a success criterion applies, the success
- criterion is satisfied.
+
This means that if there is no content to which a success criterion applies, the success criterion is satisfied.
Most standards only have one level of conformance. In order to accommodate different
situations that may require or allow greater levels of accessibility than others,
- WCAG 2.0 has three levels of conformance, and therefore, three levels of Success Criteria.
+ WCAG 2 has three levels of conformance, and therefore, three levels of success criteria.
@@ -54,7 +53,7 @@
What does conformance mean?
Understanding Conformance Requirements
There are five requirements that must be met in order for content to be classified
- as 'conforming' to WCAG 2.0. This section provides brief notes on those requirements.
+ as 'conforming' to WCAG 2. This section provides brief notes on those requirements.
This section will be expanded over time to address questions that may arise or to
provide new examples of ways to meet the different conformance requirements.
@@ -67,19 +66,19 @@
Understanding Requirement 1
Conformance Level: One of the following levels of conformance is met in full.
For Level AA conformance, the Web page satisfies all the Level A and Level AA Success Criteria, or a Level AA conforming alternate version is provided.
-
For Level AAA conformance, the Web page satisfies all the Level A, Level AA and Level AAA Success Criteria, or a Level AAA conforming alternate version is provided.
For Level AA conformance, the Web page satisfies all the Level A and Level AA success criteria, or a Level AA conforming alternate version is provided.
+
For Level AAA conformance, the Web page satisfies all the Level A, Level AA and Level AAA success criteria, or a Level AAA conforming alternate version is provided.
Although conformance can only be achieved at the stated levels, authors are encouraged to report (in their claim) any progress toward meeting success criteria from all levels beyond the achieved level of conformance.
-
It is not recommended that Level AAA conformance be required as a general policy for entire sites because it is not possible to satisfy all Level AAA Success Criteria for some content.
+
It is not recommended that Level AAA conformance be required as a general policy for entire sites because it is not possible to satisfy all Level AAA success criteria for some content.
The first requirement deals with the levels of conformance. It basically says that
all information on a page conforms or has a
conforming alternate version that is available from the page. The requirement also explains that no conformance
- is possible without at least satisfying all of the Level A Success Criteria.
+ is possible without at least satisfying all of the Level A success criteria.
The note points out that authors are encouraged to go beyond conformance to a particular
@@ -156,9 +155,9 @@
Understanding Requirement 3
Understanding Requirement 4
-
Only Accessibility-Supported Ways of Using Technologies: Only accessibility-supported ways of using technologies are relied upon to satisfy the success criteria. Any information or functionality that is provided in a way that is not accessibility supported is also available in a way that is accessibility supported. (See Understanding accessibility support.)
+
Only Accessibility-Supported Ways of Using Technologies: Only accessibility-supported ways of using technologies are relied upon to satisfy the success criteria. Any information or functionality that is provided in a way that is not accessibility supported is also available in a way that is accessibility supported. (See Understanding accessibility support.)
-
This conformance requirement is explained below under
+
There are four provisions that particularly deal with issues of interference with
use of the page. These four are included in a note here. A note on each of the provisions
- indicates that these Success Criteria need to be met for all content including content
+ indicates that these success criteria need to be met for all content including content
created using technologies that are not accessibility supported.
@@ -236,7 +235,7 @@
Understanding Conformance Claims
Here is a claim which has been enhanced with schema.org metadata:
-
+
<div typeof="WebPage" vocab="http://schema.org/">
<p property="accessibilitySummary">On 23 March 2009, all content available on
the server at <a
@@ -316,11 +315,11 @@
Partial conformance claims due to third party content
-
Information about any additional steps taken that go beyond the Success Criteria
+
Information about any additional steps taken that go beyond the success criteria
One of the optional components of a conformance claim is "Information about any additional
- steps taken that go beyond the Success Criteria to enhance accessibility." This can
- include additional Success Criteria that have been met, advisory techniques that were
+ steps taken that go beyond the success criteria to enhance accessibility." This can
+ include additional success criteria that have been met, advisory techniques that were
implemented, information about any additional protocols used to aid access for people
with particular disabilities or needs, etc. Any information that would be useful to
people in understanding the accessibility of the pages may be included.
@@ -340,7 +339,7 @@
Use of metadata to report conformance claims
and tool developers are encouraged to support them.
-
In addition, metadata can be used to report conformance to individual Success Criteria
+
In addition, metadata can be used to report conformance to individual success criteria
once Level A conformance has been achieved.
@@ -425,7 +424,7 @@
Examples of Conformance Claims including optional components
-
The following additional Success Criteria have also been met: 1.1.2, 1.2.5, and 1.4.3.
+
The following additional success criteria have also been met: 1.1.2, 1.2.5, and 1.4.3.
@@ -500,28 +499,28 @@
Techniques for Conformance Claims
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -546,56 +545,56 @@
Advisory Techniques for Conformance Claims
Understanding Levels of Conformance
-
First, there are a number of conditions that must be met for a Success Criterion to
+
First, there are a number of conditions that must be met for a success criterion to
be included at all. These include:
-
All Success Criteria must be
+
All success criteria must be
important access issues for people with disabilities that address problems beyond the usability problems that might be faced by all users.
In other words, the access issue must cause a proportionately greater problem for
people with disabilities than it causes people without disabilities in order to be
considered an accessibility issue (and covered under these accessibility guidelines).
-
All Success Criteria must also be testable. This is important since otherwise it would
- not be possible to determine whether a page met or failed to meet the Success Criteria.
- The Success Criteria can be tested by a combination of machine and human evaluation
- as long as it is possible to determine whether a Success Criterion has been satisfied
+
All success criteria must also be testable. This is important since otherwise it would
+ not be possible to determine whether a page met or failed to meet the success criteria.
+ The success criteria can be tested by a combination of machine and human evaluation
+ as long as it is possible to determine whether a success criterion has been satisfied
with a high level of confidence.
-
The Success Criteria were assigned to one of the three levels of conformance by the
+
The success criteria were assigned to one of the three levels of conformance by the
working group after taking into consideration a wide range of interacting issues.
Some of the common factors evaluated when setting the level included:
-
whether the Success Criterion is
- essential (in other words, if the Success Criterion isn't met, then even assistive technology
+
whether the success criterion is
+ essential (in other words, if the success criterion isn't met, then even assistive technology
can't make content accessible)
-
whether it is possible to satisfy the Success Criterion for
- all Web sites and types of content that the Success Criteria would apply to (e.g., different topics, types of content,
+
whether it is possible to satisfy the success criterion for
+ all Web sites and types of content that the success criterion would apply to (e.g., different topics, types of content,
types of Web technology)
-
whether the Success Criterion requires skills that could
- reasonably be achieved by the content creators (that is, the knowledge and skill to meet the Success Criteria could be acquired
+
whether the success criterion requires skills that could
+ reasonably be achieved by the content creators (that is, the knowledge and skill to meet the success criterion could be acquired
in a week's training or less)
-
whether the Success Criterion would impose limits on the "look & feel" and/or function
+
whether the success criterion would impose limits on the "look & feel" and/or function
of the Web page. (limits on function, presentation, freedom of expression, design
- or aesthetic that the Success Criteria might place on authors)
+ or aesthetic that the success criterion might place on authors)
-
whether there are no workarounds if the Success Criterion is not met
+
whether there are no workarounds if the success criterion is not met
@@ -605,9 +604,9 @@
Understanding Levels of Conformance
Understanding Accessibility Support
-
Many of the Success Criteria deal with providing accessibility through assistive technologies
+
Many of the success criteria deal with providing accessibility through assistive technologies
or special accessibility features in mainstream user agents (for example, a 'show
- captions' option in a media player). That is, the Success Criteria require that something
+ captions' option in a media player). That is, the success criteria require that something
be done in the Web content that would make it possible for assistive technologies
to successfully present the content's information to the user. For example, a picture
that you were supposed to click on to go to a topic would not be accessible to a person
@@ -800,7 +799,7 @@
Understanding Accessibility-Supported Web Technology Uses
accessibility-supported technology uses and this is allowed in meeting WCAG. Customers,
companies or others may, however, specify that technology uses from a custom or public
compilation be used. See
- .
+ Documenting Accessibility Support for Uses of a Web Technology.
@@ -851,7 +850,7 @@
Accessibility Support Statements
Understanding "Programmatically Determined"
-
Several Success Criteria require that content (or certain aspects of content) can
+
Several success criteria require that content (or certain aspects of content) can
be "programmatically determined." This means that the content is authored in such
a way that user agents, including assistive technologies, can access the information.
@@ -859,7 +858,7 @@
Understanding "Programmatically Determined"
In order for content created with Web technologies (such as HTML, CSS, PDF, GIF, MPEG, etc.) to be accessible to people with different types of disabilities, it is
essential that the technologies used work with the accessibility features of browsers
and other user agents, including assistive technologies. In order for something to
- meet a Success Criterion that requires it to be "programmatically determined," it
+ meet a success criterion that requires it to be "programmatically determined," it
would need to be implemented using a technology that has assistive technology support.
@@ -929,7 +928,7 @@
Understanding Conforming Alternate Versions
Why permit alternate versions?
Why does WCAG permit conforming alternate versions of Web pages to be included in
- conformance claims? That is, why include pages that do not satisfy the Success Criteria
+ conformance claims? That is, why include pages that do not satisfy the success criteria
for a conformance level in the scope of conformance or a claim?
@@ -944,7 +943,7 @@
Why permit alternate versions?
providing an accessible alternative page in technologies that are accessibility supported.
Users for whom the new technology is adequately supported get the benefits of the
new version. Authors who look ahead to future accessibility support can satisfy the
- Success Criteria now with the alternate version page, and also work with the other
+ success criteria now with the alternate version page, and also work with the other
page to build in future access when assistive technology (AT) support is available.
@@ -979,7 +978,7 @@
Why permit alternate versions?
Sometimes, the best experience for users with certain types of disabilities is provided
by tailoring a Web page specifically to accommodate that disability. In such a situation,
it may not be possible or practical to make the Web page accommodate all disabilities
- by satisfying all of the Success Criteria. The alternate versions requirement permits
+ by satisfying all of the success criteria. The alternate versions requirement permits
such specialized pages to be included within a conformance claim as long as there
is a fully conformant 'alternate version' page.
@@ -998,10 +997,10 @@
Why permit alternate versions?
-
A concern when permitting Web pages that do not satisfy the Success Criteria is that
+
A concern when permitting Web pages that do not satisfy the success criteria is that
people with disabilities will encounter these non-conforming pages, not be able to
access their content, and not be able to find the “conforming alternate version."
- A key part of the Alternate Versions provision, therefore, is the ability to find
+ A key part of the alternate versions provision, therefore, is the ability to find
the conforming page (the alternate version) from the non-conforming page when it is
encountered. The conformance requirement that permits alternate pages, therefore,
also requires a way for users to find the accessible version among the alternate versions.
@@ -1040,7 +1039,7 @@
Techniques for Providing a Conforming Alternate Version
Sufficient Techniques for Providing Conforming Alternative Versions of Web pages
Each numbered item in this section represents a technique or combination of techniques
- that the WCAG Working Group deems sufficient for meeting this Success Criterion. However, it is
+ that the WCAG Working Group deems sufficient for meeting this success criterion. However, it is
not necessary to use these particular techniques. For information on using other techniques,
see
, particularly the "Other Techniques" section.
@@ -1050,7 +1049,7 @@
Sufficient Techniques for Providing Conforming Alternative Versions of Web p
site might limit their ability to address the needs of diverse office locations that
have different technology bases and individual employees who use a wide variety of
user agents and assistive technologies. To address these concerns, the company created
- an alternate version of the content that met all Level A Success Criteria using a
+ an alternate version of the content that met all Level A success criteria using a
more limited set of uses of accessibility-supported content technologies.
The two versions link to each other.
diff --git a/understanding/documenting-accessibility-support.html b/understanding/documenting-accessibility-support.html
index 185fa6c654..d9b619e75e 100644
--- a/understanding/documenting-accessibility-support.html
+++ b/understanding/documenting-accessibility-support.html
@@ -1,11 +1,11 @@
-
+
Documenting Accessibility Support for Uses of a Web Technology
Documenting Accessibility Support for Uses of a Web Technology
-
The documentation of accessibility support for uses of a Web technology provides the information needed to determine whether it is possible to satisfy the WCAG 2.1 Success Criteria for a particular environment.
+
The documentation of accessibility support for uses of a Web technology provides the information needed to determine whether it is possible to satisfy the WCAG 2 success criteria for a particular environment.
Accessibility Support documentation for uses of a Web technology includes the following information:
@@ -21,7 +21,7 @@
Documenting Accessibility Support for Uses of a Web Technology
Ways of using the technology that are supported by the user agent; ideally, there are ways to meet all of the success criteria, but exceptions should be noted.
-
Known limitations of the user agent support for uses of the technology to meet Success Criteria
+
Known limitations of the user agent support for uses of the technology to meet success criteria
Understanding WCAG 2.2 is a guide to understanding and using Web Content Accessibility Guidelines (WCAG) 2.2 [[WCAG22]]. It is part of a set of documents that support WCAG 2.2. Please note that the contents of this document are informative (they provide guidance), and not normative (they do not set requirements for conforming to WCAG 2.2). See Web Content Accessibility Guidelines (WCAG) Overview for an introduction to WCAG, supporting technical documents, and educational material.
-
-
-
Status of This Document
-
This is the official version of "Understanding WCAG 2.2", and is referenced by Web Content Accessibility Guidelines 2.2. This resource is maintained as needed to update interpretive guidance and reference techniques to meet the guidelines.
-
To comment, file an issue in the W3C WCAG GitHub repository. Although the proposed Success Criteria in this document reference issues tracking discussion, the Working Group requests that public comments be filed as new issues, one issue per discrete comment. It is free to create a GitHub account to file issues. If filing issues in GitHub is not feasible, send email to public-agwg-comments@w3.org (comment archive).
-
-
-
Introduction
-
Understanding WCAG 2.2 is a guide to understanding and using Web Content Accessibility Guidelines 2.2 [[WCAG22]] Although the normative definition and requirements for WCAG 2.2 can all be found in the WCAG 2.2 document itself, the concepts and provisions may be new to some people. Understanding WCAG 2.2 provides a non-normative extended commentary on each guideline and each Success Criterion to help readers better understand the intent and how the guidelines and Success Criteria work together. It also provides examples of techniques or combinations of techniques that the Working Group has identified as being sufficient to meet each Success Criterion. Links are then provided to write-ups for each of the techniques.
-
-
Relationship to Understanding WCAG 2.0
-
Understanding WCAG 2.0 [[UNDERSTANDING-WCAG20]] is a substantial resource to support Web Content Accessibility Guidelines 2.0 [[WCAG20]]. Understanding WCAG 2.2 is a parallel resource that supports the new success criteria in WCAG 2.2. At this stage, it only includes content related to new features of WCAG 2.0. Future versions may include content relevant to WCAG 2.0, depending on how WCAG 2.2 evolves and what structure is determined to provide optimal support.
-
Unlike Understanding WCAG 2.0, this document has not been published as a Technical Report. This change reduces the formality of the document and increases the ability of the Accessibility Guidelines Working Group to maintain the content and optimize the structure. The Working Group considers the content to be authoritative. If feedback indicates the need, the document could be published as a Technical Report in the future.
-
-
-
Structure of Understanding WCAG 2.2
-
This is not an introductory document. It is a detailed technical description of the guidelines and their Success Criteria. See Web Content Accessibility Guidelines (WCAG) Overview for an introduction to WCAG, supporting technical documents, and educational material.
-
Understanding WCAG 2.2 is organized by guideline. There is an Understanding Guideline X.X section for each guideline. The intent and any advisory techniques that are related to the guideline but not specifically related to any of its Success Criteria are listed there as well.
-
The Understanding Guidelines X.X section is then followed by a Understanding Success Criterion X.X.X section for each Success Criterion of that guideline. These sections each contain:
-
-
-
The Success Criterion as it appears in WCAG 2.2
-
-
-
Intent of the Success Criterion
-
-
-
Benefits (how the Success Criterion helps people with disabilities)
-
-
-
Examples
-
-
-
Related Resources
-
-
-
Techniques or combinations of techniques that are sufficient to meet the guidelines
-
-
-
Failures of this Success Criterion
-
-
-
Additional advisory techniques that go beyond what is required to meet the Success Criterion but can be used to make some or all types of content more accessible. Use of advisory techniques does not impact the level of conformance claimed.
-
-
-
Key terms for this Success Criterion (taken from the WCAG 2.2 Glossary)
-
-
-
Links are provided from each Guideline in WCAG 2.2 directly to each Understanding Guideline X.X in this document. Similarly, there is a link from each Success Criterion in WCAG 2.2 to the Understanding Success Criterion X.X.X section in this document.
-
-
-
Techniques for WCAG 2.2
-
Techniques specific to WCAG 2.2 are added to the the techniques for WCAG 2.0, it is one set. The Techniques change log lists the new techniques added since WCAG 2.2 was published.
-
-
-
-
-
-
-
Understanding documents change Log
-
A list of significantly updated Understanding documents since WCAG 2.2 was published:
Understanding WCAG 2.1 is an essential guide to understanding and using "Web Content Accessibility Guidelines 2.1". Although the normative definition and requirements for WCAG 2.1 can all be found in the WCAG 2.1 document itself, the concepts and provisions may be new to some people. Understanding WCAG 2.1 provides a non-normative extended commentary on each guideline and each Success Criterion to help readers better understand the intent and how the guidelines and Success Criteria work together. It also provides examples of techniques or combinations of techniques that the Working Group has identified as being sufficient to meet each Success Criterion. Links are then provided to write-ups for each of the techniques.
-
This is not an introductory document. It is a detailed technical description of the guidelines and their Success Criteria. See Web Content Accessibility Guidelines (WCAG) Overview for an introduction to WCAG, supporting technical documents, and educational material.
-
Understanding WCAG 2.1 is organized by guideline. There is an Understanding Guideline X.X section for each guideline. The intent and any advisory techniques that are related to the guideline but not specifically related to any of its Success Criteria are listed there as well.
-
The Understanding Guidelines X.X section is then followed by a Understanding Success Criterion X.X.X section for each Success Criterion of that guideline. These sections each contain:
+
Introduction to Understanding WCAG 2
+
Understanding WCAG 2 is an essential guide to understanding and using "Web Content Accessibility Guidelines 2". Although the normative definition and requirements for WCAG 2 can all be found in the WCAG 2 document itself, the concepts and provisions may be new to some people. Understanding WCAG 2 provides a non-normative extended commentary on each guideline and each success criterion to help readers better understand the intent and how the guidelines and success criteria work together. It also provides examples of techniques or combinations of techniques that the Working Group has identified as being sufficient to meet each success criterion. Links are then provided to write-ups for each of the techniques.
+
This is not an introductory document. It is a detailed technical description of the guidelines and their success criteria. See Web Content Accessibility Guidelines (WCAG) Overview for an introduction to WCAG, supporting technical documents, and educational material.
+
Understanding WCAG 2 is organized by guideline. There is an Understanding Guideline X.X section for each guideline. The intent and any advisory techniques that are related to the guideline but not specifically related to any of its success criteria are listed there as well.
+
The Understanding Guidelines X.X section is then followed by an Understanding success criterion X.X.X section for each success criterion of that guideline. These sections each contain:
-
The Success Criterion as it appears in WCAG 2.1
+
The success criterion as it appears in WCAG 2
-
Intent of the Success Criterion
+
Intent of the success criterion
-
Benefits (how the Success Criterion helps people with disabilities)
+
Benefits (how the success criterion helps people with disabilities)
Examples
@@ -29,21 +29,21 @@
Introduction to Understanding WCAG 2.1
Techniques or combinations of techniques that are sufficient to meet the guidelines
-
Common failures of this Success Criterion
+
Common failures of this success criterion
-
Additional advisory techniques that go beyond what is required to meet the Success Criterion but can be used to make some or all types of content more accessible. Use of advisory techniques does not impact the level of conformance claimed.
+
Additional advisory techniques that go beyond what is required to meet the success criterion but can be used to make some or all types of content more accessible. Use of advisory techniques does not impact the level of conformance claimed.
-
Key terms for this Success Criterion (taken from the WCAG 2.1 Glossary)
+
Key terms for this success criterion (taken from the WCAG 2 Glossary)
-
Links are provided from each Guideline in WCAG 2.1 directly to each Understanding Guideline X.X in this document. Similarly, there is a link from each Success Criterion in WCAG 2.1 to the Understanding Success Criterion X.X.X section in this document.
-
For information about individual techniques, follow the links throughout this document to the techniques of interest in the Techniques for WCAG 2.1 document.
+
Links are provided from each Guideline in WCAG 2 directly to each Understanding Guideline X.X in this document. Similarly, there is a link from each success criterion in WCAG 2 to the Understanding Success Criterion X.X.X section in this document.
+
For information about individual techniques, follow the links throughout this document to the techniques of interest in the Techniques for WCAG 2 document.
For links to information on different disabilities and assistive technologies see Disabilities on Wikipedia.
Understanding the Four Principles of Accessibility
-
The guidelines and Success Criteria are organized around the following four principles, which lay the foundation necessary for anyone to access and use Web content. Anyone who wants to use the Web must have content that is:
+
The guidelines and success criteria are organized around the following four principles, which lay the foundation necessary for anyone to access and use Web content. Anyone who wants to use the Web must have content that is:
Perceivable - Information and user interface components must be presentable to users in ways they can perceive.
@@ -79,30 +79,30 @@
Understanding the Four Principles of Accessibility
If any of these are not true, users with disabilities will not be able to use the Web.
-
Under each of the principles are guidelines and Success Criteria that help to address these principles for people with disabilities. There are many general usability guidelines that make content more usable by all people, including those with disabilities. However, in WCAG 2.1, we only include those guidelines that address problems particular to people with disabilities. This includes issues that block access or interfere with access to the Web more severely for people with disabilities.
+
Under each of the principles are guidelines and success criteria that help to address these principles for people with disabilities. There are many general usability guidelines that make content more usable by all people, including those with disabilities. However, in WCAG 2, we only include those guidelines that address problems particular to people with disabilities. This includes issues that block access or interfere with access to the Web more severely for people with disabilities.
Layers of Guidance
The Guidelines
-
Under each principle there is a list of guidelines that address the principle. There are a total of 12 guidelines. A convenient list of just the guidelines can be found in the WCAG 2.1 table of contents. One of the key objectives of the guidelines is to ensure that content is directly accessible to as many people as possible, and capable of being re-presented in different forms to match different peoples' sensory, physical and cognitive abilities.
+
Under each principle there is a list of guidelines that address the principle. There are a total of 13 guidelines. A convenient list of just the guidelines can be found in the WCAG 2 table of contents. One of the key objectives of the guidelines is to ensure that content is directly accessible to as many people as possible, and capable of being re-presented in different forms to match different peoples' sensory, physical and cognitive abilities.
Success Criteria
-
Under each guideline, there are Success Criteria that describe specifically what must be achieved in order to conform to this standard. They are similar to the "checkpoints" in WCAG 1.0. Each Success Criterion is written as a statement that will be either true or false when specific Web content is tested against it. The Success Criteria are written to be technology neutral.
-
All WCAG 2.1 Success Criteria are written as testable criteria for objectively determining if content satisfies the Success Criteria. While some of the testing can be automated using software evaluation programs, others require human testers for part or all of the test.
-
Although content may satisfy the Success Criteria, the content may not always be usable by people with a wide variety of disabilities. Professional reviews utilizing recognized qualitative heuristics are important in achieving accessibility for some audiences. In addition, usability testing is recommended. Usability testing aims to determine how well people can use the content for its intended purpose.
+
Under each guideline, there are success criteria that describe specifically what must be achieved in order to conform to this standard. They are similar to the "checkpoints" in WCAG 1.0. Each success criterion is written as a statement that will be either true or false when specific Web content is tested against it. The success criteria are written to be technology neutral.
+
All WCAG 2 success criteria are written as testable criteria for objectively determining if content satisfies the success criteria. While some of the testing can be automated using software evaluation programs, others require human testers for part or all of the test.
+
Although content may satisfy the success criteria, the content may not always be usable by people with a wide variety of disabilities. Professional reviews utilizing recognized qualitative heuristics are important in achieving accessibility for some audiences. In addition, usability testing is recommended. Usability testing aims to determine how well people can use the content for its intended purpose.
The content should be tested by those who understand how people with different types of disabilities use the Web. It is recommended that users with disabilities be included in test groups when performing human testing.
-
Each Success Criterion for a guideline has a link to the section of the How to Meet document that provides:
+
Each success criterion for a guideline has a link to the section of the How to Meet document that provides:
-
sufficient techniques for meeting the Success Criterion,
+
sufficient techniques for meeting the success criterion,
optional advisory techniques, and
-
descriptions of the intent of the Success Criteria, including benefits, and examples.
+
descriptions of the intent of the success criterion, including benefits, and examples.
diff --git a/understanding/refer-to-wcag.html b/understanding/refer-to-wcag.html
index 8fb4adb859..22b4450799 100644
--- a/understanding/refer-to-wcag.html
+++ b/understanding/refer-to-wcag.html
@@ -1,60 +1,60 @@
-
+
- How to refer to WCAG 2.1 from other documents
+ How to refer to WCAG 2 from other documents
-
Please note that the following language for referencing WCAG 2 can be inserted into your own documents.
Information references
-
When referencing WCAG 2.1 in an informational fashion, the following format can be used.
-
Web Content Accessibility Guidelines 2.0, W3C World Wide Web Consortium Recommendation XX Month Year (https://www.w3.org/TR/YYYY/REC-WCAG21-YYYYMMDD/, Latest version at https://www.w3.org/TR/WCAG21/)
+
When referencing WCAG 2 in an informational fashion, the following format can be used.
+
Web Content Accessibility Guidelines 2.2, W3C World Wide Web Consortium Recommendation XX Month Year (https://www.w3.org/TR/YYYY/REC-WCAG22-YYYYMMDD/, Latest version at https://www.w3.org/TR/WCAG22/)
-
When referring to WCAG 2.1 from another standard with a "should" statement
-
When referencing WCAG 2.1 from within a should statement in a standard (or advisory statement in a regulation), then the full WCAG 2.1 should be referenced. This would mean that all three levels of WCAG 2.1 should be considered but that none are required. The format for referencing WCAG 2.1 from a "should" statement therefore, is:
-
Web Content Accessibility Guidelines 2.0, W3C World Wide Web Consortium Recommendation XX Month Year. (https://www.w3.org/TR/YYYY/REC-WCAG21-YYYYMMDD/)
+
When referring to WCAG 2 from another standard with a "should" statement
+
When referencing WCAG 2 from within a should statement in a standard (or advisory statement in a regulation), then the full WCAG 2 should be referenced. This would mean that all three levels of WCAG 2 should be considered but that none are required. The format for referencing WCAG 2 from a "should" statement therefore, is:
+
Web Content Accessibility Guidelines 2.2, W3C World Wide Web Consortium Recommendation XX Month Year. (https://www.w3.org/TR/YYYY/REC-WCAG22-YYYYMMDD/)
-
When referring to WCAG 2.1 from another standard with a "shall or must" statement
-
When citing WCAG 2.1 as part of a requirement (e.g., a shall or must statement in a standard or regulation), the reference must include the specific parts of WCAG 2.1 that are intended to be required. When referencing WCAG 2.1 in this manner, the following rules apply:
+
When referring to WCAG 2 from another standard with a "shall or must" statement
+
When citing WCAG 2 as part of a requirement (e.g., a shall or must statement in a standard or regulation), the reference must include the specific parts of WCAG 2 that are intended to be required. When referencing WCAG 2 in this manner, the following rules apply:
-
Conformance at any level of WCAG 2.1 requires that all of the Level A Success Criteria be met. References to WCAG 2.1 conformance cannot be for any subset of Level A.
+
Conformance at any level of WCAG 2 requires that all of the Level A success criteria be met. References to WCAG 2 conformance cannot be for any subset of Level A.
-
Beyond Level A, a "shall or must" reference may include any subset of provisions in Levels AA and AAA. For example, "all of Level A and [some specific list of Success Criteria in Level AA and Level AAA]" be met.
+
Beyond Level A, a "shall or must" reference may include any subset of provisions in Levels AA and AAA. For example, "all of Level A and [some specific list of success criteria in Level AA and Level AAA]" be met.
-
If Level AA conformance to WCAG 2.1 is specified, then all Level A and all Level AA Success Criteria must be met.
+
If Level AA conformance to WCAG 2 is specified, then all Level A and all Level AA success criteria must be met.
-
If Level AAA conformance to WCAG 2.1 is specified, then all Level A, all Level AA, and all Level AAA Success Criteria must be met.
-
Note 1: It is not recommended that Level AAA conformance ever be required for entire sites as a general policy because it is not possible to satisfy all Level AAA Success Criteria for some content.
-
Note 2: The sets of Success Criteria defined in WCAG are interdependent and individual Success Criteria rely on each other's definitions in ways which may not be immediately obvious to the reader. Any set of Success Criteria must include all of the Level A provisions.
+
If Level AAA conformance to WCAG 2 is specified, then all Level A, all Level AA, and all Level AAA success criteria must be met.
+
Note 1: It is not recommended that Level AAA conformance ever be required for entire sites as a general policy because it is not possible to satisfy all Level AAA success criteria for some content.
+
Note 2: The sets of success criteria defined in WCAG 2 are interdependent and individual success criteria rely on each other's definitions in ways which may not be immediately obvious to the reader. Any set of success criteria must include all of the Level A provisions.
Examples
To cite only the Level A Success Criteria (Single-A conformance):
-
Web Content Accessibility Guidelines 2.0, W3C World Wide Web Consortium Recommendation XX Month Year, Level A Success Criteria. (https://www.w3.org/TR/YYYY/REC-WCAG21-YYYYMMDD/)
+
Web Content Accessibility Guidelines 2.2, W3C World Wide Web Consortium Recommendation XX Month Year, Level A Success Criteria. (https://www.w3.org/TR/YYYY/REC-WCAG22-YYYYMMDD/)
To cite the Levels A and AA Success Criteria (Double-A conformance):
-
Web Content Accessibility Guidelines 2.0, W3C World Wide Web Consortium Recommendation XX Month Year, Level A & Level AA Success Criteria. (https://www.w3.org/TR/YYYY/REC-WCAG21-YYYYMMDD/)
+
Web Content Accessibility Guidelines 2.2, W3C World Wide Web Consortium Recommendation XX Month Year, Level A & Level AA Success Criteria. (https://www.w3.org/TR/YYYY/REC-WCAG22-YYYYMMDD/)
To cite Level A Success Criteria and selected Success Criteria from Level AA and Level AAA:
-
Web Content Accessibility Guidelines 2.0, W3C World Wide Web Consortium Recommendation XX Month Year, Level A Success Criteria plus Success Criteria 1.x.x, 2.y.y, … 3.z.z. (https://www.w3.org/TR/YYYY/REC-WCAG21-YYYYMMDD/)
-
Example of use of a WCAG reference in a "shall or must" statement.
-
All Web content on publicly available Web sites shall conform to Web Content Accessibility Guidelines 2.0, W3C World Wide Web Consortium Recommendation XX Month Year, Level A Success Criteria plus Success Criteria 1.2.3, 2.4.5-6, 3.1.2 (https://www.w3.org/TR/YYYY/REC-WCAG21-YYYYMMDD/)
+
Web Content Accessibility Guidelines 2.2, W3C World Wide Web Consortium Recommendation XX Month Year, Level A Success Criteria plus Success Criteria 1.x.x, 2.y.y, … 3.z.z. (https://www.w3.org/TR/YYYY/REC-WCAG22-YYYYMMDD/)
+
Example of use of a WCAG 2 reference in a "shall or must" statement.
+
All Web content on publicly available Web sites shall conform to Web Content Accessibility Guidelines 2.2, W3C World Wide Web Consortium Recommendation XX Month Year, Level A Success Criteria plus Success Criteria 1.2.3, 2.4.5-6, 3.1.2 (https://www.w3.org/TR/YYYY/REC-WCAG22-YYYYMMDD/)
-
Referring to content from WCAG support documents
-
Techniques, which are listed in Understanding WCAG 2.1 and described in other supporting documents, are not part of the normative WCAG 2.1 Recommendation and should not be cited using the citation for the WCAG 2.1 Recommendation itself. References to techniques in support documents should be cited separately.
-
Techniques can be cited based on the individual Technique document or on the master WCAG 2.1 Techniques document. For example, the technique "Using alt attributes on img elements" could be cited as
+
Referring to content from WCAG 2 support documents
+
Techniques, which are listed in Understanding WCAG 2 and described in other supporting documents, are not part of the normative WCAG 2 Recommendation and should not be cited using the citation for the WCAG 2 Recommendation itself. References to techniques in support documents should be cited separately.
+
Techniques can be cited based on the individual Technique document or on the master WCAG 2 Techniques document. For example, the technique "Using alt attributes on img elements" could be cited as
"Using alt attributes on img elements," W3C World Wide Web Consortium Note. (URI: {URI of technique})
or
-
W3C World Wide Web Consortium (200x): WCAG2.0 HTML Techniques (URI: {URI of HTML Techniques})
+
W3C World Wide Web Consortium (20xx): WCAG2.2 HTML Techniques (URI: {URI of HTML Techniques})
Techniques are not designed to be referenced as "required" from any standard or regulation.Standards and regulations should not make any specific technique mandatory, though they may choose to recommend techniques.
diff --git a/understanding/toc.html b/understanding/toc.html
deleted file mode 100644
index f2153e694b..0000000000
--- a/understanding/toc.html
+++ /dev/null
@@ -1,151 +0,0 @@
-
\ No newline at end of file
diff --git a/understanding/understanding-act-rules.html b/understanding/understanding-act-rules.html
new file mode 100644
index 0000000000..ef08e26b36
--- /dev/null
+++ b/understanding/understanding-act-rules.html
@@ -0,0 +1,76 @@
+
+
+
+ Understanding Test Rules for WCAG 2 Success Criteria
+
+
+
Understanding Test Rules for WCAG 2 Success Criteria
+
+
Test Rules provide guidance for developers of automated testing tools and manual testing methodologies, to help ensure consistent interpretation of WCAG 2 success criteria.
Test Rules are informative — that means they are not required for determining conformance. The basis for determining conformance to WCAG 2 are the success criteria from the WCAG 2 standard — not the Test Rules.
+
While W3C's List of Test Rules for WCAG 2 are reviewed by the W3C Accessibility Guidelines Working Group (AGWG), they are not vetted to the same degree as the W3C Web Content Accessibility Guidelines (WCAG) standard (called W3C Recommendation). The WCAG 2 standard is the normative reference on determining conformance.
+
+
+
+
Test Rules are Partial Checks
+
Test Rules typically check specific aspects of WCAG 2 success criteria. For example, that a table cell has a header rather than the entire WCAG 2 success criterion 1.3.1 "Info and Relationships", which applies to many more information structures on a web page. In fact, this example rule would not even check the validity of the table header, only if the header exists for a given table cell.
+
Test Rules are also technology-specific. For example, the aforementioned table header example would be specific to HTML, possibly enriched with WAI-ARIA roles and properties, but not to other formats with tables. WCAG 2 success criteria are designed to be technology-agnostic and applicable to all web technologies.
+
+
+
+
Test Rules Check for Failures
+
Test Rules are designed to check failures in satisfying WCAG 2 success criteria. That is, when content fails Test Rules, it means that the content does not satisfy the corresponding success criteria. However, when content passes Test Rules, it means that no corresponding failures were detected — it does not necessarily mean that the content satisfies all aspects of the corresponding success criteria.
+
The reason for this is because WCAG 2 success criteria typically cover several aspects and technologies, while Test Rules only check specific aspects. Checking that content satisfies all aspects of WCAG 2 success criteria typically requires further verification by human testers.
+
WCAG 2 Conformance Requirement 1 allows for "conforming alternate versions". That means that content may still conform to WCAG 2, even when content fails Test Rules, thus does not satisfy the corresponding success criteria.
Descriptive Title – title for the Test Rule, which should describe the rule
+
Rule Identifier – identifier for the Test Rule; the W3C rules use alphanumeric strings
+
Rule Type – there are two basic types of Test Rules, depending on what is being tested:
+
+
Atomic Rule – test one specific situation, which may be part of a composite rule
+
Composite Rule – combine outcome from multiple atomic rules to one outcome
+
+
+
Accessibility Requirements Mapping – maps the Test Rule to particular accessibility requirements; in this suite of rules we use Web Content Accessibility Guidelines (WCAG) 2 success criteria
+
Rule Input – describes the scope of input into Test Rules, which is one of the following:
+
+
Input Aspects – input into atomic rules, such as DOM Tree and CSS Styling etc.
+
Input Rules – input into the composite rules, which are the atomic rules in scope
+
+
+
Applicability – description of the specific parts of the content, for which the rule applies
+
Expectations – description of the expected characteristics of the applicable rule content
+
Assumptions – assumptions made, such as specific interpretations of the requirements
+
Accessibility Support – known limitations regarding browsers and assistive technology
+
Test Cases – sample code demonstrating passed, failed, and inapplicable rule conditions
+
Change Log – history of changes for the Test Rules, to support backward compatibility
+
Glossary – list of key terms defined by the Test Rule or used by the specific Test Rule
+
Issues List (Optional) – list of known issues or bugs for the particular Test Rule, if any
+
Background (Optional) – relevant background, such as additional documentation, if any
+
Acknowledgements (Optional) – such as rule writers, reviewers, and other contributors
This section discusses metadata techniques that can be employed to satisfy WCAG 2.1 Success Criteria. For more information about metadata see resources below.
+
This section discusses metadata techniques that can be employed to satisfy WCAG 2 success criteria. For more information about metadata see resources below.
At its most basic level, metadata is essentially 'data about data' and is used to both describe and find resources.
Metadata is a powerful tool that can be used for describing Web pages and accessible components of Web pages as well as associating alternate versions of Web content to each other. These descriptions in turn allows users to locate specific information they need or prefer.
-
In conjunction with WCAG, metadata can play a number of roles including:
+
In conjunction with WCAG 2, metadata can play a number of roles including:
Metadata can be used to associate conforming alternate versions of Web pages with Web pages which do not conform, in order to allow users to find the conforming alternate version when they land on a non-conforming page that they cannot use.
@@ -17,7 +17,7 @@
Understanding Metadata
Metadata can be used to locate and also to describe alternate pages where there are multiple versions of a page which have been developed, especially where the alternate pages are optimized for individuals with different disabilities. The user can use the metadata both to locate the alternate versions and to identify characteristics of the versions, so that they can find the one that best meets their needs.
-
In addition to being used for whole pages (as in #1 and #2 above), metadata can be used to describe alternate versions of subcomponents of a page. Again, the metadata can be used to find alternate versions of a Web page component as well as to get descriptions of the alternate versions ( if there are several) in order to determine which one would best meet the user's needs.
+
In addition to being used for whole pages (as in #1 and #2 above), metadata can be used to describe alternate versions of subcomponents of a page. Again, the metadata can be used to find alternate versions of a Web page component as well as to get descriptions of the alternate versions (if there are several) in order to determine which one would best meet the user's needs.
Understanding Techniques for WCAG Success Criteria
-
WCAG 2.1 guidelines and success criteria are designed to be broadly applicable to current and future web technologies, including dynamic applications, mobile, digital television, etc. They are stable and do not change.
-
Specific guidance for authors and evaluators on meeting the WCAG success criteria is provided in techniques, which include code examples, resources, and tests. W3C's Techniques for WCAG 2.1 document is updated periodically, about twice per year, to cover more current best practices and changes in technologies and tools.
Understanding Techniques for WCAG 2 Success Criteria
+
WCAG 2 guidelines and success criteria are designed to be broadly applicable to current and future web technologies, including dynamic applications, mobile, digital television, etc. They are stable and do not change.
+
Specific guidance for authors and evaluators on meeting the WCAG 2 success criteria is provided in techniques, which include code examples, resources, and tests. W3C's Techniques for WCAG 2 document is updated periodically, about twice per year, to cover more current best practices and changes in technologies and tools.
Techniques are informative—that means they are not required. The basis for determining conformance to WCAG 2.1 is the success criteria from the WCAG 2.1 standard—not the techniques.
-
Note 1: W3C cautions against requiring W3C's sufficient techniques. The only thing that should be required is meeting the WCAG 2.1 success criteria. To learn more, see:
+
Techniques are informative — that means they are not required. The basis for determining conformance to WCAG 2 are the success criteria from the WCAG 2 standard — not the techniques.
+
Note 1: W3C cautions against requiring W3C's sufficient techniques. The only thing that should be required is meeting the WCAG 2 success criteria. To learn more, see:
Note 2: Techniques for WCAG 2.1 uses the words "must" and "should" only to clarify guidance within the techniques, not to convey requirements for WCAG.
+
Note 2: Techniques for WCAG 2 uses the words "must" and "should" only to clarify guidance within the techniques, not to convey requirements for WCAG 2.
Sufficient Techniques
@@ -57,10 +41,10 @@
Sufficient Techniques
From an author's perspective: If you use the sufficient techniques for a given criterion correctly and it is accessibility-supported for your users, you can be confident that you met the success criterion.
-
From an evaluator's perspective: If web content implements the sufficient techniques for a given criterion correctly and it is accessibility-supported for the content's users, it conforms to that success criterion. (The converse is not true; if content does not implement these sufficient techniques, it does not necessarily fail the success criteria, as explained in Testing Techniques below.)
+
From an evaluator's perspective: If web content implements the sufficient techniques for a given criterion correctly and it is accessibility-supported for the content's users, it conforms to that success criterion. (The converse is not true; if content does not implement these sufficient techniques, it does not necessarily fail the success criteria, as explained in Testing Techniques below.)
The W3C-documented sufficient techniques are provided in a numbered list where each list item provides a technique or combination of techniques that can be used to meet the success criterion. Where there are multiple techniques on a numbered list item connected by "AND" then all of the techniques must be used to be sufficient. For example, Sufficient Techniques for 1.3.1 has: "G115: Using semantic elements to mark up structure AND H49: Using semantic markup to mark emphasized or special text (HTML)".
@@ -71,24 +55,12 @@
Advisory Techniques
Advisory techniques are suggested ways to improve accessibility. They are often very helpful to some users, and may be the only way that some users can access some types of content.
Advisory techniques are not designated as sufficient techniques for various reasons such as:
-
-
they may not be sufficient to meet the full requirements of the success criteria;
-
-
-
they may be based on technology that is not yet stable;
-
-
-
they may not be accessibility supported in many cases (for example, assistive technologies do not work with them yet);
-
-
-
they may not be testable;
-
-
-
in some circumstances they may not be applicable or practical, and may even decrease accessibility for some users while increasing it for others;
-
-
-
they may not address the success criterion itself, and instead provide related accessibility benefits.
-
+
they may not be sufficient to meet the full requirements of the success criteria;
+
they may be based on technology that is not yet stable;
+
they may not be accessibility supported in many cases (for example, assistive technologies do not work with them yet);
+
they may not be testable;
+
in some circumstances they may not be applicable or practical, and may even decrease accessibility for some users while increasing it for others;
+
they may not address the success criterion itself, and instead provide related accessibility benefits.
Authors are encouraged to apply all of the techniques where appropriate to best address the widest range of users' needs.
@@ -100,64 +72,60 @@
Failures
Authors to know what to avoid,
-
Evaluators to use for checking if content does not meet WCAG success criteria.
+
Evaluators to use for checking if content does not meet WCAG 2 success criteria.
-
Content that has a failure does not meet WCAG success criteria, unless an alternate version is provided without the failure.
-
If anyone identifies a situation where a documented failure is not correct, please report the situation as a WCAG comment so that it can be corrected or deleted as appropriate.
+
Content that has a failure does not meet WCAG 2 success criteria, unless an alternate version is provided without the failure.
+
If anyone identifies a situation where a documented failure is not correct, please report the situation as a WCAG 2 comment so that it can be corrected or deleted as appropriate.
-
General and Technology-specific Techniques
+
General and Technology-specific Techniques
General techniques describe basic practices that apply to all technologies. Technology-specific techniques apply to a specific technology.
Some success criteria do not have technology-specific techniques and are covered only with general techniques. Therefore, both the general techniques and the relevant technology-specific techniques should be considered.
-
Publication of techniques for a specific technology does not imply that the technology can be used in all situations to create content that meets WCAG 2.1 success criteria and conformance requirements. Developers need to be aware of the limitations of specific technologies and provide content in a way that is accessible to people with disabilities.
+
Publication of techniques for a specific technology does not imply that the technology can be used in all situations to create content that meets WCAG 2 success criteria and conformance requirements. Developers need to be aware of the limitations of specific technologies and provide content in a way that is accessible to people with disabilities.
Other Techniques
-
In addition to the techniques in W3C's Techniques for WCAG 2.1 document, there are other ways to meet WCAG success criteria. W3C's techniques are not comprehensive and may not cover newer technologies and situations.
-
Web content does not have to use W3C's published techniques in order to conform to WCAG 2.1.(See also Techniques are Informative above.)
-
Content authors can develop different techniques. For example, an author could develop a technique for HTML5, WAI-ARIA, or other new technology. Other organizations may develop sets of techniques to meet WCAG 2.1 success criteria.
+
In addition to the techniques in W3C's Techniques for WCAG 2 document, there are other ways to meet WCAG 2 success criteria. W3C's techniques are not comprehensive and may not cover newer technologies and situations.
+
Web content does not have to use W3C's published techniques in order to conform to WCAG 2. (See also Techniques are Informative above.)
+
Content authors can develop different techniques. For example, an author could develop a technique for HTML5, WAI-ARIA, or other new technology. Other organizations may develop sets of techniques to meet WCAG 2 success criteria.
The WCAG Working Group encourages people to submit new techniques so that they can be considered for inclusion in updates of the Techniques for WCAG 2.1 document. Please submit techniques for consideration using the Techniques Submission Form.
+
The WCAG Working Group encourages people to submit new techniques so that they can be considered for inclusion in updates of the Techniques for WCAG 2 document. Please submit techniques for consideration to the WCAG repository on GitHub.
Testing Techniques
-
Each technique has tests that help:
+
Each technique has tests that help:
-
-
authors verify that they implemented the technique properly, and
-
-
-
evaluators determine if web content meets the technique.
-
+
authors verify that they implemented the technique properly, and
+
evaluators determine if web content meets the technique.
-
The tests are only for a technique, they are not tests for conformance to WCAG success criteria.
+
The tests are only for a technique, they are not tests for conformance to WCAG 2 success criteria.
Failing a technique test does not necessarily mean failing WCAG, because the techniques are discrete (that is, they address one specific point) and they are not required.
-
Content can meet WCAG success criteria in different ways other than W3C's published sufficient techniques.
+
Content can meet WCAG 2 success criteria in different ways other than W3C's published sufficient techniques.
-
Content that passes the sufficient techniques for a specific technology does not necessarily meet all WCAG success criteria. Some success criteria have only general techniques, not technology-specific techniques.
+
Content that passes the sufficient techniques for a specific technology does not necessarily meet all WCAG 2 success criteria. Some success criteria have only general techniques, not technology-specific techniques.
The content must be accessibility supported for the content's users. Some sufficient techniques require browser, assistive technology, or other support that some users might not have.
-
Thus while the techniques are useful for evaluating content, evaluations must go beyond just checking the sufficient technique tests in order to evaluate how content conforms to WCAG success criteria.
+
Thus while the techniques are useful for evaluating content, evaluations must go beyond just checking the sufficient technique tests in order to evaluate how content conforms to WCAG 2 success criteria.
Failures are particularly useful for evaluations because they do indicate non-conformance (unless an alternate version is provided without the failure).
@@ -170,10 +138,10 @@
Support Notes Change Over Time
Using the Techniques
-
Techniques for WCAG 2.1 is not intended to be used as a stand-alone document. Instead, it is expected that content authors will usually use How to Meet WCAG 2.1: A customizable quick reference to read the WCAG success criteria, and follow links from there to specific topics in Understanding WCAG 2.1 and to specific techniques.
+
Techniques for WCAG 2 is not intended to be used as a stand-alone document. Instead, it is expected that content authors will usually use How to Meet WCAG 2.2: A customizable quick reference to read the WCAG 2 success criteria, and follow links from there to specific topics in Understanding WCAG 2 and to specific techniques.
Alternatives must meet success criteria
-
Some techniques describe how to provide alternate ways for users to get content. For example, G73: Providing a long description in another location... mentions a transcript as an alternative for an audio file. Some alternatives must also conform to WCAG. For example, the transcript itself must meet all relevant success criteria.
+
Some techniques describe how to provide alternate ways for users to get content. For example, G73: Providing a long description in another location... mentions a transcript as an alternative for an audio file. Some alternatives must also conform to WCAG 2. For example, the transcript itself must meet all relevant success criteria.
This section contains the main explanatory content of the Understanding. It explains why the Guideline or Success Criterion exists and, at a high level, how to meet it.
-
-
Benefits
-
This explains how following the success criterion benefits particular types of users with disabilities.
-
-
Benefit
-
-
+
This section contains the main explanatory content of the Understanding. It explains why the Guideline or success criterion exists and, at a high level, how to meet it.
+
+
+
Benefits
+
This explains how following the success criterion benefits particular types of users with disabilities.
+
+
Benefit
+
Examples
@@ -37,7 +37,7 @@
Resources
Techniques
-
This section references techniques that can be used to meet the Guideline or Success Criterion. There are sub-sections for sufficient techniques, advisory techniques, and failures.
+
This section references techniques that can be used to meet the Guideline or success criterion. There are sub-sections for sufficient techniques, advisory techniques, and failures.
Within each sub-section, there may be "situations" to describe when a set of techniques need to be considered. Remove the sub-section and heading if situations are not used.
Techniques are provided in an unordered list. Reference techniques by linking to the filename of the technique and using the technique ID as link text. Use unlinked plain text if the technique has not been written yet.
@@ -49,7 +49,7 @@
Techniques
Sufficient
-
Techniques that are sufficient to meet the Guideline or Success Criterion.
+
Techniques that are sufficient to meet the guideline or success criterion.
Situation
@@ -63,14 +63,14 @@
Situation
Advisory
-
Techniques that are not sufficient by themselves to meet the Guideline or Success Criterion.
+
Techniques that are not sufficient by themselves to meet the guideline or success criterion.
Same template as sufficient techniques.
Failure
-
Techniques that document conditions that would cause the page not to meet the Guideline or Success Criterion, even if sufficient techniques are also used.
+
Techniques that document conditions that would cause the page not to meet the guideline or success criterion, even if sufficient techniques are also used.
Same template as sufficient techniques.
-
\ No newline at end of file
+
diff --git a/understanding/understanding.11tydata.js b/understanding/understanding.11tydata.js
new file mode 100644
index 0000000000..e6a12fdc66
--- /dev/null
+++ b/understanding/understanding.11tydata.js
@@ -0,0 +1,7 @@
+export default function (data) {
+ return {
+ headerLabel: "Understanding Docs",
+ headerUrl: data.understandingUrl,
+ isUnderstanding: true,
+ };
+}
diff --git a/wcag20/Techniques/ua-notes/aria.html b/wcag20/Techniques/ua-notes/aria.html
index 475368b656..44e8d1af4e 100644
--- a/wcag20/Techniques/ua-notes/aria.html
+++ b/wcag20/Techniques/ua-notes/aria.html
@@ -27,7 +27,7 @@
WAI-ARIA Technology Notes<
support the use of Liveregions.
Firefox 3+ contains better support for WAI-ARIA, including
Liveregions.
IE8 partially supports WAI-ARIA.
JAWS 8 and Window-Eyes 5.5+ partially support
WAI-ARIA.
Jaws 10+ supports WAI-ARIA.
FireVox, a self-voicing extension to Firefox, also
- supports WAI-ARIA via direct DOM access.
NVDA partially supports WAI-ARIA.
Accessibility Support for WAI-ARIA
Using technologies in an Accessibility Supported way is required for conformance claims. Read more about Accessibility Support. [begin delete] The WCAG Working Group plans to review which WAI-ARIA techniques are sufficient when Accessible Rich Internet Application specifications reach W3C Recommendation status. [end delete]Refer to WAI-ARIA Overview for the latest information on the status of WAI-ARIA specifications.
ARIA1: Using the aria-describedby property to provide a descriptive label for user interface controls
Jaws V.11 and greater has complete support.
+ supports WAI-ARIA via direct DOM access.
NVDA partially supports WAI-ARIA.
Accessibility Support for WAI-ARIA
Using technologies in an Accessibility Supported way is required for conformance claims. Read more about Accessibility Support. [begin delete] The WCAG Working Group plans to review which WAI-ARIA techniques are sufficient when Accessible Rich Internet Application specifications reach W3C Recommendation status. [end delete]Refer to WAI-ARIA Overview for the latest information on the status of WAI-ARIA specifications.
ARIA1: Using the aria-describedby property to provide a descriptive label for user interface controls
Most screen readers do not provide automatic notification about em, strong, b, or i.
JAWS contains support for blockquote and cite. WindowEyes contains support for blockquote, q and cite.
Firefox 1.0 (Windows) and higher, Opera 7.54 (Windows) and higher, Mozilla 1.7.3 (Windows) and higher automatically generate quotes around q elements, but Internet Explorer 6 for Windows does not.
This technique is not supported well by assistive technologies and cross-browser
- support is irregular.
H57: Using language attributes on the html element
Additional subtags for region, script, variant or other aspects may lead to errors in language switching in older versions of some screenreaders.
JAWS 8.0 can be configured to change language automatically on the basis of the lang attribute. However, it only switches amongst major languages as indicated by the primary code. If a regional language variant is indicated with a language subcode, JAWS will use the default variant for which it is configured.
H58: Using language attributes to identify changes in the human language
Additional subtags for region, script, variant or other aspects may lead to errors in language switching in older versions of some screenreaders.
JAWS 8.0 can be configured to change language automatically on the basis of the lang attribute. However, it only switches amongst major languages as indicated by the primary code. If a regional language variant is indicated with a language subcode, JAWS will use the default variant for which it is configured.
The link element has inconsistent user agent and assistive technology support.
Some user agents provide an optional navigation bar which will display the
- information specified in the link element. Current versions of the Mozilla and Opera
- browsers provide this functionality. IE 6.0 and Firefox 1.5 do not offer this feature
- but it may be available through extensions or add-ons.
Some user agents provide an optional navigation bar which will display the
+ support is irregular.
H57: Using language attributes on the html element
Additional subtags for region, script, variant or other aspects may lead to errors in language switching in older versions of some screenreaders.
JAWS 8.0 can be configured to change language automatically on the basis of the lang attribute. However, it only switches amongst major languages as indicated by the primary code. If a regional language variant is indicated with a language subcode, JAWS will use the default variant for which it is configured.
H58: Using language attributes to identify changes in the human language
Additional subtags for region, script, variant or other aspects may lead to errors in language switching in older versions of some screenreaders.
JAWS 8.0 can be configured to change language automatically on the basis of the lang attribute. However, it only switches amongst major languages as indicated by the primary code. If a regional language variant is indicated with a language subcode, JAWS will use the default variant for which it is configured.
Some user agents provide an optional navigation bar which will display the
information specified in the link element. Current versions of the Mozilla
and Opera browsers provide this functionality. IE 6.0 and Firefox 1.5 do not offer
this feature but it may be available through extensions or add-ons. See The 'link'-Element in (X)HTML for
diff --git a/wcag20/Techniques/working-examples/ARIA1/ex1.html b/wcag20/Techniques/working-examples/ARIA1/ex1.html
index 093b5e6900..075d5fa713 100644
--- a/wcag20/Techniques/working-examples/ARIA1/ex1.html
+++ b/wcag20/Techniques/working-examples/ARIA1/ex1.html
@@ -3,7 +3,7 @@
"http://www.w3.org/TR/html4/strict.dtd">
-
+
Demonstration of describedby propertyHighlighting elements that receive focus
diff --git a/wcag20/Techniques/working-examples/C17/input-resize.html b/wcag20/Techniques/working-examples/C17/input-resize.html
index 3607b7ef55..df10223f10 100644
--- a/wcag20/Techniques/working-examples/C17/input-resize.html
+++ b/wcag20/Techniques/working-examples/C17/input-resize.html
@@ -1,7 +1,7 @@
-
+
Example of resizing input with CSS
-
-
+
+
-
+
Guidance on Applying WCAG 2.0 to Non-Web Information and Communications Technologies (WCAG2ICT)
W3C Editors' DraftWorking Group Note 5 September 2013
@@ -241,7 +241,7 @@
W3C
This document is available in an expandable / collapsible alternate version in which the “Intent” sections copied from Understanding WCAG 2.0 are hidden and individually expandable, for easier reading.
This document, “Guidance on Applying WCAG 2.0 to Non-Web Information and Communications Technologies (WCAG2ICT)” describes how the Web Content Accessibility Guidelines (WCAG) 2.0 [WCAG20] and its principles, guidelines, and success criteria can be applied to non-web Information and Communications Technologies (ICT), specifically to non-web documents and software. It provides informative guidance (guidance that is not normative and does not set requirements).
Note 1: Content for which there are software players, viewers or editors with a 200 percent zoom feature would automatically meet this success criterion when used with such players, unless the content will not work with zoom.
Note 2: The Intent section refers to the ability to allow users to enlarge the text on screen at least up to 200% without needing to use assistive technologies. This means that the application provides some means for enlarging the text 200% (zoom or otherwise) without loss of content or functionality or that the application works with the platform features that meet this requirement.
diff --git a/working-examples/aria-alert-identify-errors/index.html b/working-examples/aria-alert-identify-errors/index.html
index ea01f5d6c3..8a8bd92df3 100644
--- a/working-examples/aria-alert-identify-errors/index.html
+++ b/working-examples/aria-alert-identify-errors/index.html
@@ -1,9 +1,28 @@
-
+
-Using role=alert to Identify Errors
-
+Using ARIA live regions or role=alert to identify errors
+
+
+
+
+
+
\ No newline at end of file
diff --git a/working-examples/css-pointer-spacing/index.html b/working-examples/css-pointer-spacing/index.html
index d0f152f1d9..f4cf5d0e84 100644
--- a/working-examples/css-pointer-spacing/index.html
+++ b/working-examples/css-pointer-spacing/index.html
@@ -1,188 +1,165 @@
-
-Working example - Using min-height and min-width to ensure sufficient target spacing
+
+ Working example - Using min-height and min-width to ensure sufficient target spacing
-
-
+
-
Working example of using min-height and min-width to ensure sufficient target spacing
Example 1 (display: inline-block, min-height: 44px and min-width: 44px set on list items inside pagination menu)
-
The first example shows a situation where the targets (in this case, the linked numbers in th pagination menu) are smaller than 44 x 44 CSS pixels. However, the list items that contain them have a minimum height and width of 44 px set, so that sufficient target spacing is assured.
1838. Condition: Very Good. Published by Belmont Books, 1969.
-
-
-
-
-
Example 2 (display: flex, min-height: 44px and min-width: 44px set on links inside pagination menu)
-
The second example uses min-width and min-height on the targets (the linked numbers in the pagination menu) and not on the parent container, thereby meeting this target spacing Success Criterion and the AAA Success Criterion 2.5.5 Target Size.
Example 1 (display: inline-block, min-height:44px and min-width:44px set on list items inside pagination menu)
+
The first example shows a situation where the targets (in this case, the linked numbers in the pagination menu) are smaller than 44 × 44 CSS pixels. However, the list items that contain them have a minimum height and width of 44px, so that sufficient target spacing is assured.
1838. Condition: Very Good. Published by Belmont Books, 1969.
+
+
+
+
+
Example 2 (display: flex, min-height:44px and min-width:44px set on links inside pagination menu)
+
The second example uses min-width and min-height on the targets (the linked numbers in the pagination menu) and not on the parent container, thereby meeting this target spacing Success Criterion and the AAA Success Criterion 2.5.5 Target Size.
The default state of this page is to be 320px wide (like a mobile-sized display) with no styling on the links. You should see link-text breaking the boundaries of their containers. Some of which will cause horizontal scrolling at 320px wide, or you will see the URLs break-out of their container. When the style 'a.wrapped {overflow-wrap: break-word;} is toggled with the button, the long URLs will wrap within their respective containers.
-
+
The default state of this page is to be 320px wide (like a mobile-sized display) with no styling on the links. You should see link-text breaking the boundaries of their containers. Some of which will cause horizontal scrolling at 320px wide, or you will see the URLs break-out of their container. When the style 'a.wrapped {overflow-wrap: break-word;} is toggled with the button, the long URLs will wrap within their respective containers.
+
Example - URL with equal signs, underscores, ampersands, and dashes, but some long sections of unbroken alphanumeric characters.
- Note: due to the * selector all examples work in IE/Edge styled or not.
Using media queries to un-fix sticky headers / footers
The objective of this technique is to be able to present content without sticky headers and footers when the space of the viewport is limited. This may be because of a device held in landscape mode or by zooming on a dektop.