-
Notifications
You must be signed in to change notification settings - Fork 4.3k
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
Fix: FSE editor sidebar item scroll accessibility issue #68165
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. |
Warning: Type of PR label mismatch To merge this PR, it requires exactly 1 label indicating the type of PR. Other labels are optional and not being checked here.
Read more about Type labels in Gutenberg. Don't worry if you don't have the required permissions to add labels; the PR reviewer should be able to help with the task. |
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. |
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. Additionally, browser behavior varies, with WebKit browsers centering focused elements and Firefox not doing so. A programmatic solution leveraging scroll-padding can improve accessibility and consistency across browsers.
How?
1) 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:
2) Block Manager Issue
The issue is resolved by dynamically adjusting the scroll position of the container based on the position of sticky elements and the currently focused element. Here's how it was implemented:
Identify Key Elements:
document.querySelector
to target the relevant modal or scrollable content.querySelectorAll
.Focus Handling:
focusin
events, which are triggered whenever an element inside the container gains focus.getActiveStickyElement
, determines the currently active sticky element based on its position relative to the scrollable container.Scroll Adjustment Logic:
scrollTo
with thesmooth
behavior for a better user experience.Event Listener Cleanup:
useEffect
hook to avoid memory leaks or unintended behavior when the component unmounts.Testing Instructions
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.
Preferences Modal Dialog:
Open the Preferences Modal Dialog > Blocks.
Ensure the list of blocks is long enough to make the panel scrollable.
Use the Tab key to navigate and then Shift+Tab to navigate backwards.
Confirm that focused elements remain visible during navigation.
Test across different browsers (e.g., Chrome, Safari, Firefox) to ensure consistent behavior.
Screenshots or screencast
Screen.Recording.2025-01-17.at.10.22.24.PM.mov
Screen.Recording.2025-01-17.at.9.47.58.PM.mov