-
Notifications
You must be signed in to change notification settings - Fork 4.5k
Fix: FSE editor sidebar item scroll accessibility issue #68165
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: trunk
Are you sure you want to change the base?
Fix: FSE editor sidebar item scroll accessibility issue #68165
Conversation
- Restructured the dom elements and removed sticky - Moved description to title component and made it fixed
👋 Thanks for your first Pull Request and for helping build the future of Gutenberg and WordPress, @Kallyan01! In case you missed it, we'd love to have you join us in our Slack community. If you want to learn more about WordPress development in general, check out the Core Handbook full of helpful information. |
The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.
To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR!
I believe the Site Editor issue and the Block Manager issue are completely unrelated in terms of code.
In general, it's recommended to address one issue or feature per PR. Otherwise, it can be hard to predict which code affects which issue/feature.
Can this PR be focused on just one of the issues?
I think it's fine to just link the same issue instead of creating a new one. |
4443530
to
2246cc2
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @Kallyan01,
I removed unnecessary props and styles from the SidebarNavigationScreen
component in #68972. Can you resolve the conflicts in this PR?
In addition, you may want to revert the following changes that are not related to this PR:
- packages/block-library/src/image/block.json
- packages/block-library/src/post-content/block.json
background: $gray-900; | ||
padding-top: $grid-unit-60; | ||
margin-bottom: $grid-unit-10; | ||
padding-bottom: $grid-unit-10; | ||
z-index: z-index(".edit-site-sidebar-navigation-screen__title-icon"); | ||
z-index: z-index(".edit-site-sidebar-navigation-screen__sticky-title-section"); | ||
min-height: 183px !important; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How was this value derived?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@t-hamano sorry for the late reply ! Was busy with some other work !
I have derived the min-height value from main design menu area ! The reason behind using it is to make it the UI consistant throughout and avoid spacing related issues once we have scroll element (sometimes it reduces the spacings automatically )
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From my quick testing, if we only want menu items to be scrollable, we should be able to solve this with CSS alone, without changing the DOM structure. Below is one approach, although it's not complete. Here's a diff from the trunk branch: diffdiff --git a/packages/edit-site/src/components/sidebar-navigation-screen-patterns/style.scss b/packages/edit-site/src/components/sidebar-navigation-screen-patterns/style.scss
index fd50d757f2..b3160b4c85 100644
--- a/packages/edit-site/src/components/sidebar-navigation-screen-patterns/style.scss
+++ b/packages/edit-site/src/components/sidebar-navigation-screen-patterns/style.scss
@@ -1,7 +1,11 @@
.edit-site-sidebar-navigation-screen-patterns__group {
+ overflow-y: auto;
margin-bottom: $grid-unit-30;
- margin-left: -$grid-unit-20;
- margin-right: -$grid-unit-20;
+ margin-left: ($grid-unit-30 + $grid-unit-05) * -1;
+ margin-right: ($grid-unit-30 + $grid-unit-05) * -1;
+ @include custom-scrollbars-on-hover(transparent, $gray-700);
+ scrollbar-gutter: stable;
+ padding: var(--wp-admin-border-width-focus) $grid-unit-20 0;
&:last-of-type {
border-bottom: 0;
diff --git a/packages/edit-site/src/components/sidebar-navigation-screen/style.scss b/packages/edit-site/src/components/sidebar-navigation-screen/style.scss
index c4ee3f2659..76a9b16e8b 100644
--- a/packages/edit-site/src/components/sidebar-navigation-screen/style.scss
+++ b/packages/edit-site/src/components/sidebar-navigation-screen/style.scss
@@ -10,6 +10,7 @@
// This allows the footer section to be sticky at the bottom of the viewport.
flex-grow: 1;
margin-bottom: $grid-unit-20;
+ height: 100%;
&.has-footer {
margin-bottom: 0;
}
@@ -17,6 +18,9 @@
.edit-site-sidebar-navigation-screen__content {
padding: 0 $grid-unit-20;
+ display: flex;
+ flex-flow: column;
+ flex: 1;
.components-text {
color: $gray-400;
@@ -37,6 +41,16 @@
z-index: z-index(".edit-site-sidebar-navigation-screen__title-icon");
}
+.edit-site-sidebar-navigation-screen-navigation-menus__content {
+ overflow-y: auto;
+ overflow-x: hidden;
+ @include custom-scrollbars-on-hover(transparent, $gray-700);
+ scrollbar-gutter: stable;
+ margin-left: ($grid-unit-30 + $grid-unit-05) * -1;
+ margin-right: ($grid-unit-30 + $grid-unit-05) * -1;
+ padding: 0 $grid-unit-20;
+}
+
.edit-site-sidebar-navigation-screen__title {
flex-grow: 1;
overflow-wrap: break-word;
diff --git a/packages/edit-site/src/components/sidebar/style.scss b/packages/edit-site/src/components/sidebar/style.scss
index d2f3e450cc..317256a75e 100644
--- a/packages/edit-site/src/components/sidebar/style.scss
+++ b/packages/edit-site/src/components/sidebar/style.scss
@@ -32,9 +32,6 @@
}
.edit-site-sidebar__screen-wrapper {
- overflow-x: auto;
- @include custom-scrollbars-on-hover(transparent, $gray-700);
- scrollbar-gutter: stable;
display: flex;
flex-direction: column;
height: 100%; The focused element should always be visually positioned in the correct position, whether it's a pattern screen or a navigation screen. ea29c19a05811f325fecc7f4012a2b7f.mp4 |
@t-hamano thanks for your exploration. On the other hand, it would be best to have a more generic solution that can be used on other scrollables as well, not just this specific case. |
I don't have much time to test the proposed code changes on my machine, but in principle I agree that a CSS solution should be viable, and should also be our preferred option — either by using
In principle, absolutely. In practice, as also discussed in #67959, IMO it would be difficult to craft a generic enough solution that performs well in all scenarios. Preventing the issue at the source (by avoiding certain layouts) or applying |
Absolutely. That would mean avoiding any sticky / fixed headers or footers within scrollable elements. I would love design to avoid those layouts but I'm not sure they would agree. |
Sorry for the late reply.
I agree with this opinion. In Gutenberg trunk, the sidebar implementation should be fairly consistent on both desktop and mobile (See #69413 for more details). Based on the approach mentioned in this comment, we should be able to fix the issue with some simpler CSS. |
Closes #67959
What?
Fixes an issue where focused elements in scrollable lists with sticky headers or footers can remain hidden behind those elements when navigating using a keyboard or keyboard-like devices.
Why?
Sticky headers and footers are commonly used in the editor UI to keep certain elements fixed while scrolling. However, this pattern causes accessibility issues where focused elements are obscured. This is particularly problematic when navigating with a keyboard, as it prevents users from seeing the currently focused item.
How?
Site Editor Issue
We resolved the issue by restructuring the DOM elements within the Site Editor to address the accessibility concerns instead of using any dynamic approach like block manager one :
Reorganizing DOM Structure:
Adjusting Scrollable Area:
Default Accessibility Improvement:
Testing Instructions for Keyboard
Site Editor Navigation Panel:
Go to the Site Editor > Patterns.
Ensure the navigation panel has enough patterns to make it scrollable.
Use the Tab key to navigate the patterns in the list.
Scroll down and then use Shift+Tab to navigate backwards.
Confirm that focused elements are no longer hidden behind the sticky header.
Screenshots or screencast
Screen.Recording.2025-01-17.at.10.22.24.PM.mov