WCAG 2.2

Back to Overview
00:00,001 --> 00:16,880
Hello and welcome back. This is the WCAG 2.2 update that I promised. Let's get into it and see what has changed, what is new, what has been removed, all of that stuff.

00:19,380 --> 00:36,100
Let's go. And WCAG 2.2 was released in October 2023. So it's a relatively new standard. And it's important to know that WCAG standards, they only come every couple of years.

00:36,100 --> 00:49,680
So WCAG 1 was in 1999, and then in 2008 there was WCAG 2.0, and then WCAG 2.1 took 10 years, and then WCAG 2.2 took 5 years.

00:50,180 --> 00:57,159
Now, you would think that WCAG 2.3 would come around in 2028, but that's not true.

00:57,160 --> 01:06,280
They're working on WCAG 3, which is supposed to be released around 2030-ish.

01:06,880 --> 01:20,920
So WCAG 2.2 is a very long-term, very foundational thing, and you don't need to worry about big changes until several years out, which is good.

01:21,380 --> 01:28,399
So, WCAG 2.2 it is. You heard about most of the things in WCAG 2.0 and WCAG 2.1.

01:28,399 --> 01:35,220
And there will be a lot that you're going to hear about those.

01:35,720 --> 01:39,840
Let's look at specific what happened to WCAG 2.2.

01:41,200 --> 01:48,039
And the first thing is that you should, if you have looked into WCAG 2.2 from before it was released,

01:48,520 --> 01:50,560
you should forget everything.

01:50,559 --> 01:58,959
about it because during the development of WCAG 2.2, it was just not easy and a lot has

01:58,959 --> 02:05,759
changed over the months and years of working through the drafts. And so you will find some

02:05,759 --> 02:12,979
information on the web that is outdated. Always look at the date that it's after October 2023

02:12,979 --> 02:20,039
to ensure that you're looking at the latest, well, at the released standard stuff

02:20,039 --> 02:24,899
and not, you know, on something that was just a proposal.

02:25,239 --> 02:31,999
Because that can be, like, misleading and then you have not, you know, learned something wrong

02:31,999 --> 02:35,179
or you just can't use it as such.

02:37,119 --> 02:42,679
WCAG 2.2 contains everything from WCAG 2.0 and 2.1, almost.

02:42,879 --> 02:44,199
I'll get to that in a second.

02:45,979 --> 02:52,479
And it adds nine new success criteria and removes one outdated success criteria.

02:52,479 --> 02:54,759
And that's the thing that has been removed.

02:55,059 --> 02:58,179
So that's not contained in WCAG 2.2.

02:59,039 --> 03:01,859
We will go through each change step by step.

03:02,219 --> 03:06,159
And I'm going to explain what these new success criteria mean.

03:06,499 --> 03:09,899
and also how you navigate the missing success criterion.

03:10,519 --> 03:14,359
But before we do that, we should look at WCAG in general.

03:14,919 --> 03:17,959
Again, just to remind you of that.

03:18,979 --> 03:24,479
The structure of WCAG is the same as in 2.1.

03:25,759 --> 03:29,699
WCAG 2.1 did add the whole new guideline input modalities.

03:30,519 --> 03:33,159
2.2 does not do that.

03:33,299 --> 03:35,279
It's completely the same structure.

03:35,679 --> 03:40,519
It has the fear-poor principles, perceivable, operable, understandable, and robust.

03:41,059 --> 03:43,819
And they are useful as ever.

03:45,159 --> 03:51,359
And, you know, that elevator pitch that content needs to be perceivable, understandable,

03:51,679 --> 03:57,079
and can be operated through a variety of input modalities and implemented in a robust way,

03:57,199 --> 03:59,319
that elevator pitch is still there.

03:59,899 --> 04:02,919
The same thing goes for the 13 guidelines.

04:03,399 --> 04:06,959
As I said, nothing has changed there.

04:08,079 --> 04:12,259
WCAG 2.2 is a relatively tame update in that regard.

