bug: ion-menu focuses its full-screen host on open and does not restore focus to ion-menu-button on close; ion-menu-button reads aria-label only once
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- accessibility, frontend
Direzione di ricerca
The issue identifies ion-menu focus handling and ion-menu-button label updates, but names no Ionic source files or tests. Start by locating those components and their existing accessibility tests, then reproduce the reported open, close, and runtime label changes. Done when focus moves to the visible menu on open, returns to the opener on close, and updated labels are reflected.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Prerequisites
- I have read the Contributing Guidelines.
- I agree to follow the Code of Conduct.
- I have searched for existing issues that already report this problem, without success.
Ionic Framework Version
v8.x
Current Behavior
- When an
ion-menuis closed with the keyboard (Escape or a close button inside the menu),
the menu blurs the focused element and does not return focus to theion-menu-buttonthat
opened it. The focus lands on<body>; a keyboard or screen reader user has to start over
from the top of the page. Measured on Android 14 (Chromium WebView) and iOS 26 (WKWebView). ion-menu-buttonreads itsaria-labelonce (inheritAttributes on load). When the app
changes the label at runtime (language switch), the button keeps the old name until the
next page is rendered, whileion-menuitself picks up a newaria-labelimmediately.- Without an app-provided label the button and the menu are announced with the English
defaults ("menu", "Navigation. In menu") regardless of the document language. - When the menu opens,
ion-menumoves focus to its own host element (afterAnimationcalls
this.el.focus()withtabindex="0"set inbeforeAnimation). The host has
role="navigation"and covers the whole viewport (left/right/top/bottom: 0, backdrop
included), so TalkBack draws its focus frame around the entire screen instead of the visible
menu panel and announces only the landmark name. Measured on Android 14 (Chromium WebView,
TalkBack): after opening,document.activeElementis theion-menuhost.
Verified with the reproduction on Ionic 8.8.5 (Chrome 154, page "2 ion-menu focus"): after closing the menu
document.activeElement is <body>; after changing the host aria-label to "Open menu" the inner button still
carries "Menü öffnen".
Expected Behavior
- Closing the menu restores focus to the element that opened it, as
ion-modal,
ion-popoverandion-alertdo. aria-labelchanges onion-menu-buttonare reflected.- Opening the menu focuses the visible menu panel (
.menu-inner) or its first focusable
element, so the screen reader focus matches what is visible.
Steps to Reproduce
- Closing the menu restores focus to the element that opened it, as
ion-modal,
ion-popoverandion-alertdo. aria-labelchanges onion-menu-buttonare reflected.- Opening the menu focuses the visible menu panel (
.menu-inner) or its first focusable
element, so the screen reader focus matches what is visible.
Code Reproduction URL
https://stackblitz.com/github/mrambow/starterApp/tree/a11y-repros (page /repro/menu)
GitHub: https://github.com/mrambow/starterApp/tree/a11y-repros (src/app/repros/menu.page.ts)
Code Reproduction URL
https://github.com/mrambow/starterApp/tree/a11y-repros
Ionic Info
Ionic 8.8.5, Angular 17.3, Capacitor 6 (reproduction); found in Ionic 8.8.5, Angular 21, Capacitor 8
Additional Information
No response
- Lingua principale
- TypeScript
- Stelle
- 52.7k
- Fork
- 13.3k
- Merge medio
- 2g 21h
- PR unite (30g)
- 65
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di ionic-team/ionic-framework
-
bug: input-otp, backspace in an empty box only moves focus instead of clearing the previous boxForse già presa @sarankumar1325 l’ha presa 10 giorni fa. Apertapackage: core type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
ionic-team/ionic-framework#31639 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug: vue swipe cancellation throws when the previous page is missingForse già presa @dandoingdev l’ha presa 33 giorni fa. Apertapackage: vue type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
ionic-team/ionic-framework#31514 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug: ion-searchbar input is always labelled "search text"; aria-label on the host is not forwardedForse già presa @HappyKnuckles l’ha presa 28 giorni fa. Apertaa11y package: core type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
ionic-team/ionic-framework#31492 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug: IonTabs throws when a Fragment contains one IonRouterOutletForse già presa @Benziza l’ha presa 68 giorni fa. Apertapackage: react type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
ionic-team/ionic-framework#31410 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
package: angular type: bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
ionic-team/ionic-framework#31291 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di ionic-team/ionic-framework
Issue simili
-
area: frontend priority: normal
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 85/100
formbricks/formbricks#9918 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
thecodacus/pithagoras#364 ·
I maintainer di solito rispondono entro 1 giorno
-
TestAutonomousStop_ReportsObservedState fails under host load: 1s wall-clock ceiling vs 250ms cycleApertatype:bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
nightgauge/nightgauge#2909 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno