{
    "componentChunkName": "component---src-templates-blog-post-tsx",
    "path": "/blog/2018-07-14-what-is-new-in-wcag-2-1/",
    "result": {"data":{"blogPost":{"title":"WCAG 2.1: What does it actually mean?","slug":"/blog/2018-07-14-what-is-new-in-wcag-2-1/","authorNodes":[{"name":"Robert DeLuca","slug":"/people/robert-deluca/"}],"markdown":{"html":"<blockquote>\n<p>Publication as a W3C Recommendation finalizes the development process and indicates that the W3C considers the updated guidelines ready for implementation on web content.</p>\n</blockquote>\n<p><a href=\"https://www.w3.org/TR/WCAG21/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Last week WCAG 2.1 (Web Content Accessibility Guidelines)</a> was recommended by the W3C, which means they have finished it and it’s ready for everyone to start implementing.</p>\n<p>WCAG 2.0 was completed in 2008, back when touch devices were not as popular and tablets didn't exist yet. Since 2008 these devices have become the most prevalent way to access the web, but there were no success criteria that addressed accessibility for this input type.  That is the main theme of WCAG 2.1: take into account touch devices.  There are also a lot of new success criteria that address cognitive limitations too.</p>\n<p>Within WCAG there are three levels to conform to: A, AA, and AAA. Level A is the lowest bar of conformance and level AAA is the highest. These WCAG levels cascade, so if your app conforms to WCAG AA, it also conforms to WCAG A. Most companies shoot for AA since AAA has success criteria that are a little hard to reach and not all content can conform to AAA.</p>\n<p>In WCAG 2.1 there are:</p>\n<ul>\n<li>5 new A success criteria</li>\n<li>7 new AA success criteria</li>\n<li>5 new AAA success criteria</li>\n</ul>\n<p>Let's go over all <a href=\"https://www.w3.org/TR/WCAG21/#new-features-in-wcag-2-1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">17 new success criteria</a> to see what they are meant to solve and what it means for you. If you read the details for each of those success criteria some of them are straightforward and others aren’t. So I’m going to give <em>my</em> TL;DR version of the success criteria.</p>\n<h2 id=\"level-a\" style=\"position:relative;\"><a href=\"#level-a\" aria-label=\"level a permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Level A</h2>\n<p>There are five new success criteria for level A, which is the lowest level of conformance you can achieve (aka the easiest). The new success criteria are:</p>\n<ul>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#character-key-shortcuts\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2.1.4 Character Key Shortcuts</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#pointer-gestures\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2.5.1 Pointer Gestures</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#pointer-cancellation\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2.5.2 Pointer Cancellation</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#label-in-name\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2.5.3 Label in Name</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#motion-actuation\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2.5.4 Motion Actuation</a></li>\n</ul>\n<h3 id=\"214-character-key-shortcuts\" style=\"position:relative;\"><a href=\"#214-character-key-shortcuts\" aria-label=\"214 character key shortcuts permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.1.4 Character Key Shortcuts</h3>\n<p>Assistive tech users have a lot of their own key combos for navigating and interaction. This success criterion is to ensure you don’t implement keyboard shortcuts that would prevent their functionality.</p>\n<p>If you have any custom keyboard shortcuts implemented, <strong>one</strong> of the following need to be true:</p>\n<ul>\n<li>The ability to turn off the shortcut</li>\n<li>The ability to remap the shortcut to something different</li>\n<li>The keyboard shortcut is only present if the component is focused</li>\n</ul>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/character-key-shortcuts.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"251-pointer-gestures\" style=\"position:relative;\"><a href=\"#251-pointer-gestures\" aria-label=\"251 pointer gestures permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.5.1 Pointer Gestures</h3>\n<p>Since the last WCAG spec release there has been a lot of innovation on the web regarding touch devices. For example, with Google Maps you can use multi-touch gestures to pinch and zoom around the map.</p>\n<p>This success criterions says if there are multi-touch or slide gestures present, there must be a single input method also available.  To keep with the maps example, there should be <code class=\"language-text\">+</code> and <code class=\"language-text\">-</code> buttons available to provide non-pointer gesture interactions for this success criterion to pass.</p>\n<p>If the gesture is “essential” you may not need to worry about this one. They define “essential” as:</p>\n<blockquote>\n<p>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</p>\n</blockquote>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/pointer-gestures.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"252-pointer-cancellation\" style=\"position:relative;\"><a href=\"#252-pointer-cancellation\" aria-label=\"252 pointer cancellation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.5.2 Pointer Cancellation</h3>\n<p>For interactions that can be done with a single pointer (clicks, single taps, long presses, etc.), you must provide a way to cancel it. <strong>One</strong> of the following must be true:</p>\n<ul>\n<li>Don’t use the <code class=\"language-text\">down</code> event (<code class=\"language-text\">touchstart</code> or <code class=\"language-text\">mousedown</code>)</li>\n<li>You have a way to undo the action</li>\n<li>The <code class=\"language-text\">up</code> event cancels the <code class=\"language-text\">down</code> event (this is like clicking a link, moving your cursor, and releasing)</li>\n</ul>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/pointer-cancellation.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"253-label-in-name\" style=\"position:relative;\"><a href=\"#253-label-in-name\" aria-label=\"253 label in name permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.5.3 Label in Name</h3>\n<p>Say you have an input with the visible label as “Name” and an <code class=\"language-text\">aria-label</code> as “Enter First Name”, this success criterion would fail.  This is because speech input users navigate by saying the visible label. If the visible label doesn’t match the programmatic name (or accessible name) it will fail to navigate.</p>\n<p>To drill it home with code, here’s two examples:</p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token comment\">&lt;!-- Bad --></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span> <span class=\"token attr-name\">for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>First Name<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">aria-label</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>Enter your first name<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n\n<span class=\"token comment\">&lt;!-- Good --></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>label</span> <span class=\"token attr-name\">for</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>First Name<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>label</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>input</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>text<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>name<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span></code></pre></div>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/label-in-name.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"254-motion-actuation\" style=\"position:relative;\"><a href=\"#254-motion-actuation\" aria-label=\"254 motion actuation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.5.4: Motion Actuation</h3>\n<p>If you have an action that is triggered by motion, there must be a control on screen that performs the same action. For example, if you shake the device to undo text in an input, there should be a clear button available for single pointer devices to activate.</p>\n<p>Another example would be images you interact with by tilting your phone around. There should be buttons available that pan / tilt the picture too.</p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/motion-actuation.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h2 id=\"level-aa\" style=\"position:relative;\"><a href=\"#level-aa\" aria-label=\"level aa permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Level AA</h2>\n<p>There are seven new success criteria for level AA, which is the mid-level conformance you can achieve. The new success criteria are:</p>\n<ul>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#orientation\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">1.3.4 Orientation</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#identify-input-purpose\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">1.3.5 Identify Input Purpose</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#reflow\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">1.4.10 Reflow</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#non-text-contrast\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">1.4.11 Non-Text Contrast</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#text-spacing\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">1.4.12 Text Spacing</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#content-on-hover-or-focus\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">1.4.13 Content on Hover or Focus</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#status-messages\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">4.1.3 Status Messages</a></li>\n</ul>\n<h3 id=\"134-orientation\" style=\"position:relative;\"><a href=\"#134-orientation\" aria-label=\"134 orientation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.3.4 Orientation</h3>\n<p>Your site or app should work in either orientation: landscape and portrait. Unless it’s deemed to be “essential” to the function of your app:</p>\n<blockquote>\n<p>Examples where a particular display orientation may be essential are a bank check, a piano application, slides for a projector or television, or virtual reality content where binary display orientation is not applicable.</p>\n</blockquote>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/orientation.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"135-identify-input-purpose\" style=\"position:relative;\"><a href=\"#135-identify-input-purpose\" aria-label=\"135 identify input purpose permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.3.5 Identify Input Purpose</h3>\n<p>The inputs on your page should fill in metadata to help the user better understand the intention of the form inputs. You can do this by adding <a href=\"https://www.w3.org/TR/html52/sec-forms.html#sec-autofill\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><code class=\"language-text\">autocomplete</code> attributes to your inputs.</a> This is a <a href=\"https://www.w3.org/TR/WCAG21/#input-purposes\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">full list of input purposes.</a></p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/identify-input-purpose.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"1410-reflow\" style=\"position:relative;\"><a href=\"#1410-reflow\" aria-label=\"1410 reflow permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.4.10 Reflow</h3>\n<p>This might be my favorite new success criterion! It essentially means your site or app should be responsive. If you can’t make your site or app responsive an alternative could be providing a fixed <code class=\"language-text\">320px</code>width version.</p>\n<p>The explainer document linked below goes into <em>great</em> detail about why this decision was made and is a great resource for understanding how to pass this success criterion. I recommend reading through this one!</p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/reflow.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"1411-non-text-contrast\" style=\"position:relative;\"><a href=\"#1411-non-text-contrast\" aria-label=\"1411 non text contrast permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.4.11 Non-Text Contrast</h3>\n<p>UI components and meaningful graphics must have a color contrast ratio of 3:1 to adjacent elements. This includes all states UI components can have (except the disabled state, <a href=\"https://twitter.com/robdel12/status/1005108800465068034\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">which is confusing to me</a>).</p>\n<p>For example, a button’s hover, active, and focus states must all pass the 3:1 color contrast ratio. This does not apply to inactive elements (like a disabled button).</p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"1412-text-spacing\" style=\"position:relative;\"><a href=\"#1412-text-spacing\" aria-label=\"1412 text spacing permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.4.12 Text Spacing</h3>\n<p>Content on your site or app must be able to <em>expand</em> to the following requirements without any loss of content or functionality:</p>\n<ul>\n<li>Line height (line spacing) to at least 1.5 times the font size</li>\n<li>Spacing following paragraphs to at least 2 times the font size</li>\n<li>Letter spacing (tracking) to at least 0.12 times the font size</li>\n<li>Word spacing to at least 0.16 times the font size</li>\n</ul>\n<p>That does <em>not</em> mean that your site or app has to implement the above requirements as a baseline. But it should be able to scale to those requirements without losing functionality or readability.</p>\n<p>This success criterion helps those who have low vision or dyslexia since they may override the default content styles to help reduce confusion while reading.</p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/text-spacing.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"1413-content-on-hover-or-focus\" style=\"position:relative;\"><a href=\"#1413-content-on-hover-or-focus\" aria-label=\"1413 content on hover or focus permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.4.13 Content on Hover or Focus</h3>\n<p>Any content that shows or hides from hover or focus needs to be:</p>\n<ul>\n<li>Dismissable: a way to dismiss the content without moving the pointer or keyboard focus.</li>\n<li>Hoverable: the shown content should be able to be hovered and not dismiss.</li>\n<li>Persistent: the shown content remains visible until the <strong>user</strong> dismisses, focus trigger is removed, or the information is no longer valid.</li>\n</ul>\n<p>The key takeaway here is if you have content that appears due to an action, the user must have control over that content being shown or hidden. It can’t disappear without a explicit dismiss action from the user.</p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/content-on-hover-or-focus.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"413-status-messages\" style=\"position:relative;\"><a href=\"#413-status-messages\" aria-label=\"413 status messages permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4.1.3 Status Messages</h3>\n<p>The main focus of this success criterion is for screen reader users. When there is a change in content that does not change focus you should provide a status message to the screen reader. This is commonly known as the announcer pattern. I’ve written an <a href=\"https://github.com/ember-a11y/a11y-announcer\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ember addon for this</a> and there is a <a href=\"https://github.com/AlmeroSteyn/react-aria-live\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">react component that does this</a> too.</p>\n<p>An example of this might be when an error on a form is displayed in a banner it should also announce that message to the screen reader through <code class=\"language-text\">aria-live</code> or <code class=\"language-text\">role=“alert”</code>.</p>\n<p>Pro-tip: be careful when implementing this in your site or app. It’s <em>very</em> easy to get multiple announcers on the page that could announce over each other at any given time. I recommend having <strong>one</strong> announcer component that serves the entire application. That way there can only be one announcement at a given time.</p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/status-messages.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h2 id=\"level-aaa\" style=\"position:relative;\"><a href=\"#level-aaa\" aria-label=\"level aaa permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Level AAA</h2>\n<p>There are five new success criteria for level AAA, which is the highest conformance you can achieve. The new success criteria are:</p>\n<ul>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#identify-purpose\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">1.3.6 Identify Purpose</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#re-authenticating\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2.2.5 Re-authenticating</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#timeouts\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2.2.6 Timeouts</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#animation-from-interactions\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2.3.3 Animation from Interactions</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#target-size\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2.5.5 Target Size</a></li>\n<li><a href=\"https://www.w3.org/TR/WCAG21/#concurrent-input-mechanisms\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">2.5.6 Concurrent Input Mechanisms</a></li>\n</ul>\n<p>Level AAA is the least common level of conformance but I still think there are success criteria here that should be implemented. Things like re-auth, timeouts, and target size aren’t that hard to implement and probably are already implemented in your app since these are solid UX patterns.</p>\n<h3 id=\"136-identify-purpose\" style=\"position:relative;\"><a href=\"#136-identify-purpose\" aria-label=\"136 identify purpose permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1.3.6 Identify Purpose</h3>\n<p>This success criterion looks hard to implement properly. The intent is for your site or app to support personalization and preferences. Here are the examples they give in the understanding document:</p>\n<ul>\n<li>A website uses ARIA landmarks to identify the regions of the page, and users can hide areas that are not the 'main'.</li>\n<li>The links in the navigation of a website are marked-up so that users can add their own icons.</li>\n<li>Icons on a website use are marked-up so that the user can substitute their own icon set into the page.</li>\n</ul>\n<p>You can see how this one might be pretty hard to do right.</p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/identify-purpose.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"225-re-authenticating\" style=\"position:relative;\"><a href=\"#225-re-authenticating\" aria-label=\"225 re authenticating permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.2.5 Re-authenticating</h3>\n<p>When an authenticated session expires, the user can continue the activity without loss of data after re-authenticating.</p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/re-authenticating.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"226-timeouts\" style=\"position:relative;\"><a href=\"#226-timeouts\" aria-label=\"226 timeouts permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.2.6 Timeouts</h3>\n<p>If there is a timeout present on the page, there should be a warning shown before the session ends. You should provide a warning for anything that might cause data loss due to the session ending.</p>\n<p>These are usually implemented with a modal that pops up warning you that time is running out. Make sure that modal is accessibile too!</p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/timeouts.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"233-animation-from-interactions\" style=\"position:relative;\"><a href=\"#233-animation-from-interactions\" aria-label=\"233 animation from interactions permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.3.3 Animation from Interactions</h3>\n<p>If you have animations on your site the user should able to be disable them. Unless they are essential. What WCAG defines as an “essential” animation:</p>\n<blockquote>\n<p>A web application provides a feature to author animated sequences. As part of this tool, the author needs to preview the animation.</p>\n</blockquote>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/animation-from-interactions.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"255-target-size\" style=\"position:relative;\"><a href=\"#255-target-size\" aria-label=\"255 target size permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.5.5 Target Size</h3>\n<p>The target size of pointer inputs (mouse, pen, touch contact) should be a minimum <code class=\"language-text\">44px</code> by <code class=\"language-text\">44px</code> <strong>unless</strong>:</p>\n<ul>\n<li>Equivalent: there is another target on the same page that provides the same action that meets this success criterion.</li>\n<li>Inline: the target is in a sentence or block of text</li>\n<li>User Agent Control: the size of the target is controlled by the user agent &#x26; is not modified.</li>\n<li>Essential: the specific presentation is <em>required</em> for the target to function.</li>\n</ul>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/target-size.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h3 id=\"256-concurrent-input-mechanisms\" style=\"position:relative;\"><a href=\"#256-concurrent-input-mechanisms\" aria-label=\"256 concurrent input mechanisms permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2.5.6 Concurrent Input Mechanisms</h3>\n<p>I really like this addition to WCAG. This success criterion says you should make sure your content can be interacted with through different modes of input.</p>\n<p>The easiest example to give would be making sure your site or app works if someone pairs a wireless keyboard to their phone to navigate. Another example would be making sure your site can be interacted with from a laptop with a touchscreen. <a href=\"https://twitter.com/appsforartists/status/1005597722370564096\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">This exact example came up on Twitter over the weekend too!</a></p>\n<p>I like this one because my mom is 100% blind and uses her iPhone with a keyboard a lot of the time. It’s just easier than swiping sometimes.</p>\n<p><a href=\"https://www.w3.org/WAI/WCAG21/Understanding/concurrent-input-mechanisms.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">You can read the reasoning for it and <em>many</em> more details here.</a></p>\n<h2 id=\"wrap-up\" style=\"position:relative;\"><a href=\"#wrap-up\" aria-label=\"wrap up permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Wrap up</h2>\n<p>Whew! That was a lot to unpack. One of the biggest struggles I had when getting started in accessibility was finding resources that digested the WCAG spec into more concrete examples. Jumping right into specifications as a first step can be daunting. With that said I hope this post was enough for you to get familiar with the changes to WCAG and what they mean in simple terms.</p>\n<p>I think it is worthwhile for you to spend some time reading through a couple of the documents that explain the reasoning for these success criteria. One of the realizations I’ve had when reading through the spec is WCAG is a set of guidelines for improving your site’s UX. Accessibility really is all about making sure your site or app can be used by <em>anyone</em>, which serves as an excellent foundation to build upon for your site’s UX.</p>\n<p>If you or your team need any help getting up to speed with WCAG 2.1 <a href=\"https://frontside.com/contact\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">reach out to us!</a> If you would like to ask any questions or continue this conversation feel free to <a href=\"https://twitter.com/robdel12\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">reach out to me on Twitter</a>.</p>","frontmatter":{"date":"July 14, 2018","description":"WCAG 2.1 has officially been put in place as a standard but what does that mean? What was added? How does this impact my site or app? In this post we break down everything new in WCAG 2.1 and put in simple terms so you can walk away armed with the knowledge of making your site more accessibile.","tags":["accessibility","web standards"],"img":{"childImageSharp":{"fixed":{"src":"/static/7e5c20fcd943e76e94d77a4566eaa74d/a7715/2018-06-14-what-is-new-in-wcag-2-1_wcag-2-1-image.jpg"}}}}}}},"pageContext":{"id":"f910242b-16fc-5857-9edc-3790ff2fb6d4"}},
    "staticQueryHashes": ["1241260443"]}