04:12,799 --> 04:17,939
The guideline goes into a little detail of what needs to be done to make content accessible.

04:18,639 --> 04:23,059
And these are the high-level ideas of WCAG, but you know them by now.

04:23,699 --> 04:27,959
All in all, WCAG 2.2 has 83 success criteria.

04:28,979 --> 04:31,459
And success criteria, they are the guardrails.

04:31,899 --> 04:37,239
When you aim to meet a guideline, what is the minimum you must reach to call your effort a success?

04:38,059 --> 04:42,159
How close can you go to the edge of the road without crashing?

04:42,559 --> 04:44,119
That's why we have success criteria.

04:45,779 --> 04:48,919
Now let's look at the nine new success criteria.

04:48,919 --> 04:50,479
This is the whole list.

04:51,139 --> 04:54,219
It's 2 for 11, focus not obscured, minimum.

04:54,739 --> 04:57,379
2 for 12, focus not obscured, enhanced.

04:57,739 --> 04:59,839
2 for 13, focus appearance.

05:01,139 --> 05:19,239
257 dragging movements, 258 target size minimum, 326 consistent help, 337 redundant entry, 338 accessible authentication, and 339 accessible authentication enhanced.

05:19,879 --> 05:22,439
338 was accessible authentication minimum.

05:23,039 --> 05:25,939
That's a lot of words for these things.

05:27,959 --> 05:30,059
Yeah, let's look at the new.

05:30,619 --> 05:35,119
So the first three will concern the visibility and appearance of the focus.

05:35,839 --> 05:42,139
They are adding two 247 focus visible from WCAG 2.0 and WCAG 2.1.

05:42,819 --> 05:49,619
Then two are about affordances for people who cannot use pointer input or can only use them very imprecisely.

05:49,619 --> 05:51,939
That's the dragging movements and target size one.

05:52,579 --> 06:01,839
One is about consistent help, and three are about making it easier to enter repeat information and making authentication more accessible.

06:02,279 --> 06:04,639
Let's go through them one by one.

06:04,639 --> 06:15,299
So in 2.4 Navigable, you have focus and obscured two ways, one on AA and one on AAAA.

06:16,819 --> 06:21,139
And you have the focus appearance success criterion.

06:21,539 --> 06:29,039
Just as a reminder, these are other ANWASCs in 2.4 navigable,

06:29,039 --> 06:35,739
like bypass blocks, page title, focus order, multiple ways, settings, labels, and focus visible.

06:37,259 --> 06:45,199
An important warning to remember when we're looking at these success criteria,

06:47,679 --> 06:54,219
In contrary to 2.4.7, focus visible, and 2.4.13, which we will talk about focus appearance,

06:55,039 --> 07:02,379
2.4.11, focus not obscured, and 2.4.12, focus not obscured enhanced, the first one was minimum,

07:03,119 --> 07:08,499
are not about the focus indicator, but about the focused UI component itself.

07:09,159 --> 07:10,519
Let's get into it.

07:12,359 --> 07:25,019
So, focus not obscured minimum, it says when a user interface component receives keyboard focus, the component itself is not entirely hidden due to author-created content.

07:25,759 --> 07:34,379
So, when I focus something, it cannot be entirely hidden, which makes sense, right?

07:34,379 --> 07:41,219
You don't want a button to focus that you focus and then it's not visible anymore on the screen.

07:42,079 --> 07:43,619
And so this prevents that.

07:44,439 --> 07:46,979
And then there's the enhanced version of that,

07:47,839 --> 07:51,579
which basically says when a user interface component receives keyboard focus,

07:51,999 --> 07:55,439
no part of the component is hidden by author-created content.

07:56,239 --> 07:59,479
And that's quite important that you have this distinction.

07:59,479 --> 08:05,899
The first one, the lower-level AA criterion, says it can't be entirely hidden.

08:07,379 --> 08:09,139
But it can be somewhat hidden.

08:09,699 --> 08:10,539
Sure, right.

