Skip to content
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: block manager scrollable UI a11y fix #68800

Open
wants to merge 3 commits into
base: trunk
Choose a base branch
from

Conversation

Kallyan01
Copy link

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 UI to keep certain elements fixed while scrolling.

How?

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:

  1. Identify Key Elements:

    • A scrollable container is selected using document.querySelector to target the relevant modal or scrollable content.
    • Sticky elements within the scrollable container are identified using querySelectorAll.
  2. Focus Handling:

    • An event listener is added to the container to monitor focusin events, which are triggered whenever an element inside the container gains focus.
    • A utility function, getActiveStickyElement, determines the currently active sticky element based on its position relative to the scrollable container.
  3. Scroll Adjustment Logic:

    • When an element inside the container gains focus, its position is compared to the bottom of the sticky element.
    • If the focused element is hidden behind the sticky header/footer, the scroll position of the container is adjusted using scrollTo with the smooth behavior for a better user experience.
  4. Event Listener Cleanup:

    • The event listener is removed during the cleanup phase of the useEffect hook to avoid memory leaks or unintended behavior when the component unmounts.

Testing Instructions

Testing Instructions for Keyboard

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.9.47.58.PM.mov

@Kallyan01 Kallyan01 changed the title Fix/block manager scrollable UI a11y fix Fix: block manager scrollable UI a11y fix Jan 21, 2025
@github-actions github-actions bot added the First-time Contributor Pull request opened by a first-time contributor to Gutenberg repository label Jan 21, 2025
Copy link

👋 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.

@Kallyan01 Kallyan01 marked this pull request as ready for review January 21, 2025 08:01
@Kallyan01 Kallyan01 requested a review from ellatrix as a code owner January 21, 2025 08:01
Copy link

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.

  • Type-related labels to choose from: [Type] Automated Testing, [Type] Breaking Change, [Type] Bug, [Type] Build Tooling, [Type] Code Quality, [Type] Copy, [Type] Developer Documentation, [Type] Enhancement, [Type] Experimental, [Type] Feature, [Type] New API, [Type] Task, [Type] Technical Prototype, [Type] Performance, [Type] Project Management, [Type] Regression, [Type] Security, [Type] WP Core Ticket, Backport from WordPress Core, Gutenberg Plugin.
  • Labels found: First-time Contributor.

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.

Copy link

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 props-bot label.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Co-authored-by: Kallyan01 <[email protected]>
Co-authored-by: afercia <[email protected]>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
First-time Contributor Pull request opened by a first-time contributor to Gutenberg repository
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Try scroll-padding for any scrollable UI
1 participant