You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A useDocumentMeta frissíti a document.title-t, de a címváltozást a képernyőolvasók nem jelentik be következetesen — valódi oldalbetöltésnél teszik, history.pushState esetén nem. Fókusz-visszaállítás sincs: navigáció után a fókusz azon a linken marad, amire kattintottak, ami már nem is létezik a DOM-ban, tehát a fókusz a <body>-ra esik vissza — onnan a Tab újra a lap tetejéről indul.
Vagyis a klaviatúrás és a képernyőolvasós látogató számára a navigáció csendes és tájékozódás nélküli.
Javaslat
Élő régió az App.vue-ban: egy vizuálisan rejtett (sr-only, nem display: none) <div aria-live="polite" aria-atomic="true">, amibe a router afterEach beírja az új oldal címét. A címet a useDocumentMeta amúgy is előállítja — érdemes ugyanabból a forrásból venni, hogy ne csúszhasson el.
A bejelentés a tartalom betöltése után történjen, ne a navigáció pillanatában: a ArticleView a store-ból oldja fel a slugot, tehát a cím néhány tick-kel később áll rendelkezésre. Előbb bejelentve „Portfólió" hangzana el minden oldalon.
Fókusz-visszaállítás: navigáció után a fókusz a <main> elemre (tabindex="-1", programozott focus()) — ez az A3-mal (skip link és main landmark) együtt működik, tehát a kettőt érdemes egy körben megcsinálni.
A scrollBehavior hash-ág maradjon: ha a látogató horgonyra navigál, a fókusz a horgonyzott elemre kerüljön, ne a main-re.
Jelenség
SPA-navigáció után semmi nem jelzi a képernyőolvasónak, hogy új oldal jött. A router csak a görgetést és az analytics beacont kezeli:
A
useDocumentMetafrissíti adocument.title-t, de a címváltozást a képernyőolvasók nem jelentik be következetesen — valódi oldalbetöltésnél teszik,history.pushStateesetén nem. Fókusz-visszaállítás sincs: navigáció után a fókusz azon a linken marad, amire kattintottak, ami már nem is létezik a DOM-ban, tehát a fókusz a<body>-ra esik vissza — onnan a Tab újra a lap tetejéről indul.Vagyis a klaviatúrás és a képernyőolvasós látogató számára a navigáció csendes és tájékozódás nélküli.
Javaslat
App.vue-ban: egy vizuálisan rejtett (sr-only, nemdisplay: none)<div aria-live="polite" aria-atomic="true">, amibe a routerafterEachbeírja az új oldal címét. A címet auseDocumentMetaamúgy is előállítja — érdemes ugyanabból a forrásból venni, hogy ne csúszhasson el.ArticleViewa store-ból oldja fel a slugot, tehát a cím néhány tick-kel később áll rendelkezésre. Előbb bejelentve „Portfólió" hangzana el minden oldalon.<main>elemre (tabindex="-1", programozottfocus()) — ez az A3-mal (skip link ésmainlandmark) együtt működik, tehát a kettőt érdemes egy körben megcsinálni.scrollBehaviorhash-ág maradjon: ha a látogató horgonyra navigál, a fókusz a horgonyzott elemre kerüljön, ne amain-re.main-en van.Érintett fájlok
portfoliocms.client/src/App.vueportfoliocms.client/src/router/index.tsportfoliocms.shared/composables/useDocumentMeta.tsportfoliocms.client/src/assets/public.css(sr-onlyosztály)portfoliocms.client/src/router/__tests__/— új spec