08:10,739 --> 08:24,459
So if it's only like a corner or it's like even, you know, 95% of the UI item is hidden under 2, 4, 11, that would all count as a pass.

08:24,919 --> 08:31,779
And here we have no part of the component can be hidden by author-created content.

08:34,099 --> 08:35,939
What is author-created content?

08:36,699 --> 08:50,139
It's basically the whole thing about dialogues or you have sticky navigation or something like that that can easily hide focused elements.

08:53,619 --> 08:57,139
Let's look at a couple of examples.

08:58,239 --> 09:04,779
And this is to make the distinction between focus visible, focus not obscured, and focus not obscured enhanced.

09:06,139 --> 09:09,839
I will not say minimum whenever I say focus not obscured.

09:10,579 --> 09:12,219
It's just the base one.

09:14,099 --> 09:16,019
So this is the first situation.

09:16,279 --> 09:21,659
So we have an add to cart button and we have a clearly visible focus on it.

09:21,659 --> 09:25,919
This passes obviously all of the success criteria.

09:26,339 --> 09:27,659
There's a visible focus.

09:28,179 --> 09:31,539
The focused element is not obscured.

09:32,579 --> 09:35,819
And it's neither like fully nor partially.

09:35,819 --> 09:55,819
So yay! Then we have this second situation. So this puts a square rectangle in black over like half of the button. And basically this now means this passes focus visible because there is a visible focus around it.

09:55,819 --> 10:04,619
And it also passes focus not obscured minimum because it's not entirely hidden.

10:06,179 --> 10:08,779
So this is passed there.

10:09,179 --> 10:15,819
But of course, paths are hidden, so it fails focus not obscured enhanced, which is a AAA success criterion.

10:16,959 --> 10:23,839
And then the third example is everything is hidden of the UI component apart from the focus.

10:23,839 --> 10:29,519
which, yeah, this is a synthetic example, like nobody will hopefully do this.

10:30,279 --> 10:36,079
But technically, you're passing focus visible, but you're neither passing focus not obscured minimum,

10:36,579 --> 10:44,079
because the whole UI element itself is hidden, and you're not passing focus not obscured,

10:44,239 --> 10:49,199
because if the whole thing is hidden, then also parts of it are hidden.

10:49,539 --> 10:51,759
That's just, you know, common sense.

10:52,619 --> 11:04,479
And then this one obscures, like, all of the parts, like the focus and the UI element itself, and that fails all of the three success criteria.

11:06,959 --> 11:17,499
Just, you know, I don't think it's too complicated, but it helps to, like, think through, like, where the borders are between those different success criteria.

11:18,359 --> 11:24,739
And that brings us to 2.4.13, focus appearance, which is super complicated.

11:25,379 --> 11:30,939
I will read it really quickly and then show two examples and then we will move on.

11:31,459 --> 11:33,139
It's a AAA success criterion.

11:33,919 --> 11:47,199
They tried to do something for low vision people and then they got so complicated that it only worked as a AAA success criterion, which is really a shame.

11:47,199 --> 11:50,719
I wish we had something on the A or AA level.

11:51,499 --> 11:59,199
So this reads, when the keyboard focus indicator is visible, an area of the focus indicator meets all of the following.

12:00,379 --> 12:10,699
The focus indicator area is at least as large as the area of a two pixel thick parameter of the unfocused component or subcomponent.

12:10,699 --> 12:27,019
So basically a two pixel outline around the UI element and then has a contrast ratio of three to one between the same pixels in the focus and unfocus state.

12:27,019 --> 12:30,559
So this ensures that there is enough contrast.

12:31,119 --> 12:34,319
So it's thick and it's contrasty and that's awesome.

12:34,519 --> 12:42,939
And this is, if you ask me, this is how you always should make focus indicators, like something like that.

12:44,579 --> 12:45,519
There are two exceptions.

12:46,099 --> 12:50,079
The focus indicator is determined by the user agent and cannot be adjusted by the author.

