[wp-trac] [WordPress Trac] #47123: The post(s) navigation landmark needs to be labelled
WordPress Trac
noreply at wordpress.org
Sat May 4 12:41:15 UTC 2019
#47123: The post(s) navigation landmark needs to be labelled
-------------------------------------+-----------------------------
Reporter: afercia | Owner: (none)
Type: defect (bug) | Status: new
Priority: normal | Milestone: Awaiting Review
Component: Bundled Theme | Version:
Severity: normal | Keywords: has-screenshots
Focuses: accessibility, template |
-------------------------------------+-----------------------------
Basically all the Bundled Themes use previous / next navigation in the
single post and pagination links in the posts / comments archives.
The markup output is responsibility of the core function
`_navigation_markup`, which prints out an unlabelled `<nav>` element:
{{{
<nav class="navigation post-navigation" role="navigation">
}}}
== Why it is a problem
This `<nav>` element defines an ARIA landmark by default: landmarks help
assistive technology users to perceive the page main sections and jump
through them. However, when a landmark is used more than once in a page,
it needs to be distinguished from the other ones to let users understand
''what'' the landmark is about.
For example, in Twenty Nineteen there may be up to 4 navigation landmark,
plus the WordPress toolbar when logged in. These landmarks are well
labelled except the post / posts navigation one. See screenshot from the
VoiceOver landmarks list:
[[Image(http://cldup.com/0ezXKyPlJS.png)]]
Users won't have a clue what that landmark region is about.
== Suggested solution
To properly label this landmark, there's the need to add an `aria-label`
attribute with a meaningful text. The following W3C examples clarify
further:
**W3C landmarks example with detailed instructions:**
https://www.w3.org/TR/wai-aria-practices/examples/landmarks/
> If a specific landmark role is used more than once on a web page, it
should have a unique label.
> Avoid using the landmark role as part of the label. For example, a
navigation landmark with a label "Site Navigation" will be announced by a
screen reader as "Site Navigation Navigation". The label should simply be
"Site".
**W3C example using equivalent HTML5 sectioning elements**
e.g. main, nav, aside ... define ARIA landmarks by default
https://www.w3.org/TR/wai-aria-practices/examples/landmarks/HTML5.html
== Details
`_navigation_markup` is used by other functions with different context:
single views, archies, post, comments...:
- `the_post_navigation()` / `get_the_post_navigatio()n`
- `the_posts_navigation()` / `get_the_posts_navigation()`
- `the_posts_pagination()` / `get_the_posts_pagination()`
- `the_comments_navigation()` / `get_the_comments_navigation()`
- `the_comments_pagination()` / `get_the_comments_pagination()`
Therefore, the `aria-label` value should be meaningful for all these
different cases.
Note: in some cases, the `<nav>` element contains also a visually hidden
heading, e.g.:
`<h2 class="screen-reader-text">Post navigation</h2>`
In these cases the worth evaluating to use `aria-labelledby` on the
`<nav>` element, targeting the hidden heading. I'd like to hear the
accessibility team thoughts on this. From a technical perspective, this
would be a bit challenging, as `_navigation_markup` is used in different
scenarios.
Note: filing under the "Bundled Theme" component even if this is output by
core, as it impacts themes templating. Please do feel free to assign to a
more appropriate component if desired.
--
Ticket URL: <https://core.trac.wordpress.org/ticket/47123>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list