\ No newline at end of file
diff --git a/en/articles/aria-attribute-role-with-multiple-values/index.html b/en/articles/aria-attribute-role-with-multiple-values/index.html
index cf274dc..67ed03d 100644
--- a/en/articles/aria-attribute-role-with-multiple-values/index.html
+++ b/en/articles/aria-attribute-role-with-multiple-values/index.html
@@ -21,7 +21,7 @@
},
"datePublished": "2024-06-03T00:00:00.000Z",
"dateModified": "2024-06-03T00:00:00.000Z"
- }
Role attribute with multiple values
ARIA
HTML
Recently, I discovered by chance that the role attribute may contain more than one value. This was very unexpected, at least for me.
So, I wrote this post out of research interest, so it doesn't contain much practical advice. In fact, some of it's better not put into practice.
Background on roles
Roles contain information on functions of elments, and how it can be interacted with. For example, screen readers will announce that the button element has the button role which means that this element is clicable.
Elements can have either implicit or explicit roles. The latter are specified in the role attribute.
There are many categories of roles, each with clear rules for their explicit usage. For instance, you can't change roles during interaction with an element, or set abstract roles, such as landmark, section, widget, etc. There are also roles that assume nested elements. For example, an element with role="menu" must have at least one menuitem element nested within it. However, the main rule is to set roles explicitly as rarely as possible, especially to avoid overriding semantics of elements.
What standards and specifications say?
In WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications), as the most obvious source about roles, there are no examples with two values for the attribute. I had to look up information about the multiple values in this case.
WAI-ARIA
Clause 7.1 Role Attribute in WAI-ARIA 1.1 contains the characteristics of the role attribute that should be considered in a host languages:
The attribute name MUST be role;
The attribute value MUST allow a token list as the value;
The appearance of the name literal of any concrete WAI-ARIA role as one of these tokens MUST NOT in and of itself make the attribute value illegal in the host-language syntax; and
The first name literal of a non-abstract WAI-ARIA role in the list of tokens in the role attribute defines the role according to which the user agent MUST process the element. User Agent processing for roles is defined in the Core Accessibility API Mappings 1.1.
Clauses 8.1 Role Attribute of WAI-ARIA versions 1.2 and 1.3 provides almost the same description:
The attribute value MUST allow a token list as the value;
The appearance of the name literal of any concrete WAI-ARIA role as one of these tokens MUST NOT in and of itself make the attribute value illegal in the host-language syntax; and
The first name literal of a non-abstract WAI-ARIA role in the list of tokens in the role attribute defines the role according to which the user agent MUST process the element. User Agent processing for roles is defined in the Core Accessibility API Mappings 1.2.
Since all versions of WAI-ARIA refers to other documentation, let is read it now.
Core Accessibility API Mappings
Core Accessibility API Mappings (Core-AAM for short) is a specification for browsers and other user agents. It describes how they must interact with Accessibility API.
Clause 5.4 Role mapping of Core-AAM 1.1 says what we want to find out:
Traditionally Accessibility API platforms have a limited set of predefined roles that are expected by assistive technologies on that platform, and only one or two roles can be provided. In contrast, WAI-ARIA allows multiple roles to be specified as an ordered set of valid role tokens separated by spaces. Additional roles are fallback for other roles, which is similar to the concept of specifying multiple fonts in case the first font type isn't supported.
This part of the document collects rules for roles themselves.
The user agent MUST use the first token in the sequence of tokens in the role attribute value which matches the name of any non-abstract WAI-ARIA role according to rules that are specified in the Role Mapping Table below. Note that when WAI-ARIA roles override host language semantics, there are no changes in the DOM, only in the accessibility tree.
User agents MUST NOT map roles defined in the WAI-ARIA specification as "abstract" via the standard role mechanism of the accessibility API.
In Core-AAM 1.2 you find almost the same information, but also more details about roles supporting by different Accessibility APIs.
HTML standard
A long time ago in HTML standard there was Clause 3.2.7.3.1 ARIA Role Attribute. It described the ability to add multiple roles for one element:
Every HTML element may have an ARIA role attribute specified. This is an ARIA Role attribute as defined by ARIA Section 5.4 Definition of Roles. The attribute, if specified, must have a value that is a set of space-separated tokens representing the various WAI-ARIA roles that the element belongs to. The WAI-ARIA role that an HTML element has assigned to it is the first non-abstract role found in the list of values generated when the role attribute is split on spaces.
What conclusions can be drawn after exploring the specifications?
Multiple values can be specified for role
Multiple values are listed with spaces between them
Multiple roles are needed for fallback. If the first role isn't supported or doesn't exist, the second one is applied, and so on
If it is an abstract role, browsers and screen readers will ignore it.
Let is testing
Now we are going to check what browsers and screen readers will do with two values for role. We will experiment in Chrome 97, Firefox 96, and Safari 14 with NVDA 2021.2 and desktop version of VoiceOver.
By the way, in old browsers and screen readers, this cannot be tested. They simply ignore role="" with multiple values. Keep this in mind.
The markup I will be testing might be scary. This is a test of the single attribute, so I decided to use forbidden techniques at least once in my life 😀. In real projects, it's better never to do this. This is a terrible anti-pattern (and can be consider as a crime, ha-ha.)
Two valid values
<div
+ }
Role attribute with multiple values
ARIA
HTML
Recently, I discovered by chance that the role attribute may contain more than one value. This was very unexpected, at least for me.
So, I wrote this post out of research interest, so it doesn't contain much practical advice. In fact, some of it's better not put into practice.
Background on roles
Roles contain information on functions of elments, and how it can be interacted with. For example, screen readers will announce that the button element has the button role which means that this element is clicable.
Elements can have either implicit or explicit roles. The latter are specified in the role attribute.
There are many categories of roles, each with clear rules for their explicit usage. For instance, you can't change roles during interaction with an element, or set abstract roles, such as landmark, section, widget, etc. There are also roles that assume nested elements. For example, an element with role="menu" must have at least one menuitem element nested within it. However, the main rule is to set roles explicitly as rarely as possible, especially to avoid overriding semantics of elements.
What standards and specifications say?
In WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications), as the most obvious source about roles, there are no examples with two values for the attribute. I had to look up information about the multiple values in this case.
WAI-ARIA
Clause 7.1 Role Attribute in WAI-ARIA 1.1 contains the characteristics of the role attribute that should be considered in a host languages:
The attribute name MUST be role;
The attribute value MUST allow a token list as the value;
The appearance of the name literal of any concrete WAI-ARIA role as one of these tokens MUST NOT in and of itself make the attribute value illegal in the host-language syntax; and
The first name literal of a non-abstract WAI-ARIA role in the list of tokens in the role attribute defines the role according to which the user agent MUST process the element. User Agent processing for roles is defined in the Core Accessibility API Mappings 1.1.
Clauses 8.1 Role Attribute of WAI-ARIA versions 1.2 and 1.3 provides almost the same description:
The attribute value MUST allow a token list as the value;
The appearance of the name literal of any concrete WAI-ARIA role as one of these tokens MUST NOT in and of itself make the attribute value illegal in the host-language syntax; and
The first name literal of a non-abstract WAI-ARIA role in the list of tokens in the role attribute defines the role according to which the user agent MUST process the element. User Agent processing for roles is defined in the Core Accessibility API Mappings 1.2.
Since all versions of WAI-ARIA refers to other documentation, let is read it now.
Core Accessibility API Mappings
Core Accessibility API Mappings (Core-AAM for short) is a specification for browsers and other user agents. It describes how they must interact with Accessibility API.
Clause 5.4 Role mapping of Core-AAM 1.1 says what we want to find out:
Traditionally Accessibility API platforms have a limited set of predefined roles that are expected by assistive technologies on that platform, and only one or two roles can be provided. In contrast, WAI-ARIA allows multiple roles to be specified as an ordered set of valid role tokens separated by spaces. Additional roles are fallback for other roles, which is similar to the concept of specifying multiple fonts in case the first font type isn't supported.
This part of the document collects rules for roles themselves.
The user agent MUST use the first token in the sequence of tokens in the role attribute value which matches the name of any non-abstract WAI-ARIA role according to rules that are specified in the Role Mapping Table below. Note that when WAI-ARIA roles override host language semantics, there are no changes in the DOM, only in the accessibility tree.
User agents MUST NOT map roles defined in the WAI-ARIA specification as "abstract" via the standard role mechanism of the accessibility API.
In Core-AAM 1.2 you find almost the same information, but also more details about roles supporting by different Accessibility APIs.
HTML standard
A long time ago in HTML standard there was Clause 3.2.7.3.1 ARIA Role Attribute. It described the ability to add multiple roles for one element:
Every HTML element may have an ARIA role attribute specified. This is an ARIA Role attribute as defined by ARIA Section 5.4 Definition of Roles. The attribute, if specified, must have a value that is a set of space-separated tokens representing the various WAI-ARIA roles that the element belongs to. The WAI-ARIA role that an HTML element has assigned to it is the first non-abstract role found in the list of values generated when the role attribute is split on spaces.
What conclusions can be drawn after exploring the specifications?
Multiple values can be specified for role
Multiple values are listed with spaces between them
Multiple roles are needed for fallback. If the first role isn't supported or doesn't exist, the second one is applied, and so on
If it is an abstract role, browsers and screen readers will ignore it.
Let is testing
Now we are going to check what browsers and screen readers will do with two values for role. We will experiment in Chrome 97, Firefox 96, and Safari 14 with NVDA 2021.2 and desktop version of VoiceOver.
By the way, in old browsers and screen readers, this cannot be tested. They simply ignore role="" with multiple values. Keep this in mind.
The markup I will be testing might be scary. This is a test of the single attribute, so I decided to use forbidden techniques at least once in my life 😀. In real projects, it's better never to do this. This is a terrible anti-pattern (and can be consider as a crime, ha-ha.)
Two valid values
<divrole="button link"aria-label="This is not a button"tabindex="1"
diff --git a/en/articles/aria-live-regions/index.html b/en/articles/aria-live-regions/index.html
index 456ee47..f9ecc96 100644
--- a/en/articles/aria-live-regions/index.html
+++ b/en/articles/aria-live-regions/index.html
@@ -21,7 +21,7 @@
},
"datePublished": "2024-05-11T00:00:00.000Z",
"dateModified": "2024-05-11T00:00:00.000Z"
- }
Everything you need to know about ARIA Live Regions
HTML
Screen readers
(This is a translation of my article from Web Standarts, editor Vadim Makeev)
How to make content changes accessible.
If you have a dynamically changing part of a page and you're thinking about making it accessible, there may be a legitimate question about how to make it so. These could be:
Chats;
Progress bars and timers;
Widgets with news and weather forecasts;
Miscellaneous bugs and alerts: new post, like, subscribe;
Tickers (stock exchange information about stock quotes, indices, bonds), currency rates;
Sports statistics and much more.
Previously, assistive technologies (including screen readers) didn't know how to properly process these. Users couldn't know if there was an error or new data until they returned to the previous block or reached the end of the page. Now the problem of accessibility of dynamically changing page content can be solved with ARIA.
If you're not familiar with this acronym, WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications) or simply ARIA is a standard consisting of a set of special roles and attributes that are added to markup and extend or augment the functions of standard HTML elements.
All we need to do is make the part of the page where the changes occur. In ARIA terminology, this is called a "live region." You can find this definition in the standard:
Live Regions are perceived areas of pages that are usually updated as a result of an external event when a user focuses somewhere else. These regions are not always updated due to user interaction with an UI. This practice has become commonplace as a result of the heavy use of Ajax.
Thus, the main purpose of such areas is to tell screen readers how to properly handle content changes that aren't necessarily dependent on users.
To make an interactive area on a page, we just need to add the aria-live="" attribute or a special ARIA role to any parent element. Then the changes of all its child elements will become available to screen readers. They will know now how to handle updates to the contents of such elements.
There are several such roles and attributes in ARIA. Let's talk about the roles first.
Interactive Area Roles
There aren't many ARIA roles that make part of a page an interactive area. They are used like this: role="alert" Here's a complete list of them:
alert;
status;
log;
timer;
marquee.
Let's deal with each role in order.
Alert
A type of interactive area that contains information that is important at a certain point in time. It can be an error message, a warning that appears on the screen after some user actions or without his participation (a sudden error on the server side). Such a message can be either text or sound.
Let's take a look at a simple example where we warn users about something really important:
<divclass="warning"role="alert">
+ }
Everything you need to know about ARIA Live Regions
HTML
Screen readers
(This is a translation of my article from Web Standarts, editor Vadim Makeev)
How to make content changes accessible.
If you have a dynamically changing part of a page and you're thinking about making it accessible, there may be a legitimate question about how to make it so. These could be:
Chats;
Progress bars and timers;
Widgets with news and weather forecasts;
Miscellaneous bugs and alerts: new post, like, subscribe;
Tickers (stock exchange information about stock quotes, indices, bonds), currency rates;
Sports statistics and much more.
Previously, assistive technologies (including screen readers) didn't know how to properly process these. Users couldn't know if there was an error or new data until they returned to the previous block or reached the end of the page. Now the problem of accessibility of dynamically changing page content can be solved with ARIA.
If you're not familiar with this acronym, WAI-ARIA (Web Accessibility Initiative - Accessible Rich Internet Applications) or simply ARIA is a standard consisting of a set of special roles and attributes that are added to markup and extend or augment the functions of standard HTML elements.
All we need to do is make the part of the page where the changes occur. In ARIA terminology, this is called a "live region." You can find this definition in the standard:
Live Regions are perceived areas of pages that are usually updated as a result of an external event when a user focuses somewhere else. These regions are not always updated due to user interaction with an UI. This practice has become commonplace as a result of the heavy use of Ajax.
Thus, the main purpose of such areas is to tell screen readers how to properly handle content changes that aren't necessarily dependent on users.
To make an interactive area on a page, we just need to add the aria-live="" attribute or a special ARIA role to any parent element. Then the changes of all its child elements will become available to screen readers. They will know now how to handle updates to the contents of such elements.
There are several such roles and attributes in ARIA. Let's talk about the roles first.
Interactive Area Roles
There aren't many ARIA roles that make part of a page an interactive area. They are used like this: role="alert" Here's a complete list of them:
alert;
status;
log;
timer;
marquee.
Let's deal with each role in order.
Alert
A type of interactive area that contains information that is important at a certain point in time. It can be an error message, a warning that appears on the screen after some user actions or without his participation (a sudden error on the server side). Such a message can be either text or sound.
Let's take a look at a simple example where we warn users about something really important:
<divclass="warning"role="alert">
You've stared into the abyss for too long,
and now the abyss is staring back at you.
</div>
Screen reader will instantly announce it the moment it appears, and interrupt the other announcement if there is one.
👉 For maximum compatibility, use role="alert" together with the aria-live="assertive" attribute. That said, such an element can still be incorrectly declared by VoiceOver on iOS. Let's make some minor changes to our example:
When people talk about accessibility and CSS, they often mean properties that affect the accessibility tree and screen readers. But there's another ally in the battle for accessibility interfaces — media features.
Media feature is a condition for the @media CSS directive. It indicates a specific characteristic of the device or browser. For example, screen orientation (orientation) or display mode (display-mode).
In this article, I'll talk about a few media features: prefers-reduced-motion, prefers-colour-scheme, inverted-colors, forced-colors, ms-high-contrast, prefers-contrast and prefers-reduced-transparency. They track operating system settings. The settings are changed by users who aren't satisfied with the default behaviour of the system. For example, people with special needs and those who are uncomfortable with the default design.
For example, users with epileptic seizures disable animations because they can trigger a seizure. Some people with astigmatism choose a dark theme and reduce contrast to avoid eye pain.
Considering user preferences will make the site's interface more flexible and personalised. This will not only help improve its accessibility but can also increase conversion rates. It's always nice to use products that cater to your preferences.
Most customisations apply only to the operating system. Many of them, the same animations and contrast levels, don't change website interfaces. It all depends on whether the developers have taken them into account. This is where media features come in handy.
You can also track user settings with JavaScript, but I don't want to bloat this post any further. I'll just focus on CSS features.
Custom Settings
Let's first look at what system settings can be considered in web interfaces now or in the future.
Animation
Animation settings allow you to change its speed or disable it completely in the system. Does not affect sites unless there are special styles.
Who uses the setting:
Users with vestibular disorders and epileptic seizures.
People with cognitive disabilities. Especially users with attention deficit disorder.
This setting is found in most operating systems.
Colour scheme
Users can also change the colour scheme settings and select the colours that will dominate the system. These are either light or dark shades. The setting does not affect sites if they do not support colour schemes.
Who uses the setting:
People with visual impairments. For example, people with reduced vision, eye pain, and hypersensitivity to light.
Users with cognitive disabilities. For example, with attention deficit disorder.
All other users due to aesthetic preferences, habits or light levels.
Schemes can be selected in all popular operating systems. In macOS and iOS, there is an optional automatic theme. If selected, a light theme is applied during the day and a dark theme at night.
Invert Colours
Inverted colours mode replaces the system colours with opposite colours, as in the negative. It refers to the on-screen filter mode.
Colours are changed not only in the system but also in browser tabs. So users can choose this mode instead of dark theme.
Doka guide with inversion in Vivaldi on Windows 10.
Who uses the setting:
People with visual impairments. For example, people with glaucoma or eye pain.
People with migraines and headaches.
Other users because of habits or lighting.
Most operating systems have this setting. On iOS, there are even two types of inversion, Smart Invert and Classic Invert. In Smart Invert, pictures and videos are not inverted. In Classic Invert, all content is inverted.
Colour mode
The forced colours mode limits the number of colours to increase the readability of text by changing the contrast between text and background. Colours with high contrast are mainly used. This mode changes the colours in both the system and sites.
Who uses the setting:
People with visual impairments.
People with migraines and headaches.
People with photosensitive epilepsy.
Users who need to reduce visual noise to concentrate.
For now, the colour mode can only be selected in Windows. In Windows 10 and earlier, it's Windows High Contrast Mode (WHCM for short). In Windows 11, it's Contrast Themes.
High Contrast Mode has several ready-made colour sets:
High Contrast Black mode;
High Contrast White;
High Contrast 1 and 2.
The colour palette replacement technology depends on the browser. It differs in Chromium, Firefox (Quantum), Internet Explorer (Trident) and older versions of Edge (EdgeHTML).
"Web Standards" with high contrast black mode in Vivaldi on Windows 10.This is how Firefox's default high-contrast black mode on Windows 10 is interpreted. The default behaviour can be changed. You need to select the "Use system colours" option in the Language and Appearance settings.
In Windows 11, the set of contrasting themes has changed:
Aquatic.
Desert.
Dusk.
Night sky.
"Web Standards" in Night Sky Mode in Vivaldi on Windows 11.
If the ready-made themes are not suitable, you can customise them yourself. This includes reducing the contrast.
Contrast
Users can separately increase or decrease the contrast level in the system without changing the screen brightness.
Who uses the setting:
People with visual impairments. For example, people with glaucoma.
People with migraines and headaches.
Users with old or poor-quality displays.
Other users who lack contrast levels due to lighting.
macOS and iOS have an Increased Contrast Mode. It increases the difference between shades of grey and makes the borders of elements clearer.
Settings affect the appearance of the system and web interfaces. Unlike system windows, only the contrast level is changed on websites. Of course, the borders of elements do not become clearer by themselves.
In the high contrast mode, strangely enough, everything became more contrasty. Black frames appeared around the window and controls.
Transparency
Users can switch background transparency on or off. Opaque backgrounds are often chosen by those who want to increase contrast.
A transparent background can increase cognitive load and reduce the readability of text. Therefore, this setting is used by:
People with visual impairments. For example, with astigmatism or reduced vision.
Users with cognitive disabilities. For example, people with dyslexia or attention deficit disorder.
People with migraines and headaches.
Transparency is customisable on Windows and macOS.
These settings only affect transparency in the system interface.
This is how the transparency setting works in Windows 10. The navigation background of the first window is semi-transparent, and the second one is opaque and monochrome.
A word about media types
The @media directive has several media types. They describe the device on which the document is displayed.
all. All devices. It is set automatically if no other type is specified.
screen. Devices with screens. For example, phones and laptops.
print. Devices with preview and print functions. The same as printers.
speech. Devices with speech synthesis. For example, screen readers and voice assistants.
The speech media type may be interesting from the point of view of accessibility. So far it is not supported by browsers. It used to be supported by Opera browser on Presto engine but stopped after switching to Blink.
And now let's move on to media features that help to make web interfaces more accessible.
Some of them don't have very impressive support yet. Something may change in the future with the development of CSS. In any case, it's good to know about them. You might even want to experiment with these media features in a small pet project now.
prefer-reduced-motion
Tracks whether animation settings are selected to reduce animation intensity.
It can be useful for any animation on the site. You can slow it down or disable it completely.
Setting animation: none to elements with animation will stop it completely.
@media(prefers-reduced-motion: reduce){
+ }
CSS media feature to improve accessibility
CSS
Usability
When people talk about accessibility and CSS, they often mean properties that affect the accessibility tree and screen readers. But there's another ally in the battle for accessibility interfaces — media features.
Media feature is a condition for the @media CSS directive. It indicates a specific characteristic of the device or browser. For example, screen orientation (orientation) or display mode (display-mode).
In this article, I'll talk about a few media features: prefers-reduced-motion, prefers-colour-scheme, inverted-colors, forced-colors, ms-high-contrast, prefers-contrast and prefers-reduced-transparency. They track operating system settings. The settings are changed by users who aren't satisfied with the default behaviour of the system. For example, people with special needs and those who are uncomfortable with the default design.
For example, users with epileptic seizures disable animations because they can trigger a seizure. Some people with astigmatism choose a dark theme and reduce contrast to avoid eye pain.
Considering user preferences will make the site's interface more flexible and personalised. This will not only help improve its accessibility but can also increase conversion rates. It's always nice to use products that cater to your preferences.
Most customisations apply only to the operating system. Many of them, the same animations and contrast levels, don't change website interfaces. It all depends on whether the developers have taken them into account. This is where media features come in handy.
You can also track user settings with JavaScript, but I don't want to bloat this post any further. I'll just focus on CSS features.
Custom Settings
Let's first look at what system settings can be considered in web interfaces now or in the future.
Animation
Animation settings allow you to change its speed or disable it completely in the system. Does not affect sites unless there are special styles.
Who uses the setting:
Users with vestibular disorders and epileptic seizures.
People with cognitive disabilities. Especially users with attention deficit disorder.
This setting is found in most operating systems.
Colour scheme
Users can also change the colour scheme settings and select the colours that will dominate the system. These are either light or dark shades. The setting does not affect sites if they do not support colour schemes.
Who uses the setting:
People with visual impairments. For example, people with reduced vision, eye pain, and hypersensitivity to light.
Users with cognitive disabilities. For example, with attention deficit disorder.
All other users due to aesthetic preferences, habits or light levels.
Schemes can be selected in all popular operating systems. In macOS and iOS, there is an optional automatic theme. If selected, a light theme is applied during the day and a dark theme at night.
Invert Colours
Inverted colours mode replaces the system colours with opposite colours, as in the negative. It refers to the on-screen filter mode.
Colours are changed not only in the system but also in browser tabs. So users can choose this mode instead of dark theme.
Doka guide with inversion in Vivaldi on Windows 10.
Who uses the setting:
People with visual impairments. For example, people with glaucoma or eye pain.
People with migraines and headaches.
Other users because of habits or lighting.
Most operating systems have this setting. On iOS, there are even two types of inversion, Smart Invert and Classic Invert. In Smart Invert, pictures and videos are not inverted. In Classic Invert, all content is inverted.
Colour mode
The forced colours mode limits the number of colours to increase the readability of text by changing the contrast between text and background. Colours with high contrast are mainly used. This mode changes the colours in both the system and sites.
Who uses the setting:
People with visual impairments.
People with migraines and headaches.
People with photosensitive epilepsy.
Users who need to reduce visual noise to concentrate.
For now, the colour mode can only be selected in Windows. In Windows 10 and earlier, it's Windows High Contrast Mode (WHCM for short). In Windows 11, it's Contrast Themes.
High Contrast Mode has several ready-made colour sets:
High Contrast Black mode;
High Contrast White;
High Contrast 1 and 2.
The colour palette replacement technology depends on the browser. It differs in Chromium, Firefox (Quantum), Internet Explorer (Trident) and older versions of Edge (EdgeHTML).
"Web Standards" with high contrast black mode in Vivaldi on Windows 10.This is how Firefox's default high-contrast black mode on Windows 10 is interpreted. The default behaviour can be changed. You need to select the "Use system colours" option in the Language and Appearance settings.
In Windows 11, the set of contrasting themes has changed:
Aquatic.
Desert.
Dusk.
Night sky.
"Web Standards" in Night Sky Mode in Vivaldi on Windows 11.
If the ready-made themes are not suitable, you can customise them yourself. This includes reducing the contrast.
Contrast
Users can separately increase or decrease the contrast level in the system without changing the screen brightness.
Who uses the setting:
People with visual impairments. For example, people with glaucoma.
People with migraines and headaches.
Users with old or poor-quality displays.
Other users who lack contrast levels due to lighting.
macOS and iOS have an Increased Contrast Mode. It increases the difference between shades of grey and makes the borders of elements clearer.
Settings affect the appearance of the system and web interfaces. Unlike system windows, only the contrast level is changed on websites. Of course, the borders of elements do not become clearer by themselves.
In the high contrast mode, strangely enough, everything became more contrasty. Black frames appeared around the window and controls.
Transparency
Users can switch background transparency on or off. Opaque backgrounds are often chosen by those who want to increase contrast.
A transparent background can increase cognitive load and reduce the readability of text. Therefore, this setting is used by:
People with visual impairments. For example, with astigmatism or reduced vision.
Users with cognitive disabilities. For example, people with dyslexia or attention deficit disorder.
People with migraines and headaches.
Transparency is customisable on Windows and macOS.
These settings only affect transparency in the system interface.
This is how the transparency setting works in Windows 10. The navigation background of the first window is semi-transparent, and the second one is opaque and monochrome.
A word about media types
The @media directive has several media types. They describe the device on which the document is displayed.
all. All devices. It is set automatically if no other type is specified.
screen. Devices with screens. For example, phones and laptops.
print. Devices with preview and print functions. The same as printers.
speech. Devices with speech synthesis. For example, screen readers and voice assistants.
The speech media type may be interesting from the point of view of accessibility. So far it is not supported by browsers. It used to be supported by Opera browser on Presto engine but stopped after switching to Blink.
And now let's move on to media features that help to make web interfaces more accessible.
Some of them don't have very impressive support yet. Something may change in the future with the development of CSS. In any case, it's good to know about them. You might even want to experiment with these media features in a small pet project now.
prefer-reduced-motion
Tracks whether animation settings are selected to reduce animation intensity.
How to avoid harming users with epilepsy and vestibular impairment
Usability
Design
Animation
CSS
Accessibility helps people not only to use interfaces without issues but also not to feel literally sick. People with epilepsy and vestibular impairment can struggle with this. In this article, I want to discuss what accessibility means for them.
Let's start by talking about vestibular impairments, epilepsy, and epileptic seizures.
Vestibular Disorders
Many people know the feeling of motion sickness, dizziness, and nausea. It could be happening to you because of poor sleep, a cold, and a bunch of other reasons.
Vestibular Disorders are related to the inner ear and the part of the brain that controls balance and eye movement.
This is a large group of disorders. It includes head injuries, vestibular migraine or migraine with aura, brain tumours and more. They often have similar symptoms:
dizziness;
nausea;
blurred vision;
headaches;
trouble concentrating.
And the trigger can be inaccessible interfaces. Facundo Corradini in an article on A List Apart described how he lay in bed for hours with severe vertigo after encounters with parallax.
There are indeed many such users. There are about 15% of the world's people with chronic migraines alone.
Epilepsy and seizures
Epileptic seizure is uncontrolled increased or synchronised activity of neurons in the brain. It results in seizures, paralysis, temporary failure of internal organs, loss or confusion, partial amnesia, and outbreaks of fear and anxiety.
Seizures can occur on their own or be part of entire illnesses. If they recur frequently, they are considered epilepsy.
Seizures can be influenced not only by internal factors but also by external factors. For example, light or sounds.
Seizures triggered by light, sounds and even reading are called reflex seizures. When there are many such seizures, a person has reflex epilepsy (RE).
Reflex epilepsy comes in several types. We are most interested in photosensitive epilepsy (PSE). It is triggered by intense flickering light or movement. It occurs in 5% of all people with epilepsy. It occurs most often between the ages of 7 and 19.
So content that flashes, flickers and flashes can lead to an epileptic seizure. It seriously increases electrical activity in neurons.
What are the threats
So who can cause an epileptic seizure or other negative physical reaction?
Video.
Gifs.
Canvas.
SVG, CSS, and JS animations. For example, when there are moving images next to the text or the foreground and background are simultaneously scrolling in different directions - parallax effects.
Animated scrolling that lasts longer than 1/4 second.
Graphics with contrasting stripes, squares, spirals and concentric circles.
High contrast.
Not too long ago, I faced eye strain and feelings of nausea because of splash screen in WebStorm 2021.1 myself. It's just a static image though. Thanks to a JetBrains team for listening to the feedback and reduced the saturation of the images.
There are more examples of problematic interfaces in "Your Interactive Makes Me Sick" by Eileen Webb. I hope your vestibular system handles this challenge better than mine.
You don't even need an image or video to cause harm. A
element set to change colour and luminosity at high frequency, easily done via JavaScript, can cause real harm. And, flickering can occur everywhere. For example, "spinners" commonly used to display while pages load can easily "flicker" while spinning.
MDN.
Tips & Tricks
It is dangerous to involve people with epilepsy and vestibular impairment in testing. So the only thing left to do is to be proactive and take into account the advice given by experts.
So what can we do to avoid harming users?
👉 The frequency of normal and red flashes is no more than 3 times per second (3 Hz). This is the minimum accessibility requirement for people with epileptic seizures.
A general flash is a pair of opposite states of relative brightness when it changes by 10% or more. In this case, the relative brightness of the dark image is less than 0.8. And red flash is a pair of opposite transitions where there is a saturated red colour in between.
👉 If the frequency of flashes is more than 3 times per second, you can reduce their area and make it a "Small safe area". This is less than 10% of the centre of the field of view or less than 25% of the screen size. This is because the central part of the eye consists of a large number of sensors. They are more active than others in transmitting signals to the visual cortex and can overload neurons.
This isn't the most reliable solution. A user could visit the site from a mobile device and bring it too close to their eyes.
👉 If possible, it's best to avoid red flashes or saturated shades of red in videos and animations altogether.
👉 Watch the contrast of the animation and do not make it too high.
👉 You can switch off the animation if it's not a key functionality. The prefers-reduced-motion media feature comes in handy for this.
It checks a selection of "Reduce Motion" on macOS or "Show animations" on Windows. Right now its global support is 96.75%. There's an example of how it works in the W3C demo.
There're no ironclad values for speed, smoothness and other animation properties. So you can use the experience of other developers or ask users about their experience.
How to avoid harming users with epilepsy and vestibular impairment
Usability
Design
Animation
CSS
Accessibility helps people not only to use interfaces without issues but also not to feel literally sick. People with epilepsy and vestibular impairment can struggle with this. In this article, I want to discuss what accessibility means for them.
Let's start by talking about vestibular impairments, epilepsy, and epileptic seizures.
Vestibular Disorders
Many people know the feeling of motion sickness, dizziness, and nausea. It could be happening to you because of poor sleep, a cold, and a bunch of other reasons.
Vestibular Disorders are related to the inner ear and the part of the brain that controls balance and eye movement.
This is a large group of disorders. It includes head injuries, vestibular migraine or migraine with aura, brain tumours and more. They often have similar symptoms:
dizziness;
nausea;
blurred vision;
headaches;
trouble concentrating.
And the trigger can be inaccessible interfaces. Facundo Corradini in an article on A List Apart described how he lay in bed for hours with severe vertigo after encounters with parallax.
There are indeed many such users. There are about 15% of the world's people with chronic migraines alone.
Epilepsy and seizures
Epileptic seizure is uncontrolled increased or synchronised activity of neurons in the brain. It results in seizures, paralysis, temporary failure of internal organs, loss or confusion, partial amnesia, and outbreaks of fear and anxiety.
Seizures can occur on their own or be part of entire illnesses. If they recur frequently, they are considered epilepsy.
Seizures can be influenced not only by internal factors but also by external factors. For example, light or sounds.
Seizures triggered by light, sounds and even reading are called reflex seizures. When there are many such seizures, a person has reflex epilepsy (RE).
Reflex epilepsy comes in several types. We are most interested in photosensitive epilepsy (PSE). It is triggered by intense flickering light or movement. It occurs in 5% of all people with epilepsy. It occurs most often between the ages of 7 and 19.
So content that flashes, flickers and flashes can lead to an epileptic seizure. It seriously increases electrical activity in neurons.
What are the threats
So who can cause an epileptic seizure or other negative physical reaction?
Video.
Gifs.
Canvas.
SVG, CSS, and JS animations. For example, when there are moving images next to the text or the foreground and background are simultaneously scrolling in different directions - parallax effects.
Animated scrolling that lasts longer than 1/4 second.
Graphics with contrasting stripes, squares, spirals and concentric circles.
High contrast.
Not too long ago, I faced eye strain and feelings of nausea because of splash screen in WebStorm 2021.1 myself. It's just a static image though. Thanks to a JetBrains team for listening to the feedback and reduced the saturation of the images.
There are more examples of problematic interfaces in "Your Interactive Makes Me Sick" by Eileen Webb. I hope your vestibular system handles this challenge better than mine.
You don't even need an image or video to cause harm. A
element set to change colour and luminosity at high frequency, easily done via JavaScript, can cause real harm. And, flickering can occur everywhere. For example, "spinners" commonly used to display while pages load can easily "flicker" while spinning.
MDN.
Tips & Tricks
It is dangerous to involve people with epilepsy and vestibular impairment in testing. So the only thing left to do is to be proactive and take into account the advice given by experts.
So what can we do to avoid harming users?
👉 The frequency of normal and red flashes is no more than 3 times per second (3 Hz). This is the minimum accessibility requirement for people with epileptic seizures.
A general flash is a pair of opposite states of relative brightness when it changes by 10% or more. In this case, the relative brightness of the dark image is less than 0.8. And red flash is a pair of opposite transitions where there is a saturated red colour in between.
👉 If the frequency of flashes is more than 3 times per second, you can reduce their area and make it a "Small safe area". This is less than 10% of the centre of the field of view or less than 25% of the screen size. This is because the central part of the eye consists of a large number of sensors. They are more active than others in transmitting signals to the visual cortex and can overload neurons.
This isn't the most reliable solution. A user could visit the site from a mobile device and bring it too close to their eyes.
👉 If possible, it's best to avoid red flashes or saturated shades of red in videos and animations altogether.
👉 Watch the contrast of the animation and do not make it too high.
👉 You can switch off the animation if it's not a key functionality. The prefers-reduced-motion media feature comes in handy for this.
It checks a selection of "Reduce Motion" on macOS or "Show animations" on Windows. Right now its global support is 96.75%. There's an example of how it works in the W3C demo.
There're no ironclad values for speed, smoothness and other animation properties. So you can use the experience of other developers or ask users about their experience.
What if the user gets motion sickness because of a website? What if he or she has an epileptic seizure? Let's look at what interfaces for users with epilepsy and vestibular impairment should look like.
If you have a dynamically changing part of a page and you're thinking about making it accessible, there may be a legitimate question about how to do it. In the past, assistive technologies (including screen readers) didn't know how to handle them properly. Now the problem of accessibility of dynamically changing page content can be solved with ARIA.
What custom settings come and how to take them into account in web interfaces. You will learn about media features that track animation settings, contrast, transparency, inversion, colour scheme and forced colour mode.
What if the user gets motion sickness because of a website? What if he or she has an epileptic seizure? Let's look at what interfaces for users with epilepsy and vestibular impairment should look like.
If you have a dynamically changing part of a page and you're thinking about making it accessible, there may be a legitimate question about how to do it. In the past, assistive technologies (including screen readers) didn't know how to handle them properly. Now the problem of accessibility of dynamically changing page content can be solved with ARIA.
What custom settings come and how to take them into account in web interfaces. You will learn about media features that track animation settings, contrast, transparency, inversion, colour scheme and forced colour mode.
How to help users to skip large chank of a page content, whose these users are, and how to implement it on your website.
\ No newline at end of file
diff --git a/en/articles/understanding-a-skip-link/index.html b/en/articles/understanding-a-skip-link/index.html
index 35273a4..9b34c34 100644
--- a/en/articles/understanding-a-skip-link/index.html
+++ b/en/articles/understanding-a-skip-link/index.html
@@ -21,7 +21,7 @@
},
"datePublished": "2024-05-05T00:00:00.000Z",
"dateModified": "2024-06-13T00:00:00.000Z"
- }
Understanding skip links
Patterns
HTML
CSS
Updated:
There are many small but useful patterns available on the web. One of them is a content skip link or skip link. This is a hyperlink that leads to the main content of a page and helps to skip through lengthy, repetitive content. Its main purpose is to save users' time.
What kind of content is considered bulky? A navigation menu with a logo and a lot of links, a complex table, letter indexes, and lists with chapters or technical specifications. Most often, the skip link is useful for skipping site navigation from a header.
Exceptions are a footer menu and a brief header navigation, which consists of a couple of links and a site logo. In the case of footers, you can return to the top of a page using keyboard keys, gestures, and other in-built browser features. So, a brief navigation won't take up much time for users.
In theory, everything is simple. In practice, it's a bit more complicated. Let's learn step by steps.
Theory
What WCAG 2.2 says
In the accessibility guidelines, there are two criteria related to skip links.
Criterion 2.1.1 Keyboard (A). All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes.
Criterion 2.4.1 Block Skipping (A). A mechanism is available to bypass blocks of content that are repeated on multiple web pages.
Mechanics for skipping blocks
There are two mechanics for skipping content on a web page:
Landmark navigation (landmarks)
Skip link.
The first method is available for screen reader users. Landmarks are created using semantic tags, thanks to ARIA. The second mechanic has a larger audience. It's not only for users with visual impairments.
You can find advice that the skip link isn't necessary for websites with a good layouts. This isn't quite true. Not all screen reader users know about shortcuts for landmarks. Other keyboard users don't have this option at all. Also, the more options for navigation, the better.
Who needs it
In short, anyone who consistently navigates through pages and can't skip content quickly. In a nutshell, there are four (4) categories of users.
Screen reader users, who navigate through websites with a keyboard and mobile versions of websites by taps and swipes
Users with motor impairments who use a keyboard, remote computer buttons, and other switch devices
Any other keyboard users. They may be of an advanced level or have temporarily broken devices, such as a computer mouse, etc.
Screen magnifier users who use the keyboard to navigate.
Imagine that you're using a keyboard for navigation and open any online shopping platform. You found the product you wanted, navigated to it, and found yourself on the top of the page. About forty (40) tabs later, you can finally find out more about your perfect backpack. With the skip link, you would be in the right part of a page in one tab and not fall asleep on the way 😴.
List of requirements
Located in tab order first
Leads directly to the main content and sets the focus on it. It's more effective if the page has one main area
It can be located in the main part of the page. In this case, it skips the necessary block and leads to the beginning of the next part of a web page
It has a clear name and a good description of where it leads
It can always be visible, or it can appear when a person uses a keyboard. In both cases, it meets WCAG criteria
You can add more than one of the skip links. For example, one leads to the main content, and the second to the search bar. It's better don't overdo the number. Otherwise, there is no point in the skip-link pattern
It shouldn't interfere with mouse users. This is a controversial requirement, but it has a grain of truth. If such a link is always visible, it may confuse mouse users. They aren't familiar with this pattern, and don't need another way to scroll to the main content.
Practice
You need to support keyboard navigation from the start. In other cases, the skip link is useless by default.
Marking up the page
Before we move on to HTML and CSS, I want to say a couple of words about skip link names. On English-language websites, ″Skip to main content″ or ″Skip to content″ is most often used. There are a few more options:
Skip navigation
Skip main navigation
Skip navigation links.
Finally, let's talk about HTML.
The practical implementation of the skip link is an anchor link. It's better to add it at start of a page, before other HTML elements. The best parts of HTML code for that reason are <header> if it's the first element on the page or <body>. I'm going to use the link as the first child element for the header one.
<header>
+ }
Understanding skip links
Patterns
HTML
CSS
Updated:
There are many small but useful patterns available on the web. One of them is a content skip link or skip link. This is a hyperlink that leads to the main content of a page and helps to skip through lengthy, repetitive content. Its main purpose is to save users' time.
What kind of content is considered bulky? A navigation menu with a logo and a lot of links, a complex table, letter indexes, and lists with chapters or technical specifications. Most often, the skip link is useful for skipping site navigation from a header.
Exceptions are a footer menu and a brief header navigation, which consists of a couple of links and a site logo. In the case of footers, you can return to the top of a page using keyboard keys, gestures, and other in-built browser features. So, a brief navigation won't take up much time for users.
In theory, everything is simple. In practice, it's a bit more complicated. Let's learn step by steps.
Theory
What WCAG 2.2 says
In the accessibility guidelines, there are two criteria related to skip links.
Criterion 2.1.1 Keyboard (A). All functionality of the content is operable through a keyboard interface without requiring specific timings for individual keystrokes.
Criterion 2.4.1 Block Skipping (A). A mechanism is available to bypass blocks of content that are repeated on multiple web pages.
Mechanics for skipping blocks
There are two mechanics for skipping content on a web page:
Landmark navigation (landmarks)
Skip link.
The first method is available for screen reader users. Landmarks are created using semantic tags, thanks to ARIA. The second mechanic has a larger audience. It's not only for users with visual impairments.
You can find advice that the skip link isn't necessary for websites with a good layouts. This isn't quite true. Not all screen reader users know about shortcuts for landmarks. Other keyboard users don't have this option at all. Also, the more options for navigation, the better.
Who needs it
In short, anyone who consistently navigates through pages and can't skip content quickly. In a nutshell, there are four (4) categories of users.
Screen reader users, who navigate through websites with a keyboard and mobile versions of websites by taps and swipes
Users with motor impairments who use a keyboard, remote computer buttons, and other switch devices
Any other keyboard users. They may be of an advanced level or have temporarily broken devices, such as a computer mouse, etc.
Screen magnifier users who use the keyboard to navigate.
Imagine that you're using a keyboard for navigation and open any online shopping platform. You found the product you wanted, navigated to it, and found yourself on the top of the page. About forty (40) tabs later, you can finally find out more about your perfect backpack. With the skip link, you would be in the right part of a page in one tab and not fall asleep on the way 😴.
List of requirements
Located in tab order first
Leads directly to the main content and sets the focus on it. It's more effective if the page has one main area
It can be located in the main part of the page. In this case, it skips the necessary block and leads to the beginning of the next part of a web page
It has a clear name and a good description of where it leads
It can always be visible, or it can appear when a person uses a keyboard. In both cases, it meets WCAG criteria
You can add more than one of the skip links. For example, one leads to the main content, and the second to the search bar. It's better don't overdo the number. Otherwise, there is no point in the skip-link pattern
It shouldn't interfere with mouse users. This is a controversial requirement, but it has a grain of truth. If such a link is always visible, it may confuse mouse users. They aren't familiar with this pattern, and don't need another way to scroll to the main content.
Practice
You need to support keyboard navigation from the start. In other cases, the skip link is useless by default.
Marking up the page
Before we move on to HTML and CSS, I want to say a couple of words about skip link names. On English-language websites, ″Skip to main content″ or ″Skip to content″ is most often used. There are a few more options:
Skip navigation
Skip main navigation
Skip navigation links.
Finally, let's talk about HTML.
The practical implementation of the skip link is an anchor link. It's better to add it at start of a page, before other HTML elements. The best parts of HTML code for that reason are <header> if it's the first element on the page or <body>. I'm going to use the link as the first child element for the header one.
<header><ahref="#main-content"class="skip-link">
Skip to content
</a>
diff --git a/en/index.html b/en/index.html
index 611cf2c..459d356 100644
--- a/en/index.html
+++ b/en/index.html
@@ -1 +1 @@
-Blog on Digital Accessibility
Articles on accessibility
Hi, my name is Tatiana Fokina, or just Tanya for short. Who am I? I am a web accessibility specialist and enthusiast who likes developing user-friendly interfaces and discussing digital accessibility with others (sometimes in the middle of the night).
In this blog, I share practical tips and hacks, useful links, my thoughts, and interesting findings about accessible code, design, and much more ✨
If you have any questions about my articles or accessibility, feel free to ask me on LinkedIn and Twitter.
What if the user gets motion sickness because of a website? What if he or she has an epileptic seizure? Let's look at what interfaces for users with epilepsy and vestibular impairment should look like.
If you have a dynamically changing part of a page and you're thinking about making it accessible, there may be a legitimate question about how to do it. In the past, assistive technologies (including screen readers) didn't know how to handle them properly. Now the problem of accessibility of dynamically changing page content can be solved with ARIA.
\ No newline at end of file
+Blog on Digital Accessibility
Articles on accessibility
Hi, my name is Tatiana Fokina, or just Tanya for short. Who am I? I am a web accessibility specialist and enthusiast who likes developing user-friendly interfaces and discussing digital accessibility with others (sometimes in the middle of the night).
In this blog, I share practical tips and hacks, useful links, my thoughts, and interesting findings about accessible code, design, and much more ✨
If you have any questions about my articles or accessibility, feel free to ask me on LinkedIn and Twitter.
What if the user gets motion sickness because of a website? What if he or she has an epileptic seizure? Let's look at what interfaces for users with epilepsy and vestibular impairment should look like.
If you have a dynamically changing part of a page and you're thinking about making it accessible, there may be a legitimate question about how to do it. In the past, assistive technologies (including screen readers) didn't know how to handle them properly. Now the problem of accessibility of dynamically changing page content can be solved with ARIA.
\ No newline at end of file
diff --git a/ru/404/index.html b/ru/404/index.html
index aa9fbb9..bdb64c8 100644
--- a/ru/404/index.html
+++ b/ru/404/index.html
@@ -1 +1 @@
-Page not found — Блог о цифровой доступности
\ No newline at end of file
diff --git a/ru/articles/aria-attribute-role-with-multiple-values/index.html b/ru/articles/aria-attribute-role-with-multiple-values/index.html
index 48a97a5..251384e 100644
--- a/ru/articles/aria-attribute-role-with-multiple-values/index.html
+++ b/ru/articles/aria-attribute-role-with-multiple-values/index.html
@@ -21,7 +21,7 @@
},
"datePublished": "2022-01-24T00:00:00.000Z",
"dateModified": "2024-06-03T00:00:00.000Z"
- }
role с несколькими значениями
ARIA
HTML
Обновлено:
Недавно случайно узнала, что ARIA-атрибут role может содержать больше одного значения. И это очень неожиданно, по крайней мере для меня.
Этот пост написала из исследовательского интереса, так что в нём нет большого количества полезных практических советов. Что-то даже лучше не применять на практике.
Небольшая справка о роли элемента
Роль содержит информацию о функциях элемента и как с ним можно взаимодействовать. К примеру, о <button> скринридер объявит, что это кнопка, а также сможет на неё нажать.
У элементов может быть либо встроенная роль, либо явно заданная в атрибуте role.
Есть много категорий и видов ролей, и существуют чёткие правила их явного использования. Например, нельзя менять роли при взаимодействии с элементом или задавать абстрактные (landmark, section, widget и другие). Также есть роли, которые предполагают вложенные элементы. Например, в элемент с role="menu" должен быть вложен как минимум один с menuitem. Однако главное правило — стараться как можно реже явно задавать роли, особенно таким образом переопределять семантику элементов.
Что там в документации
В WAI-ARIA (Web Accessibility Initiative — Accessible Rich Internet Applications), как в самом очевидном источнике о role="", нет примеров с двумя ролями. И про несколько значений у этого атрибута пришлось поискать.
WAI-ARIA
В пункте 7.1. Атрибут роли из WAI-ARIA 1.1 собраны характеристики атрибута роли, которые нужно учитывать в языках реализации (host languages):
Имя атрибута должно бытьrole.
Значение атрибута должно допускать список токенов в качестве значения.
Появление имени литерала любой конкретной роли в качестве одного из токенов не должно само по себе делать недопустимым значение атрибута в синтаксисе языка реализации.
Первый литерал имени неабстрактной роли в списке токенов атрибута role определяет роль в соответствии с тем, как User Agent должен обрабатывать элемент. То, как User Agent обрабатывает роли, установлено в Core Accessibility API Mappings 1.1.
В WAI-ARIA 1.2 и 1.3 нужная информация находится в пункте 8.1. Атрибут роли:
Значение атрибута должно допускать список токенов в качестве значения.
Появление имени литерала любой конкретной роли в качестве одного из токенов не должно само по себе делать недопустимым значение атрибута в синтаксисе языка реализации.
Первый литерал имени неабстрактной роли в списке токенов атрибута role определяет роль в соответствии с тем, как User Agent должен обрабатывать элемент. То, как User Agent обрабатывает роли, установлено в Core Accessibility API Mappings 1.2.
Раз WAI-ARIA отсылает нас к другой документации, давайте почитаем теперь её.
Core Accessibility API Mappings
Core Accessibility API Mappings (Core-AAM для краткости) — это спецификация для браузеров и других User Agent. В ней описано, как они должны взаимодействовать с Accessibility API.
Традиционно Accessibility API платформы имеют ограниченный набор заранее установленных ролей, которые ожидаются вспомогательными технологиями на этой платформе, и предоставлены могут быть только одна или две роли. Напротив, WAI-ARIA позволяет указывать несколько ролей в виде упорядоченного набора валидных токенов ролей, разделённых пробелами. Дополнительные роли — фолбэк для других ролей, что похоже на концепцию указания нескольких шрифтов на случай, если первый тип шрифта не поддерживается.
В этом пункте собраны и сами правила работы с ролями из WAI-ARIA.
User Agent должен использовать первый токен в их последовательности в значении атрибута роли, который соответствует имени любой неабстрактной роли из таблицы мапинга ролей… Обратите внимание, что, когда роли из WAI-ARIA перезаписывают семантику языков реализации, то DOM (Document Object Model) не изменяется, только дерево доступности.
User Agent не должен мапировать роли, которые определены в спецификации WAI-ARIA как «абстрактные», с помощью стандартного механизма ролей Accessibility API.
В Core-AAM 1.2 найдёте почти то же самое, но с большим количеством деталей про поддержку ролей разными Accessibility API.
HTML
Давным-давно в HTML-спецификации был пункт 3.2.7.3.1. ARIA-атрибут роли, который тоже описывал возможность добавлять несколько ролей для элемента:
Для каждого HTML-элемента можно указать ARIA-атрибут role. Это атрибут роли из ARIA, который определён в спецификации в Section 5.4 Definition of Roles. Атрибут, если он задан, должен иметь значение, которое выглядит как набор токенов, разделённых пробелами и представляющих различные роли WAI-ARIA, к которым относится элемент. Роль WAI-ARIA, которая назначена для HTML-элемента, первая неабстрактная роль, найденная в списке значений, сгенерированных, когда атрибут role разделён пробелами.
Какие выводы можно сделать после путешествия по спецификациям?
В атрибуте role можно указывать несколько значений.
Несколько значений перечисляется стандартно через пробел.
Несколько ролей нужны для фолбэка. Если первая роль не поддерживается или не существует, то применяется вторая и так далее.
Если это абстрактная роль, то браузер и скринридер её проигнорируют.
Тестируем
Давайте проверим, что будут делать браузеры и скринридеры с двумя значениями в атрибуте role. Поэкспериментируем в Chrome 97, Firefox 96 и Safari 14 с NVDA 2021.2 и десктопным VoiceOver.
Кстати, в старых браузерах и скринридерах это не получится проверить. Они просто игнорируют role="" с несколькими значениями. Имейте это в виду.
Разметка, которую буду тестировать, может напугать. Это проверка работы одного атрибута, так что решила хотя бы раз в жизни использовать запрещённые приёмы 😀 В реальных проектах так лучше никогда не делать. Это ужасный антипаттерн (который можно считать преступлением, ха-ха).
Оба значения существуют
<div
+ }
role с несколькими значениями
ARIA
HTML
Обновлено:
Недавно случайно узнала, что ARIA-атрибут role может содержать больше одного значения. И это очень неожиданно, по крайней мере для меня.
Этот пост написала из исследовательского интереса, так что в нём нет большого количества полезных практических советов. Что-то даже лучше не применять на практике.
Небольшая справка о роли элемента
Роль содержит информацию о функциях элемента и как с ним можно взаимодействовать. К примеру, о <button> скринридер объявит, что это кнопка, а также сможет на неё нажать.
У элементов может быть либо встроенная роль, либо явно заданная в атрибуте role.
Есть много категорий и видов ролей, и существуют чёткие правила их явного использования. Например, нельзя менять роли при взаимодействии с элементом или задавать абстрактные (landmark, section, widget и другие). Также есть роли, которые предполагают вложенные элементы. Например, в элемент с role="menu" должен быть вложен как минимум один с menuitem. Однако главное правило — стараться как можно реже явно задавать роли, особенно таким образом переопределять семантику элементов.
Что там в документации
В WAI-ARIA (Web Accessibility Initiative — Accessible Rich Internet Applications), как в самом очевидном источнике о role="", нет примеров с двумя ролями. И про несколько значений у этого атрибута пришлось поискать.
WAI-ARIA
В пункте 7.1. Атрибут роли из WAI-ARIA 1.1 собраны характеристики атрибута роли, которые нужно учитывать в языках реализации (host languages):
Имя атрибута должно бытьrole.
Значение атрибута должно допускать список токенов в качестве значения.
Появление имени литерала любой конкретной роли в качестве одного из токенов не должно само по себе делать недопустимым значение атрибута в синтаксисе языка реализации.
Первый литерал имени неабстрактной роли в списке токенов атрибута role определяет роль в соответствии с тем, как User Agent должен обрабатывать элемент. То, как User Agent обрабатывает роли, установлено в Core Accessibility API Mappings 1.1.
В WAI-ARIA 1.2 и 1.3 нужная информация находится в пункте 8.1. Атрибут роли:
Значение атрибута должно допускать список токенов в качестве значения.
Появление имени литерала любой конкретной роли в качестве одного из токенов не должно само по себе делать недопустимым значение атрибута в синтаксисе языка реализации.
Первый литерал имени неабстрактной роли в списке токенов атрибута role определяет роль в соответствии с тем, как User Agent должен обрабатывать элемент. То, как User Agent обрабатывает роли, установлено в Core Accessibility API Mappings 1.2.
Раз WAI-ARIA отсылает нас к другой документации, давайте почитаем теперь её.
Core Accessibility API Mappings
Core Accessibility API Mappings (Core-AAM для краткости) — это спецификация для браузеров и других User Agent. В ней описано, как они должны взаимодействовать с Accessibility API.
Традиционно Accessibility API платформы имеют ограниченный набор заранее установленных ролей, которые ожидаются вспомогательными технологиями на этой платформе, и предоставлены могут быть только одна или две роли. Напротив, WAI-ARIA позволяет указывать несколько ролей в виде упорядоченного набора валидных токенов ролей, разделённых пробелами. Дополнительные роли — фолбэк для других ролей, что похоже на концепцию указания нескольких шрифтов на случай, если первый тип шрифта не поддерживается.
В этом пункте собраны и сами правила работы с ролями из WAI-ARIA.
User Agent должен использовать первый токен в их последовательности в значении атрибута роли, который соответствует имени любой неабстрактной роли из таблицы мапинга ролей… Обратите внимание, что, когда роли из WAI-ARIA перезаписывают семантику языков реализации, то DOM (Document Object Model) не изменяется, только дерево доступности.
User Agent не должен мапировать роли, которые определены в спецификации WAI-ARIA как «абстрактные», с помощью стандартного механизма ролей Accessibility API.
В Core-AAM 1.2 найдёте почти то же самое, но с большим количеством деталей про поддержку ролей разными Accessibility API.
HTML
Давным-давно в HTML-спецификации был пункт 3.2.7.3.1. ARIA-атрибут роли, который тоже описывал возможность добавлять несколько ролей для элемента:
Для каждого HTML-элемента можно указать ARIA-атрибут role. Это атрибут роли из ARIA, который определён в спецификации в Section 5.4 Definition of Roles. Атрибут, если он задан, должен иметь значение, которое выглядит как набор токенов, разделённых пробелами и представляющих различные роли WAI-ARIA, к которым относится элемент. Роль WAI-ARIA, которая назначена для HTML-элемента, первая неабстрактная роль, найденная в списке значений, сгенерированных, когда атрибут role разделён пробелами.
Какие выводы можно сделать после путешествия по спецификациям?
В атрибуте role можно указывать несколько значений.
Несколько значений перечисляется стандартно через пробел.
Несколько ролей нужны для фолбэка. Если первая роль не поддерживается или не существует, то применяется вторая и так далее.
Если это абстрактная роль, то браузер и скринридер её проигнорируют.
Тестируем
Давайте проверим, что будут делать браузеры и скринридеры с двумя значениями в атрибуте role. Поэкспериментируем в Chrome 97, Firefox 96 и Safari 14 с NVDA 2021.2 и десктопным VoiceOver.
Кстати, в старых браузерах и скринридерах это не получится проверить. Они просто игнорируют role="" с несколькими значениями. Имейте это в виду.
Разметка, которую буду тестировать, может напугать. Это проверка работы одного атрибута, так что решила хотя бы раз в жизни использовать запрещённые приёмы 😀 В реальных проектах так лучше никогда не делать. Это ужасный антипаттерн (который можно считать преступлением, ха-ха).
Когда говорят про доступность и CSS, часто имеют в виду свойства, которые влияют на дерево доступности и скринридеры. Но есть ещё один союзник в битве за доступность интерфейсов — медиафичи.
Медиафича (media feature) — это условие для CSS-директивы @media. Указывает на определённую характеристику устройства или браузера. К примеру, ориентацию экрана (orientation) или режим отображения (display-mode).
В этом посте расскажу про несколько медиафич: prefers-reduced-motion, prefers-color-scheme, inverted-colors, forced-colors, ms-high-contrast, prefers-contrast и prefers-reduced-transparency. Они отслеживают настройки операционной системы. Настройки изменяют пользователи, которых не устраивает дефолтное поведение системы. К примеру, люди с особыми потребностями и те, кто испытывает дискомфорт из-за дефолтного дизайна.
Так, пользователи с эпилептическими приступами отключают анимацию из-за того, что она может вызвать приступ. А некоторые люди с астигматизмом выбирают тёмную тему и уменьшают контрастность, чтобы не болели глаза.
Учёт пользовательских настроек сделает интерфейс сайта более гибким и персонализированным. Это поможет не только повысить его уровень доступности, но и может повысить конверсию. Всегда приятно пользоваться продуктами, которые учитывают твои предпочтения.
Большинство настроек применяется только к операционной системе. Многие из них, те же анимация и уровень контрастности, не изменяют интерфейсы сайтов. Всё зависит от того, учли ли их разработчики. Как раз здесь помогают медиафичи.
Отслеживать пользовательские настройки можно и с помощью JavaScript, но не хочу раздувать пост ещё больше. Остановлюсь только на возможностях CSS.
Пользовательские настройки
Давайте сначала разберёмся, какие системные настройки можно учитывать в веб-интерфейсах уже сейчас или в будущем.
Анимация
Настройки анимации позволяют изменять её скорость или полностью отключить в системе. Не влияют на сайты, если нет специальных стилей.
Кто пользуется настройкой:
Пользователи с вестибулярными нарушениями и эпилептическими приступами.
Люди с когнитивными особенностями. Особенно пользователи с синдром дефицита внимания.
Эта настройка есть в большинстве операционных систем.
Цветовая схема
Пользователи могут также изменить настройки цветовой схемы и выбрать цвета, которые будут преобладать в системе. Это либо светлые, либо тёмные оттенки. Настройка не влияет на сайты, если на них не поддерживаются цветовые схемы.
Кто пользуется настройкой:
Люди с особенностями зрения. Например, со сниженным зрением, глазными болями и повышенной светочувствительностью.
Пользователи с когнитивными особенностями. К примеру, с синдромом дефицита внимания.
Все остальные пользователи из-за эстетических предпочтений, привычки или уровня освещения.
Схемы можно выбрать во всех популярных операционных системах. В macOS и iOS есть дополнительная автоматическая тема. Если она выбрана, то днём применяется светлая тема, а ночью — тёмная.
Инвертирование цветов
Режим инвертированных цветов (inverted colors mode) заменяет системные цвета на противоположные, как на негативе. Относится к режиму экранных фильтров.
Цвета изменяются не только в системе, но и во вкладках браузера. Так что пользователи могут выбрать этот режим вместо тёмной темы.
Дока с инверсией в Vivaldi на Windows 10.
Кто пользуется настройкой:
Люди с особенностями зрения. Например, с глаукомой или глазными болями.
Люди с мигренями и головными болями.
Другие пользователи из-за привычек или освещения.
Эта настройка есть в большинстве операционных систем. На iOS даже два вида инверсии — «Смарт-инверсия» (Smart Invert) и «Классическая инверсия» (Classic Invert). В режиме умной инверсии картинки и видео не инвертируются. В классическом инвертируется весь контент.
Цветовой режим
Режим принудительных цветов (forced colors mode) ограничивает количество цветов, чтобы повысить читаемость текста за счёт изменения контраста текста и фона. В основном используются цвета с высоким контрастом. Этот режим изменяет цвета и в системе, и на сайтах.
Кто пользуется настройкой:
Пользователи с особенностями зрения.
Люди с мигренями и головными болями.
Люди со светочувствительной эпилепсией.
Пользователи, которым нужно уменьшить визуальный шум для концентрации внимания.
Пока цветовой режим можно выбрать только в Windows. В Windows 10 и более ранних версиях это режим высокой контрастности (Windows High Contrast Mode, коротко WHCM). В Windows 11 — контрастные темы (Contrast Themes).
В режиме высокой контрастности есть несколько готовых наборов цветов:
чёрный режим высокой контрастности (High Contrast Black);
белый режим высокой контрастности (High Contrast White);
высокая контрастность 1 и 2.
Технология замены цветовой палитры зависит от браузера. Она отличается в браузерах на Chromium, Firefox (Quantum), Internet Explorer (Trident) и в старых версиях Edge (EdgeHTML).
«Веб-стандарты» с чёрным режимом высокой контрастности в Vivaldi на Windows 10.Так своеобразно интерпретирует по умолчанию чёрный режим высокой контрастности Firefox на Windows 10. Поведение по умолчанию можно изменить. Нужно выбрать в настройках языка и внешнего вида (Language and Appearence) опцию «Использовать системные цвета» (Use system colors).
В Windows 11 набор контрастных тем изменился:
Водная (Aquatic).
Пустыня (Desert).
Сумерки (Dusk).
Ночное небо (Night sky).
«Веб-стандарты» в режиме ночного неба в Vivaldi на Windows 11.
Если не подходят готовые темы, то можно настроить их самостоятельно. В том числе уменьшить контрастность.
Контрастность
Пользователи могут отдельно повысить или понизить уровень контрастности в системе без изменения яркости экрана.
Кто пользуется настройкой:
Люди с особенностями зрения. Например, с глаукомой.
Люди с мигренями и головными болями.
Пользователи со старыми или некачественными дисплеями.
Другие пользователи, которым не хватает уровня контрастности из-за освещения.
В macOS и iOS есть режим повышенной контрастности (Increased Contrast Mode). Он увеличивает разницу между оттенками серого и делает границы элементов чётче.
Настройки влияют на внешний вид системы и веб-интерфейсов. В отличие от системных окон, на сайтах изменяется только уровень контрастности. Границы элементов, конечно, чётче сами по себе не становятся.
В режиме повышенной контрастности, как ни странно, всё стало более контрастным. Вокруг окна и элементов управления появились чёрные рамки.
Прозрачность
Пользователи могут включить или выключить прозрачность фона (transparency). Непрозрачный фон часто выбирают те, кто повышает контрастность.
Прозрачный фон может увеличить когнитивную нагрузку и уменьшить читаемость текста. Поэтому этой настройкой пользуются:
Люди с особенностями зрения. Например, с астигматизмом или сниженным зрением.
Пользователи с когнитивными особенностями. К примеру, люди с дислексией или синдром дефицита внимания.
Люди с мигренями и головными болями.
Прозрачность настраивается в Windows и macOS.
Эти настройки влияют только на прозрачность в интерфейсе системе.
Так работает настройка прозрачности в Windows 10. Фон навигации первого окна полупрозрачный, второй непрозрачный и однотонный.
Пара слов про медиатипы
У директивы @media есть несколько медиатипов. Они описывают устройство, на котором отображается документ.
all. Все устройства. Задаётся автоматически, если не указать другой тип.
screen. Устройства с экранами. Например, телефоны и ноутбуки.
print. Устройства с предварительным предпросмотром и функциями печати. Те же принтеры.
speech. Устройства с синтезом речи. К примеру, скринридеры и голосовые помощники.
Медиатип speech может быть интересен с точки зрения доступности. Пока что он не поддерживается браузерами. Раньше поддерживался браузером Opera на движке Presto, но перестал после перехода на Blink.
А вот теперь переходим к медиафичам, которые помогут сделать веб-интерфейсы доступнее.
У части из них пока не очень впечатляющая поддержка. Что-то может измениться в будущем с развитием CSS. В любом случае про них полезно знать. Может даже захочется поэкспериментировать с этими медиафичами в небольшом пет-проекте уже сейчас.
prefers-reduced-motion
Отслеживает, выбраны ли настройки анимации для уменьшения её интенсивности.
Она может пригодиться для любой анимации на сайте. Можно её замедлить или полностью отключить.
Если задать элементам с анимацией animation: none, то это полностью её остановит.
@media(prefers-reduced-motion: reduce){
+ }
CSS-медиафичи для улучшения доступности
CSS
Юзабилити
Когда говорят про доступность и CSS, часто имеют в виду свойства, которые влияют на дерево доступности и скринридеры. Но есть ещё один союзник в битве за доступность интерфейсов — медиафичи.
Медиафича (media feature) — это условие для CSS-директивы @media. Указывает на определённую характеристику устройства или браузера. К примеру, ориентацию экрана (orientation) или режим отображения (display-mode).
В этом посте расскажу про несколько медиафич: prefers-reduced-motion, prefers-color-scheme, inverted-colors, forced-colors, ms-high-contrast, prefers-contrast и prefers-reduced-transparency. Они отслеживают настройки операционной системы. Настройки изменяют пользователи, которых не устраивает дефолтное поведение системы. К примеру, люди с особыми потребностями и те, кто испытывает дискомфорт из-за дефолтного дизайна.
Так, пользователи с эпилептическими приступами отключают анимацию из-за того, что она может вызвать приступ. А некоторые люди с астигматизмом выбирают тёмную тему и уменьшают контрастность, чтобы не болели глаза.
Учёт пользовательских настроек сделает интерфейс сайта более гибким и персонализированным. Это поможет не только повысить его уровень доступности, но и может повысить конверсию. Всегда приятно пользоваться продуктами, которые учитывают твои предпочтения.
Большинство настроек применяется только к операционной системе. Многие из них, те же анимация и уровень контрастности, не изменяют интерфейсы сайтов. Всё зависит от того, учли ли их разработчики. Как раз здесь помогают медиафичи.
Отслеживать пользовательские настройки можно и с помощью JavaScript, но не хочу раздувать пост ещё больше. Остановлюсь только на возможностях CSS.
Пользовательские настройки
Давайте сначала разберёмся, какие системные настройки можно учитывать в веб-интерфейсах уже сейчас или в будущем.
Анимация
Настройки анимации позволяют изменять её скорость или полностью отключить в системе. Не влияют на сайты, если нет специальных стилей.
Кто пользуется настройкой:
Пользователи с вестибулярными нарушениями и эпилептическими приступами.
Люди с когнитивными особенностями. Особенно пользователи с синдром дефицита внимания.
Эта настройка есть в большинстве операционных систем.
Цветовая схема
Пользователи могут также изменить настройки цветовой схемы и выбрать цвета, которые будут преобладать в системе. Это либо светлые, либо тёмные оттенки. Настройка не влияет на сайты, если на них не поддерживаются цветовые схемы.
Кто пользуется настройкой:
Люди с особенностями зрения. Например, со сниженным зрением, глазными болями и повышенной светочувствительностью.
Пользователи с когнитивными особенностями. К примеру, с синдромом дефицита внимания.
Все остальные пользователи из-за эстетических предпочтений, привычки или уровня освещения.
Схемы можно выбрать во всех популярных операционных системах. В macOS и iOS есть дополнительная автоматическая тема. Если она выбрана, то днём применяется светлая тема, а ночью — тёмная.
Инвертирование цветов
Режим инвертированных цветов (inverted colors mode) заменяет системные цвета на противоположные, как на негативе. Относится к режиму экранных фильтров.
Цвета изменяются не только в системе, но и во вкладках браузера. Так что пользователи могут выбрать этот режим вместо тёмной темы.
Дока с инверсией в Vivaldi на Windows 10.
Кто пользуется настройкой:
Люди с особенностями зрения. Например, с глаукомой или глазными болями.
Люди с мигренями и головными болями.
Другие пользователи из-за привычек или освещения.
Эта настройка есть в большинстве операционных систем. На iOS даже два вида инверсии — «Смарт-инверсия» (Smart Invert) и «Классическая инверсия» (Classic Invert). В режиме умной инверсии картинки и видео не инвертируются. В классическом инвертируется весь контент.
Цветовой режим
Режим принудительных цветов (forced colors mode) ограничивает количество цветов, чтобы повысить читаемость текста за счёт изменения контраста текста и фона. В основном используются цвета с высоким контрастом. Этот режим изменяет цвета и в системе, и на сайтах.
Кто пользуется настройкой:
Пользователи с особенностями зрения.
Люди с мигренями и головными болями.
Люди со светочувствительной эпилепсией.
Пользователи, которым нужно уменьшить визуальный шум для концентрации внимания.
Пока цветовой режим можно выбрать только в Windows. В Windows 10 и более ранних версиях это режим высокой контрастности (Windows High Contrast Mode, коротко WHCM). В Windows 11 — контрастные темы (Contrast Themes).
В режиме высокой контрастности есть несколько готовых наборов цветов:
чёрный режим высокой контрастности (High Contrast Black);
белый режим высокой контрастности (High Contrast White);
высокая контрастность 1 и 2.
Технология замены цветовой палитры зависит от браузера. Она отличается в браузерах на Chromium, Firefox (Quantum), Internet Explorer (Trident) и в старых версиях Edge (EdgeHTML).
«Веб-стандарты» с чёрным режимом высокой контрастности в Vivaldi на Windows 10.Так своеобразно интерпретирует по умолчанию чёрный режим высокой контрастности Firefox на Windows 10. Поведение по умолчанию можно изменить. Нужно выбрать в настройках языка и внешнего вида (Language and Appearence) опцию «Использовать системные цвета» (Use system colors).
В Windows 11 набор контрастных тем изменился:
Водная (Aquatic).
Пустыня (Desert).
Сумерки (Dusk).
Ночное небо (Night sky).
«Веб-стандарты» в режиме ночного неба в Vivaldi на Windows 11.
Если не подходят готовые темы, то можно настроить их самостоятельно. В том числе уменьшить контрастность.
Контрастность
Пользователи могут отдельно повысить или понизить уровень контрастности в системе без изменения яркости экрана.
Кто пользуется настройкой:
Люди с особенностями зрения. Например, с глаукомой.
Люди с мигренями и головными болями.
Пользователи со старыми или некачественными дисплеями.
Другие пользователи, которым не хватает уровня контрастности из-за освещения.
В macOS и iOS есть режим повышенной контрастности (Increased Contrast Mode). Он увеличивает разницу между оттенками серого и делает границы элементов чётче.
Настройки влияют на внешний вид системы и веб-интерфейсов. В отличие от системных окон, на сайтах изменяется только уровень контрастности. Границы элементов, конечно, чётче сами по себе не становятся.
В режиме повышенной контрастности, как ни странно, всё стало более контрастным. Вокруг окна и элементов управления появились чёрные рамки.
Прозрачность
Пользователи могут включить или выключить прозрачность фона (transparency). Непрозрачный фон часто выбирают те, кто повышает контрастность.
Прозрачный фон может увеличить когнитивную нагрузку и уменьшить читаемость текста. Поэтому этой настройкой пользуются:
Люди с особенностями зрения. Например, с астигматизмом или сниженным зрением.
Пользователи с когнитивными особенностями. К примеру, люди с дислексией или синдром дефицита внимания.
Люди с мигренями и головными болями.
Прозрачность настраивается в Windows и macOS.
Эти настройки влияют только на прозрачность в интерфейсе системе.
Так работает настройка прозрачности в Windows 10. Фон навигации первого окна полупрозрачный, второй непрозрачный и однотонный.
Пара слов про медиатипы
У директивы @media есть несколько медиатипов. Они описывают устройство, на котором отображается документ.
all. Все устройства. Задаётся автоматически, если не указать другой тип.
screen. Устройства с экранами. Например, телефоны и ноутбуки.
print. Устройства с предварительным предпросмотром и функциями печати. Те же принтеры.
speech. Устройства с синтезом речи. К примеру, скринридеры и голосовые помощники.
Медиатип speech может быть интересен с точки зрения доступности. Пока что он не поддерживается браузерами. Раньше поддерживался браузером Opera на движке Presto, но перестал после перехода на Blink.
А вот теперь переходим к медиафичам, которые помогут сделать веб-интерфейсы доступнее.
У части из них пока не очень впечатляющая поддержка. Что-то может измениться в будущем с развитием CSS. В любом случае про них полезно знать. Может даже захочется поэкспериментировать с этими медиафичами в небольшом пет-проекте уже сейчас.
prefers-reduced-motion
Отслеживает, выбраны ли настройки анимации для уменьшения её интенсивности.
Как не навредить пользователям с эпилепсией и вестибулярными нарушениями
Юзабилити
Дизайн
Анимация
CSS
Доступность помогает людям не только без проблем пользоваться интерфейсами, но и не чувствовать себя буквально плохо. С этим могут столкнуться люди с эпилепсией и вестибулярными нарушениями. В сегодняшнем посте хочу обсудить, что значит доступность для них.
Давайте для начала поговорим про вестибулярные нарушения, эпилепсию и эпилептические приступы.
Вестибулярные нарушения
Многие знают, что такое укачивание, головокружение и чувство тошноты. Это могло произойти с вами из-за плохого сна, простуды и кучи других причин.
Вестибулярные нарушения (Vestibular Disorders) связаны с внутренним ухом и частью головного мозга, которая контролирует баланс и движение глаз.
Это большая группа нарушений. В неё входят травмы головы, вестибулярная мигрень или мигрень с аурой, опухоли мозга и многое другое. Они часто имеют похожие симптомы:
головокружение;
тошнота;
размытое зрение;
головные боли;
проблемы с концентрацией внимания.
И триггером могут стать недоступные интерфейсы. Факундо Коррадини в статье на A List Apart рассказывал как часами лежал в кровати с сильным головокружением после встреч с параллаксом.
Таких пользователей действительно много. Одних только людей с хроническими мигренями в мире живёт около 15 %.
Эпилепсия и приступы
Эпилептический приступ (Seizure) – неконтролируемая повышенная или синхронная активность нейронов в головном мозге. Она приводит к судорогам, параличу, временному сбою внутренних органов, потере или спутанности сознания, частичной амнезии, вспышкам страха и тревожности.
Приступы могут случаться самостоятельно или быть частью целых заболеваний. Если они часто повторяются, то это считается эпилепсией.
Немного статистики. Примерно у 8–10 % людей в мире происходил минимум один эпилептический приступ. У 3 % они привели к эпилепсии.
На возникновение приступов могут влиять не только внутренние, но и внешние факторы. Например, свет или звуки.
Приступы, спровоцированные светом, звуками и даже чтением называются рефлекторными. Когда таких приступов много, то у человека рефлекторная эпилепсия (Reflex Epilepsy, RE).
Рефлекторная эпилепсия бывает нескольких типов. Больше всего нас интересует светочувствительная (Photosensitive Epilepsy, PSE). Её провоцируют интенсивный мерцающий свет или движения. Она встречается у 5 % от всего количества людей с эпилепсией. Чаще всего такие приступы случаются в возрасте от 7 до 19 лет.
Так что контент, который мигает, мерцает и вспыхивает, может привести к эпилептическому приступу. Он серьёзно повышает электрическую активность в нейронах.
Какие бывают угрозы
Кто же может стать виновником эпилептического приступа или другой негативной физической реакции?
Видео.
Гифки.
Canvas.
SVG-, CSS- и JS-анимация. Например, когда рядом с текстом есть подвижные изображения или одновременно скроллятся в разных направлениях передний и задний планы — параллакс-эффекты.
Анимированная прокрутка, которая длится больше 1/4 секунды.
Графика с контрастными полосами, клетками, спиралями и концентрическими кругами.
Высокая контрастность.
Не так давно сама столкнулась с глазной болью и чувством тошноты из-за сплэшскрина в WebStorm 2021.1. Хотя это всего лишь статичная картинка. Спасибо команде JetBrains, которая прислушалась к отзывам и снизила насыщенность изображений.
Больше примеров проблемных интерфейсов есть в «Your Interactive Makes Me Sick» Эйлин Уэбб. Надеюсь, ваш вестибулярный аппарат справится с этим испытанием лучше, чем мой.
Вам даже не нужны видео или изображение, чтобы причинить кому-то вред. Простой <div>, который с помощью JavaScript быстро меняет цвет и яркость, тоже может навредить. И мигание можно встретить где угодно. К примеру, спиннеры, которые появляются во время загрузки страниц, могут вращаться и мигать одновременно.
MDN.
Советы и рекомендации
Людей с эпилепсией и вестибулярными нарушениями опасно привлекать к тестированию. Поэтому остаётся действовать превентивно и учитывать рекомендации, которые дают эксперты.
Так что мы можем сделать для того, чтобы не навредить пользователям?
👉 Частота обычных и красных вспышек — не больше 3 раз в секунду (3 Гц). Это минимальное требование по доступности для людей с эпилептическими приступами.
Обычная вспышка (General flash) — это пара противоположных состояний относительной яркости, когда она изменяется на 10 % или больше. При этом относительная яркость тёмного изображения меньше 0,8. А красная (Red flash) — пара противоположных переходов, между которыми есть насыщенный красный цвет.
👉 Если частота вспышек больше 3 раз в секунду, то можно уменьшить их область и сделать её «безопасной маленькой областью» (Small safe area). Её размер — меньше 10 % центральной части поля зрения или меньше 25 % от размера экрана. Это связано с тем, что центральная часть глаза состоит из большого количества сенсоров. Они активнее других передают сигналы в зрительную кору и могут перегрузить нейроны.
Это не самое надёжное решение. Пользователь может зайти на сайт с мобильного устройства и поднести его слишком близко к глазам.
👉 По возможности лучше вообще избегать в видео и анимации красных вспышек или насыщенных оттенков красного.
👉 Следите за контрастностью анимации и не делайте её слишком высокой.
👉 Можно отключить анимацию, если она не ключевой функционал. Для этого пригодится медиафича prefers-reduced-motion.
Она проверяет выбор настроек «Уменьшить движение» (Reduce Motion) в macOS или «Показывать анимацию» (Show animations) в Windows. Сейчас её глобальная поддержка 91.75 %. Пример того, как это работает, есть в демке W3C.
Железобетонных значений для скорости, плавности и других свойств анимации нет. Так что можно воспользоваться опытом других разработчиков или спросить у пользователей про их опыт.
Как не навредить пользователям с эпилепсией и вестибулярными нарушениями
Юзабилити
Дизайн
Анимация
CSS
Доступность помогает людям не только без проблем пользоваться интерфейсами, но и не чувствовать себя буквально плохо. С этим могут столкнуться люди с эпилепсией и вестибулярными нарушениями. В сегодняшнем посте хочу обсудить, что значит доступность для них.
Давайте для начала поговорим про вестибулярные нарушения, эпилепсию и эпилептические приступы.
Вестибулярные нарушения
Многие знают, что такое укачивание, головокружение и чувство тошноты. Это могло произойти с вами из-за плохого сна, простуды и кучи других причин.
Вестибулярные нарушения (Vestibular Disorders) связаны с внутренним ухом и частью головного мозга, которая контролирует баланс и движение глаз.
Это большая группа нарушений. В неё входят травмы головы, вестибулярная мигрень или мигрень с аурой, опухоли мозга и многое другое. Они часто имеют похожие симптомы:
головокружение;
тошнота;
размытое зрение;
головные боли;
проблемы с концентрацией внимания.
И триггером могут стать недоступные интерфейсы. Факундо Коррадини в статье на A List Apart рассказывал как часами лежал в кровати с сильным головокружением после встреч с параллаксом.
Таких пользователей действительно много. Одних только людей с хроническими мигренями в мире живёт около 15 %.
Эпилепсия и приступы
Эпилептический приступ (Seizure) – неконтролируемая повышенная или синхронная активность нейронов в головном мозге. Она приводит к судорогам, параличу, временному сбою внутренних органов, потере или спутанности сознания, частичной амнезии, вспышкам страха и тревожности.
Приступы могут случаться самостоятельно или быть частью целых заболеваний. Если они часто повторяются, то это считается эпилепсией.
Немного статистики. Примерно у 8–10 % людей в мире происходил минимум один эпилептический приступ. У 3 % они привели к эпилепсии.
На возникновение приступов могут влиять не только внутренние, но и внешние факторы. Например, свет или звуки.
Приступы, спровоцированные светом, звуками и даже чтением называются рефлекторными. Когда таких приступов много, то у человека рефлекторная эпилепсия (Reflex Epilepsy, RE).
Рефлекторная эпилепсия бывает нескольких типов. Больше всего нас интересует светочувствительная (Photosensitive Epilepsy, PSE). Её провоцируют интенсивный мерцающий свет или движения. Она встречается у 5 % от всего количества людей с эпилепсией. Чаще всего такие приступы случаются в возрасте от 7 до 19 лет.
Так что контент, который мигает, мерцает и вспыхивает, может привести к эпилептическому приступу. Он серьёзно повышает электрическую активность в нейронах.
Какие бывают угрозы
Кто же может стать виновником эпилептического приступа или другой негативной физической реакции?
Видео.
Гифки.
Canvas.
SVG-, CSS- и JS-анимация. Например, когда рядом с текстом есть подвижные изображения или одновременно скроллятся в разных направлениях передний и задний планы — параллакс-эффекты.
Анимированная прокрутка, которая длится больше 1/4 секунды.
Графика с контрастными полосами, клетками, спиралями и концентрическими кругами.
Высокая контрастность.
Не так давно сама столкнулась с глазной болью и чувством тошноты из-за сплэшскрина в WebStorm 2021.1. Хотя это всего лишь статичная картинка. Спасибо команде JetBrains, которая прислушалась к отзывам и снизила насыщенность изображений.
Больше примеров проблемных интерфейсов есть в «Your Interactive Makes Me Sick» Эйлин Уэбб. Надеюсь, ваш вестибулярный аппарат справится с этим испытанием лучше, чем мой.
Вам даже не нужны видео или изображение, чтобы причинить кому-то вред. Простой <div>, который с помощью JavaScript быстро меняет цвет и яркость, тоже может навредить. И мигание можно встретить где угодно. К примеру, спиннеры, которые появляются во время загрузки страниц, могут вращаться и мигать одновременно.
MDN.
Советы и рекомендации
Людей с эпилепсией и вестибулярными нарушениями опасно привлекать к тестированию. Поэтому остаётся действовать превентивно и учитывать рекомендации, которые дают эксперты.
Так что мы можем сделать для того, чтобы не навредить пользователям?
👉 Частота обычных и красных вспышек — не больше 3 раз в секунду (3 Гц). Это минимальное требование по доступности для людей с эпилептическими приступами.
Обычная вспышка (General flash) — это пара противоположных состояний относительной яркости, когда она изменяется на 10 % или больше. При этом относительная яркость тёмного изображения меньше 0,8. А красная (Red flash) — пара противоположных переходов, между которыми есть насыщенный красный цвет.
👉 Если частота вспышек больше 3 раз в секунду, то можно уменьшить их область и сделать её «безопасной маленькой областью» (Small safe area). Её размер — меньше 10 % центральной части поля зрения или меньше 25 % от размера экрана. Это связано с тем, что центральная часть глаза состоит из большого количества сенсоров. Они активнее других передают сигналы в зрительную кору и могут перегрузить нейроны.
Это не самое надёжное решение. Пользователь может зайти на сайт с мобильного устройства и поднести его слишком близко к глазам.
👉 По возможности лучше вообще избегать в видео и анимации красных вспышек или насыщенных оттенков красного.
👉 Следите за контрастностью анимации и не делайте её слишком высокой.
👉 Можно отключить анимацию, если она не ключевой функционал. Для этого пригодится медиафича prefers-reduced-motion.
Она проверяет выбор настроек «Уменьшить движение» (Reduce Motion) в macOS или «Показывать анимацию» (Show animations) в Windows. Сейчас её глобальная поддержка 91.75 %. Пример того, как это работает, есть в демке W3C.
Железобетонных значений для скорости, плавности и других свойств анимации нет. Так что можно воспользоваться опытом других разработчиков или спросить у пользователей про их опыт.
Какие пользовательские настройки бывают и как их учитывать в веб-интерфейсах. Узнаете про медиафичи, которые отслеживают настройки анимации, контрастности, прозрачности, инверсию, цветовую схему и режим принудительных цветов.
Что, если пользователя укачивает из-за сайта? А вдруг у него случится эпилептический приступ? Давайте разберёмся с тем, какими должны быть интерфейсы для пользователей с эпилепсией и вестибулярными нарушениями.
\ No newline at end of file
+Все статьи — Блог о цифровой доступности
Какие пользовательские настройки бывают и как их учитывать в веб-интерфейсах. Узнаете про медиафичи, которые отслеживают настройки анимации, контрастности, прозрачности, инверсию, цветовую схему и режим принудительных цветов.
Что, если пользователя укачивает из-за сайта? А вдруг у него случится эпилептический приступ? Давайте разберёмся с тем, какими должны быть интерфейсы для пользователей с эпилепсией и вестибулярными нарушениями.
\ No newline at end of file
diff --git a/ru/articles/understanding-a-skip-link/index.html b/ru/articles/understanding-a-skip-link/index.html
index 47baf7a..dd7cff9 100644
--- a/ru/articles/understanding-a-skip-link/index.html
+++ b/ru/articles/understanding-a-skip-link/index.html
@@ -21,7 +21,7 @@
},
"datePublished": "2021-08-23T00:00:00.000Z",
"dateModified": "2024-06-13T00:00:00.000Z"
- }
Разбираемся со skip link
Паттерны
HTML
CSS
Обновлено:
В вебе есть много небольших, но полезных доступных паттернов. И один из них — ссылка для пропуска контента или скип линк (skip link). Это гиперссылка, которая ведёт к основному содержанию страницы и помогает пропустить объёмный, часто повторяющийся контент. Её главная цель — экономия времени пользователей.
Какой контент считается объёмным? Навигационное меню с логотипом и кучей ссылок, громоздкая сложная таблица, буквенные указатели, списки с главами или техническими характеристиками. Чаще всего skip link полезна для пропуска навигации по сайту в хедере.
Исключения — меню в футере и небольшая навигация в хедере, которая состоит из пары ссылок и логотипа. В случае футера можно вернуться к началу страницы с помощью клавиш, жестов и других встроенных возможностей браузеров. А небольшая навигация не отнимет много времени у пользователей.
В теории всё просто, но на практике несколько сложнее. Давайте попробуем разобраться со всем по порядку.
Теория
Послушаем WCAG 2.2
В руководстве по доступности есть два критерия, связанные со skip link. Первый касается их косвенно, а второй напрямую.
Критерий 2.1.1. Клавиатура (A). Вся функциональность контента доступна для клавиатуры и не зависит от пауз между нажатиями клавиш.
Критерий 2.4.1. Пропуск блоков (А). Доступен механизм пропуска блоков контента, которые повторяются на нескольких страницах.
Механизмы пропуска блоков
Есть два механизма:
навигация по ориентирам (landmarks);
skip link.
Первый способ доступен для пользователей скринридеров. Ориентиры добавляются с помощью семантических тегов или благодаря ARIA. У второго механизма аудитория больше. Это не только пользователи с особенностями зрения.
Можно встретить совет о том, что skip link не нужна на сайте с хорошей семантической вёрсткой. Это не совсем верно. Не все пользователи скринридеров знают о шорткатах для открытия меню с ориентирами, а у других пользователей клавиатуры такой возможности нет. К тому же, чем больше вариантов навигации, тем лучше.
Кому это нужно
Если коротко, то всем, кто последовательно навигируется по страницам и не может быстро пропустить контент. Если развёрнуто, то четырём категориям пользователей. Это:
Пользователи скринридеров, которые перемещаются по десктопным сайтам с помощью клавиатуры, а по мобильным — касаниями, тапами и свайпами.
Пользователи с моторными нарушениями, которые пользуются клавиатурой, выносными компьютерными кнопками и другими переключателями.
Любые другие пользователи клавиатуры. Они могут быть продвинутого уровня или у них временно сломалась мышка.
Пользователи экранных луп, которые используют для навигации клавиатуру.
Представьте, что используете для навигации клавиатуру и зашли на сайт интернет-магазина, например, Ozon. Вы нашли нужный товар, перешли к нему и снова оказались в начале страницы. Примерно 40 табов и вот наконец можно узнать больше про понравившийся рюкзак. Со skip link вы бы оказались в нужном месте в одно нажатие и не заснули по пути.
Требования к skip link
Находится на первом месте в порядке табуляции.
Ведёт сразу к основному контенту и устанавливает фокус на нём. Она эффективнее, если на странице одна основная область — <main>.
Может располагаться в основной области страницы. В этом случаем она пропускает нужный блок и ведёт в начало следующего.
Понятно называется и хорошо описывает, куда ведёт.
Может быть всегда видна, а может появляться при фокусе с клавиатуры. В обоих случаях отвечает критериям WCAG.
Можно добавлять несколько таких ссылок. Например, одна ведёт к основному контенту, вторая — к поисковой строке. Не стоит перебарщивать с количеством, иначе в ссылках нет смысла.
Не должна мешать пользователям мыши. Это дискуссионное требование, но в нём есть разумное зерно. Если такая ссылка всегда видна, то может запутать пользователей мышки. Они не знакомы с этим паттерном, а ещё один способ прокрутки к основному контенту им не нужен.
Практика
В проекте уже должен поддерживаться фокус с клавиатуры и использоваться семантическая вёрстка. Без этого skip link бесполезна.
Размечаем страницу
Перед тем, как перейти к разметке, пара слов про текст ссылки. На англоязычных сайтах чаще всего используют «Skip to main content» или «Skip to content». Кажется, что самые подходящие эквиваленты в русском — «Перейти к основному контенту» или более краткое «К основному контенту». «Содержание» — широкое понятие и означает содержимое страницы или оглавление. «Контент» лучше отражает, куда ведёт ссылка.
Ещё несколько вариантов названия:
пропустить навигацию (Skip navigation);
пропустить основную навигацию (Skip main navigation);
пропустить ссылки в навигации (Skip navigation links).
Теперь поговорим о разметке.
Практическая реализация skip link — якорная ссылка. Лучше добавить её в начало <body> или <header>, если это первый элемент на странице. В примерах буду добавлять её в начало хедера.
<header>
+ }
Разбираемся со skip link
Паттерны
HTML
CSS
Обновлено:
В вебе есть много небольших, но полезных доступных паттернов. И один из них — ссылка для пропуска контента или скип линк (skip link). Это гиперссылка, которая ведёт к основному содержанию страницы и помогает пропустить объёмный, часто повторяющийся контент. Её главная цель — экономия времени пользователей.
Какой контент считается объёмным? Навигационное меню с логотипом и кучей ссылок, громоздкая сложная таблица, буквенные указатели, списки с главами или техническими характеристиками. Чаще всего skip link полезна для пропуска навигации по сайту в хедере.
Исключения — меню в футере и небольшая навигация в хедере, которая состоит из пары ссылок и логотипа. В случае футера можно вернуться к началу страницы с помощью клавиш, жестов и других встроенных возможностей браузеров. А небольшая навигация не отнимет много времени у пользователей.
В теории всё просто, но на практике несколько сложнее. Давайте попробуем разобраться со всем по порядку.
Теория
Послушаем WCAG 2.2
В руководстве по доступности есть два критерия, связанные со skip link. Первый касается их косвенно, а второй напрямую.
Критерий 2.1.1. Клавиатура (A). Вся функциональность контента доступна для клавиатуры и не зависит от пауз между нажатиями клавиш.
Критерий 2.4.1. Пропуск блоков (А). Доступен механизм пропуска блоков контента, которые повторяются на нескольких страницах.
Механизмы пропуска блоков
Есть два механизма:
навигация по ориентирам (landmarks);
skip link.
Первый способ доступен для пользователей скринридеров. Ориентиры добавляются с помощью семантических тегов или благодаря ARIA. У второго механизма аудитория больше. Это не только пользователи с особенностями зрения.
Можно встретить совет о том, что skip link не нужна на сайте с хорошей семантической вёрсткой. Это не совсем верно. Не все пользователи скринридеров знают о шорткатах для открытия меню с ориентирами, а у других пользователей клавиатуры такой возможности нет. К тому же, чем больше вариантов навигации, тем лучше.
Кому это нужно
Если коротко, то всем, кто последовательно навигируется по страницам и не может быстро пропустить контент. Если развёрнуто, то четырём категориям пользователей. Это:
Пользователи скринридеров, которые перемещаются по десктопным сайтам с помощью клавиатуры, а по мобильным — касаниями, тапами и свайпами.
Пользователи с моторными нарушениями, которые пользуются клавиатурой, выносными компьютерными кнопками и другими переключателями.
Любые другие пользователи клавиатуры. Они могут быть продвинутого уровня или у них временно сломалась мышка.
Пользователи экранных луп, которые используют для навигации клавиатуру.
Представьте, что используете для навигации клавиатуру и зашли на сайт интернет-магазина, например, Ozon. Вы нашли нужный товар, перешли к нему и снова оказались в начале страницы. Примерно 40 табов и вот наконец можно узнать больше про понравившийся рюкзак. Со skip link вы бы оказались в нужном месте в одно нажатие и не заснули по пути.
Требования к skip link
Находится на первом месте в порядке табуляции.
Ведёт сразу к основному контенту и устанавливает фокус на нём. Она эффективнее, если на странице одна основная область — <main>.
Может располагаться в основной области страницы. В этом случаем она пропускает нужный блок и ведёт в начало следующего.
Понятно называется и хорошо описывает, куда ведёт.
Может быть всегда видна, а может появляться при фокусе с клавиатуры. В обоих случаях отвечает критериям WCAG.
Можно добавлять несколько таких ссылок. Например, одна ведёт к основному контенту, вторая — к поисковой строке. Не стоит перебарщивать с количеством, иначе в ссылках нет смысла.
Не должна мешать пользователям мыши. Это дискуссионное требование, но в нём есть разумное зерно. Если такая ссылка всегда видна, то может запутать пользователей мышки. Они не знакомы с этим паттерном, а ещё один способ прокрутки к основному контенту им не нужен.
Практика
В проекте уже должен поддерживаться фокус с клавиатуры и использоваться семантическая вёрстка. Без этого skip link бесполезна.
Размечаем страницу
Перед тем, как перейти к разметке, пара слов про текст ссылки. На англоязычных сайтах чаще всего используют «Skip to main content» или «Skip to content». Кажется, что самые подходящие эквиваленты в русском — «Перейти к основному контенту» или более краткое «К основному контенту». «Содержание» — широкое понятие и означает содержимое страницы или оглавление. «Контент» лучше отражает, куда ведёт ссылка.
Ещё несколько вариантов названия:
пропустить навигацию (Skip navigation);
пропустить основную навигацию (Skip main navigation);
пропустить ссылки в навигации (Skip navigation links).
Теперь поговорим о разметке.
Практическая реализация skip link — якорная ссылка. Лучше добавить её в начало <body> или <header>, если это первый элемент на странице. В примерах буду добавлять её в начало хедера.
<header><ahref="#main-content"class="skip-link">
К основному контенту
</a>
diff --git a/ru/articles/wcag-character-key/index.html b/ru/articles/wcag-character-key/index.html
index c1a8beb..aff4614 100644
--- a/ru/articles/wcag-character-key/index.html
+++ b/ru/articles/wcag-character-key/index.html
@@ -21,4 +21,4 @@
},
"datePublished": "2022-11-14T00:00:00.000Z",
"dateModified": "2022-11-14T00:00:00.000Z"
- }
Принципы WCAG. Клавиша символа в клавиатурном сокращении
Это базовый критерий уровня A, и он связан с принципом управляемости и с доступностью управления с клавиатуры.
Коротко о критерии
Если используете в клавиатурном сокращении только букву, символ или цифру, у пользователя должна быть возможность его отключить, переназначить или применить только при фокусе на элементе.
Подробнее
Критерий про клавишу символа касается сайтов, программ и приложений, где есть авторские клавиатурные сокращения. Они часто встречаются в редакторах кода, текстовых редакторах и почтовых клиентах.
Критерий подразумевает, что лучше всего использовать клавиатурные сокращения с клавишами-модификаторами. То есть, сокращения не должны состоять только из букв, символов и любых других клавиш с тем, что можно напечатать (non-printable key).
На реальных сайтах и в приложениях часто удобнее и привычнее использовать клавиши с буквами. Например, в видеоплеерах. В этом случае можно сделать следующее:
добавить на странице или в настройки элемент, который отключает клавиатурные сокращения;
дать возможность перенастроить сокращения.
Если клавиатурное сокращение с буквой, символом или цифрой срабатывает только при фокусе на элементе, это тоже соответствует критерию. Например выпадающее меню, которое открывается при клике на кнопке «Открыть меню» или при нажатии на клавишу m, когда кнопка в фокусе.
Кому это важно
Пользователи, которые взаимодействуют с интерфейсом голосом. Например, используют речевой ввод.
Все пользователи клавиатуры — пользователи скринридеров, экранных луп, пользователи с особенностями моторики, например, с церебральным параличом, ампутированными пальцами, протезами.
Пользователи небольших портативных клавиатур.
Люди с когнитивными особенностями, которым удобно назначать одни и те же клавиши для одной команды на разных сайтах и в приложениях.
В первую очередь критерий связан с пользователями голосового управления. В этих программах есть несколько режимов. Один только для команд, другой для голосового ввода текста, и ещё есть смешанный режим, в котором можно надиктовывать текст и выполнять команды. Чаще всего используют смешанный режим. Он удобнее, не нужно переключаться между разными режимами.
При наборе слова по буквам вместо буквы может выполнится одна или даже несколько команд, если в клавиатурных сокращениях используются только клавиши с буквами. Команды могут активировать даже посторонние звуки, если включён микрофон.
Как избежать барьер
Чаще всего проблемы с клавиатурными сокращениями возникают на этапе проработки дизайна взаимодействия (interaction design) и написания кода.
Важно найти баланс между лёгкостью нажатия на клавиши и тем, как при этом сложно сделать ошибку. Можно всегда использовать клавиши-модификаторы в любых клавиатурных сокращениях или дать пользователям гибкие настройки для команд, когда их много.
Примеры соответствия критерию
На сайте есть модальное окно с настройками, его можно открыть при помощи Alt + O.
В веб-приложении клавиша / (косая черта) делает фокус на поле поиска, но пользователь может её отключить с помощью переключателя в настройках своего профиля.
На сайте видео разворачивается на весь экран с помощью F, но пользователь может зайти в настройки и изменить клавиши для этой команды.
В Gmail много клавиатурных сокращений из одного символа или знака. Например, / (косая черта) для поиска по письмам или g для перехода к следующей странице. Эти сокращения можно отключить и настроить. В списке всех настроек откройте вкладку с продвинутыми настройками (advanced) и включите кастомные клавиатурные сокращения (custom keyboard shortcuts). После появится отдельная вкладка «Клавиатурные сокращения» («Keyboard Shortcuts»), в которой можно переназначить клавиши для разных команд.
Настройки клавиатурных сокращений в Gmail.
В GitHub тоже есть команды, которые выполняются одной клавишей с буквой или знаком. Например, s делает фокус на поле поиска, а . (точка) открывает редактор кода. В настройках профиля можно отключить клавиатурные сокращения или изменить их. Для этого зайдите в настройки профиля, выберите вкладку «Accessibility» («Доступность») и отожмите чекбокс «Character Keys» («Клавиши символов»). Теперь можно настроить клавиши-модификаторы для клавиатурных сокращений в подразделе «Command Palette» («Палитра команд»). Для этого надо выбрать из выпадающих списков «Search mode» («Режим поиска») и «Command mode» («Режим команд») подходящую опцию.
Настройки клавиатурных сокращений в GitHub.
Примеры барьеров
На сайте есть поиск, к которому можно перейти с помощью клавиши S. У пользователя нет возможности отключить это клавиатурное сокращение или переназначить клавишу.
В приложении есть кнопка для открытия модального окна. Ещё окно открывается клавишей + (плюс), даже когда кнопка не в фокусе.
В десктопной версии YouTube есть много клавиатурных сокращений. Например, F раскрывает видео на весь экран, k ставит видео на паузу или продолжает воспроизведение, c включает или выключает субтитры, а , (запятая) перематывает к следующему кадру, когда видео на паузе. Однако на сайте нельзя отключить клавиатурные сокращения или переназначить клавиши.
Модальное окно со всеми клавиатурными сокращениями на YouTube.
Как тестировать
Протестировать критерий поможет ручное или автоматическое тестирование.
Найдите страницы или экраны, где есть клавиатурные сокращения.
Найдите все сокращения, где используются только клавиши с буквами, символами или цифрами.
Проверьте, как выполняются команды. Это происходит только при фокусе на элементе или на всей странице.
Если команда срабатывает без фокуса на элементе, убедитесь, что её можно отключить или переназначить.
Проще всего поискать во всех .js-файлах по ключевым словам, связанным с клавишами. Например, keydown, keyup или keypress. Ещё можно написать скрипт, который будет нажимать все возможные клавиши на страницах и выводить, например, в консоль сообщение о том, какие клавиши он обнаружил. Так это сделано в довольно старом букмарклете Trigger character key shortcuts.