12:50,479 --> 12:54,159
So if the author has no choice, they cannot do anything.

12:54,739 --> 12:55,399
That's okay.

12:55,699 --> 13:01,419
or the focus indicator and the indicator's background color are not modified by the author.

13:02,119 --> 13:08,719
So this would be like just relying on the standard formatting of focus indicators,

13:08,959 --> 13:12,719
which, yeah, sure, you should never do.

13:13,839 --> 13:18,519
Okay, and then this is the example, like that's what I said,

13:18,599 --> 13:22,619
like just having a two-pixel solid thick outline.

13:22,619 --> 13:26,879
But it doesn't mean that it has to be an outline.

13:27,019 --> 13:30,319
It could also be on a side, for example.

13:30,559 --> 13:39,459
As long as the number of pixels in the two-pixel perimeter is the same,

13:40,039 --> 13:42,499
you can style that as you wish.

13:42,659 --> 13:48,959
You could put a square or a rectangle with the same number of pixels next to the button

13:48,959 --> 13:49,899
as a focus style.

13:49,899 --> 13:58,939
that would also work. Or an arrow that has the same number of pixels changing with enough contrast

13:58,939 --> 14:07,559
would also work. You can be creative with this, which I like, but it has to have this two-pixel

14:07,559 --> 14:18,359
outline area. That's the important part. And this shows it with rounded rectangles,

14:18,359 --> 14:37,599
which is fun because if you do just a two pixel border, it's actually a little bit harder because the perimeter is not regular, right?

14:37,639 --> 14:43,199
You don't have like sharp edges and stuff like that.

14:43,199 --> 14:59,959
So, all four of these examples use solid lines. The outset, which basically sets it away from passes, the outline here passes too, and the border passes, because it has enough contrast to the unfocused style.

15:00,419 --> 15:05,859
But the inset, because it's not the same size, that would fail.

15:05,859 --> 15:11,359
And you could make up for the missing area by making it three pixels thick.

15:11,439 --> 15:15,359
Or you could have four pixels at the bottom or something like that.

15:15,439 --> 15:18,199
So you have multiple ways to do that.

15:19,799 --> 15:21,879
Okay, and that brings us to that.

15:22,159 --> 15:24,899
Yeah, you can read about it. I blogged about it on my blog as well.

15:25,199 --> 15:31,939
Like this is the AAA, so we won't come across this a lot.

15:32,739 --> 15:37,779
Then we have new SCs in guideline 2.5 input modalities.

15:38,479 --> 15:40,979
And that's dragging movements and target size.

15:42,219 --> 15:48,399
And really quick dragging movements basically says anything that uses a dragging movement,

15:48,899 --> 15:51,459
which basically means you're pressing down the mouse button,

15:51,459 --> 15:54,539
then you move your mouse, and then you're releasing your mouse.

15:54,539 --> 16:02,919
that falls under this and that can be all achieved with a single pointer without dragging. So this

16:02,919 --> 16:08,959
is not about keyboard navigation or making it available for keyboard users. This is, oh, I have

16:08,959 --> 16:16,899
a slider here and I have to slide like click, hold, drag, release page by page. This says it needs to

16:16,899 --> 16:22,839
be done with a single pointer without dragging like arrow buttons or something like that.

16:22,839 --> 16:31,779
then we have a target size minimum which is a long one again and i don't want to go into like

16:31,779 --> 16:37,779
specifics i won't even read it completely um but basically it requires your unleveled double a

16:37,779 --> 16:43,839
which is you know something that we all love and use uh it requires the size of the target

16:43,839 --> 16:53,359
like clickable areas basically to be 24 by 24 pixels at the minimum. That's the big thing.

16:53,859 --> 17:02,439
If it's smaller, then you need to have spacing around the clickable area. And then you can use

17:02,439 --> 17:10,579
a circle from the center of the clickable area and see if there's nothing else that can be focused

17:10,579 --> 17:17,279
in that clickable area or in that circle, then it passes.

17:17,559 --> 17:21,019
I have an image because that's much easier to explain.

17:21,739 --> 17:27,959
So at the top we have 24 by 24 buttons which pass.

17:28,519 --> 17:33,119
And here at the bottom we have 20 pixels by 20 pixel buttons

17:33,119 --> 17:37,259
with 4 pixel spacing in between.

17:38,099 --> 17:49,659
And if you look, like if you centered this underneath the top example, you would see that the visual icons are spaced the same size apart.

17:49,659 --> 17:54,119
So you have 20 pixels, 20 pixels, and you have 4 pixels.

17:54,699 --> 18:12,719
And if you put a 24 pixel circle inside of every button, it basically only touches, but it does not overlap with other clickable areas or their circle.

18:12,719 --> 18:14,539
And so that passes.

18:15,119 --> 18:20,679
And on the bottom, there's a fail, so there's no space between the 20 by 20 pixel icons.

18:21,239 --> 18:25,719
And so a circle would intersect between the individual buttons.

18:25,879 --> 18:27,799
And so this would be a fail.

18:28,979 --> 18:33,959
And so, yeah, that's basically what you do, 24 by 24 pixel target sizes.

18:34,739 --> 18:44,039
Now you might say, wait a minute, we already had a target size success criteria on 255.

18:44,179 --> 18:45,519
What's happened to that?

18:46,099 --> 18:57,579
Well, that was a 44 pixel by 44 pixel requirement, and that is level AAA, and it's still there.

18:57,579 --> 19:04,519
It just got renamed a little bit into target size enhanced, because this is now target size minimum.

19:04,959 --> 19:06,779
Not a big deal.

19:08,699 --> 19:13,319
The new SCN guideline 3.2 predictable is consistent help.

19:14,019 --> 19:28,219
And that basically says when there is a help mechanism on the page that is repeated across different pages, then you have to put it in the same space, in the same relative order.

19:30,779 --> 19:33,039
And that's basically what it is.

19:33,039 --> 19:42,739
So if you have a help and it's on every page or on multiple pages, then you want to make sure that users can find it easily.

19:43,659 --> 19:53,619
And the help mechanisms that are covered by this are human contact details, human contact mechanisms.

19:53,619 --> 19:59,479
So this would be like a form, for example, contact form.

19:59,959 --> 20:03,939
Self-help option, like a chatbot or something like that.

20:04,239 --> 20:09,339
Or a fully automated contact mechanism, but I don't really know what that is.

20:09,419 --> 20:10,619
Maybe that's the chatbot.

20:11,279 --> 20:18,199
and the self-help option is just like a database of help-related information.

20:19,379 --> 20:21,839
Yeah, that's all there is in 3.2.

20:22,259 --> 20:23,359
Pretty straightforward.

20:23,359 --> 20:31,739
And I think for most CMS-driven websites, relatively easy to achieve.

20:33,499 --> 20:36,479
New SEs in guideline 3.3 input.

20:37,119 --> 20:43,719
redundant entry, accessible authentication and accessible authentication enhanced. So redundant

20:43,719 --> 20:51,299
entry is pretty straightforward as well. So whenever information previously entered or provided to the

20:51,299 --> 20:59,259
user that is required to be entered again in the same process, you either can auto-populate the

20:59,259 --> 21:07,259
field or it makes it available for the user to select. So this is when you have a checkout

21:10,859 --> 21:17,099
process and it says like "Hey, select your billing address" and then you select that and then "Oh,

21:17,099 --> 21:23,819
select your shipping address". It should offer you, it's not required to offer you the billing

21:23,819 --> 21:32,899
address as a shipping address and stuff like that. So that's pretty nice actually. So that's a good

21:32,899 --> 21:40,979
thing. And there are a couple of exceptions when the information is essential. So when re-entering

21:40,979 --> 21:45,919
the information is essential. So that would be like, oh, it's a safety feature or something like

21:45,919 --> 21:53,319
that. When the information is required to ensure the security of the content. And if the previous

