Steps to reproduce
User interface changes
Problem/Motivation
In the Default Admin theme, breadcrumb separators (which are forward slashes /) are currently perceivable via keyboard navigation in VoiceOver. This mirrors a known accessibility issue in the Gin admin theme #3506340: [PP-1] Breadcrumb separators are focusable.
Steps to reproduce
1. Set Default Admin as the administration theme.
2. Go to /admin/config/regional/date-time.
3. Use VoiceOver and press VO + Right Arrow to move through the breadcrumb trail.
By default, VO is either Caps Lock or Control-Option.
4. Observe whether breadcrumb separators are exposed as separate navigable items.
Screencast of VoiceOver in Edge with the MR, in dark mode
Proposed resolution
Additional fixes in this MR
- There's unused selectors. Claro's
.breadcrumbselector still exists, although its not in use. We remove this - There's unneeded specificity. The breadcrumbs do not exist within the toolbar, and do not need the
:is(#extra-specificity-hack, [data-drupal-admin-styles])hack. We remove this additional specifity - The slash doesn't flip for RTL
Remaining tasks
Review
User interface changes
Introduced terminology
NA
API changes
NA
Data model changes
NA
Release notes snippet
NA
| Comment | File | Size | Author |
|---|---|---|---|
| #24 | 3583516-24-voiceover.edge_.after_.480p.mov | 193.65 KB | kentr |
| #5 | 3583516-5-arbitrary-text-elements.480p.mov | 715.95 KB | kentr |
| #5 | 3583516-5-breadcrumb.480p.mov | 466.22 KB | kentr |
Issue fork drupal-3583516
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
- 3583516-backport
changes, plain diff MR !17172
- 3583516-This-one-will-work
changes, plain diff MR !16900
- main
compare
- 3583516-test2
compare
- 3583516-test
compare
- 3583516-Breadrumb-CSS
compare
- 3583516-hide-breadcrumb-seprator-css
compare
- 3583516-breadcrumb-separators-are
changes, plain diff MR !16772
Comments
Comment #2
mgiffordComment #3
kentr commentedComment #4
mgifford@mherchel couldn't replicate it at our last meeting, but that wasn't with VoiceOver. We may need to flesh out better testing procedures.
Comment #5
kentr commentedI know I'm not even remotely a VoiceOver expert, so this is speculation based on some observations.
To me, it looks like VoiceOver
VO Right Arrowis selecting them rather than focusing them. It doesn't look like the same thing as tabbing through interactive elements.The only way to stop this with the current markup may be
aria-hidden="true".I was able to reproduce the black rectangular VO cursor moving onto the separators with
VO Right Arrow.But when I move onto a separator, the link that I just moved away from retains the blue focus indicator that normally follows the tab key. When I press
ENTER, the browser follows the link that has the focus indicator.To me, this means that the separators don't receive focus.
See the attached video
3583516-5-breadcrumb.480p.mov.VO Right Arrowalso allows selection of lists, paragraphs, and arbitrary text nodes, even when they aren't part of the tab order and havefocusable="false". I couldn't find any documentation forfocusable="false".See the attached video
3583516-5-arbitrary-text-elements.480p.mov.Here's a test codepen.
Another idea
@rkoller noted in the Gin issue that this doesn't happen in Olivero.
I think it's because Olivero does this with just empty blocks that have two right-angle borders rotated slightly. Doing something like that would also be an option here (a single-sided border rotated slightly).
Olivero's CSS:
Comment #6
mgiffordI like the idea of just reusing what we've already tested very well in Olivero.
Comment #8
mgiffordInitial patch to move to Olivero style breadcrumbs.
Note the shift to:
AI was used in the production of this patch.
Comment #9
mgiffordComment #10
angel_devoeted commentedTested
MR !16772onDrupal 11.x.Visually, the breadcrumb separators appear correctly as chevrons(>). During keyboard navigation, tabbing moves focus exclusively through links (Home, Administration, etc.) and completely skips separators. Additionally, accessibility testing confirmed that screen readers ignore the separators and do not read them aloud. Everything works as expected!Comment #11
kentr commentedThanks @angel_devoeted.
To me, chevrons are incorrect.
My suggestion in #5 was to adapt the technique from Olivero so that they appear as they do currently (as slashes with same size / positioning / spacing / color).
Using a single-sided border might do that (instead of a two-sided border that shows the full corner).
If they appear as chevrons instead of slashes, then my guess is that it would be considered a visual regression. That's up to the theme maintainers, though.
Comment #12
kentr commentedTo be more precise, the intention behind my suggestion was to adapt the technique from Olivero so that they appear as they do currently.
Anyway, the pipeline is failing. So back to Needs work for that.
Comment #18
mherchelThere's a number of issues wrong with the breadcrumbs CSS
.breadcrumbselector still exists, although its not in use. Currently in use is.gin-breadcrumb:is(#extra-specificity-hack, [data-drupal-admin-styles]) {hack.In addition, we can do an easier fix for removing it from the accessibility tree by doing a
content: "/" / "";The extra=/ "";is like empty alt text for thecontentproperty. I manually tested this in VO with Chrome and Safari. Details on this are on MDN at https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/co...Note I can't figure out how to make a new branch. I posted in Slack at https://drupal.slack.com/archives/CGKLP028K/p1788029852101539.
Comment #21
mherchelUpdating IS
Comment #22
mherchelMR created. This should be good to go.
Comment #23
kentr commentedTested before & after.
With the MR, VoiceOver does not select or announce the separators (as expected).
I'll upload a screencast tomorrow.
P.S. I like the branch name:
3583516-This-one-will-work:-).Comment #24
kentr commentedHere's a screencast of VoiceOver in Edge with the MR, in dark mode.
Comment #25
mherchelThis needs to be reworked since we just got #3605702: Remove remaining Gin and Claro implementation names from Default Admin theme in.
Comment #26
mherchelBrought back up to date. Setting back to RTBC per #23
Note that there's some old Claro styles being removed. These were not in use because the namespace was
gin-breadcrumb, however, now they're redundant and so are being removed.Comment #27
godotislateWith #3605702: Remove remaining Gin and Claro implementation names from Default Admin theme in, is
gin-breadcrumbstill correct?Comment #28
mherchelDefinitely not! Not sure what I was thinking :D
Comment #30
smustgrave commentedHope it's okay I RTBC all I did was drop .gin- in line line.
Comment #31
amateescu commentedReviewed and posted a few comments on the MR.
Comment #32
mherchel@amateescu's comments are resolved or addressed. This should be ready!
Comment #33
smustgrave commentedFeedback for this one appears to be addressed. Breadcrumbs appear to be working. Checked both regular and dark mode
Comment #34
kentr commentedThe pipeline is failing.
Looks like a performance test failing on the asset size change. I'm looking into it.
I'm leaving at RTBC in case that decision was made in spite of the pipeline.
Comment #35
kentr commentedPipeline is passing now.
Comment #37
catchThis had a commit conflict on performance tests, rebasing also had a conflict on at least one previous commit, so I merged in main then updated the test from there.
Committed/pushed to main, thanks!
Moving to 11.x for backport.
Comment #40
smustgrave commentedGreen backport.
Comment #42
godotislate11.x MR diff checks out against the main commit, only difference is the performance test numbers.
Committed b94ae96 and pushed to 11.x. Thanks!