21:53,319 --> 22:01,059
you entered information is no longer valid. So that would be something like you are bidding on

22:01,059 --> 22:11,139
something that you want to like get from like you know an online auction site and you enter a number

22:11,139 --> 22:16,159
and then you have to enter your like payment details and then you have to confirm it.

22:16,159 --> 22:35,099
And if during the time where you put in your first bid and the confirmation at the end, the price has changed, then it doesn't need to give you the previously entered price because that is obviously not going to win you the auction.

22:35,379 --> 22:37,419
So it's no longer valid.

22:37,699 --> 22:39,619
So there might be things like that.

22:40,619 --> 22:43,559
But yeah, that's a good thing.

22:44,039 --> 22:49,319
And it will make it easier for a lot of people to fill out forms and stuff like that.

22:50,399 --> 22:54,499
Then we have accessible authentication and accessible authentication minimum.

22:55,059 --> 22:56,519
And these are very similar.

22:56,519 --> 23:10,519
So the accessible authentication minimum says a cognitive function test, such as remembering a password or solving a puzzle, is not required for any step of the authentication process.

23:11,339 --> 23:15,279
unless that step provides at least one of the following things.

23:16,019 --> 23:20,059
And Accessible Authentication Minimum has four things that you can do instead.

23:20,699 --> 23:26,519
And Accessible Authentication Enhanced has two things that you can do instead.

23:26,659 --> 23:27,439
It's very similar.

23:28,359 --> 23:33,999
And I don't repeat this twice because I helped making it this way.

23:34,419 --> 23:36,119
But I'm really happy about that.

23:36,239 --> 23:38,039
It feels very systematic.

23:38,819 --> 23:48,259
So for the AA and the AAA, you can provide an alternative, another authentication method that does not rely on a function test.

23:48,539 --> 23:54,959
So that would be authenticate through email or through an SMS code or something like that.

23:55,359 --> 24:02,459
Or a mechanism that assists the user in completing the cognitive function test.

24:02,539 --> 24:03,879
I don't know how that would work.

24:04,599 --> 24:09,539
In AA, you also have the option to provide object recognition.

24:10,459 --> 24:16,459
So you recognize objects that are on the page, like fire hydrants or something like that.

24:16,739 --> 24:24,239
Or you provide a way to display personal content to the user and use that as an authentication.

24:27,279 --> 24:37,459
Yeah, the AAA enhanced only has the two alternative and mechanism exceptions or ways to address this, I guess.

24:38,619 --> 24:40,719
And then we're almost at the end.

24:41,539 --> 24:47,499
The only other thing is that one outdated success criterion got removed, 4.1.1 passing.

24:48,919 --> 24:55,159
The reason is basically that a lot of people did that wrong, including me.

24:56,339 --> 25:02,919
interpreted it and like the thing that it tried to fix uh has not been a problem for like over 10

25:02,919 --> 25:10,439
years uh because browsers got better and like the web accessibility and the web standards got better

25:10,439 --> 25:16,859
so this is not needed anymore you shouldn't test for it uh and my recommendation is even if you do

25:16,859 --> 25:26,259
2.0 or 2.1 uh testing just ignore passing like it's not worth it i think the 2.1

25:26,259 --> 25:30,039
Standard even got updated to say that.

25:30,979 --> 25:33,499
And so you just don't care about it.

25:33,539 --> 25:38,799
And if you've never heard about 4.1.1 passing, forget that I even mentioned it.

25:39,019 --> 25:44,039
Like the 4s start with 4.2.1 and that's just how it is.

25:44,179 --> 25:44,699
4.1.2.

25:45,539 --> 25:48,179
They start with 4.1.2 and that's just how it is.

25:48,179 --> 25:48,539
Yeah.

25:49,639 --> 25:59,839
And from this wonderful excursion into WCAG 2.2, let's go back and have a good time.

25:59,959 --> 26:01,119
But that's how it goes.

26:02,039 --> 26:02,459
The end.