Tillgänglighetsträd
Se även: a11y tree, accessibility object model, AOM
Den interna datastruktur som webbläsare och operativsystem bygger från DOM:en, där varje element mappas till en roll, ett namn, ett tillstånd och relationer — den data som skärmläsare och annan hjälpmedelsteknik faktiskt traverserar.
Tillgänglighetsträdet är den datastruktur på operativsystemnivå som skärmläsare och annan hjälpmedelsteknik faktiskt konsumerar. När du öppnar en sida i en webbläsare bygger webbläsaren två träd: DOM-trädet (den vanliga HTML-hierarkin) och tillgänglighetsträdet, en parallell struktur härledd från DOM:en men med tillgänglighetsmetadata.
Att förstå tillgänglighetsträdet förklarar ungefär 80 % av ARIA:s, skärmläsares och “varför tillkännager det inte det här?”-felsökningssessionernas annars förbryllande beteende.
Vad det innehåller
Varje nod i tillgänglighetsträdet har:
- Roll — vad elementet är: knapp, länk, rubrik, navigering, dialog.
Från HTML-elementtypen eller från explicit ARIA
role="...". - Namn — vad elementet kallas. Från etikettext,
alt-attribut,aria-label,aria-labelledbyeller beräknat textinnehåll. - Beskrivning — ytterligare kontext. Från
aria-describedbyellertitle-attribut. - Tillstånd — aktuellt tillstånd: tryckt, expanderat, markerat, pågående.
Från HTML-attribut (
disabled,required) eller ARIA (aria-pressed,aria-expanded). - Egenskaper — relationer och metadata:
aria-controls,aria-owns,aria-haspopup.
Skärmläsare traverserar detta träd och tillkännager varje nod utifrån dessa fält. Tabb- och pilnavigering sker genom trädet, inte DOM:en.
Varför rent visuellt innehåll försvinner
En <div onclick="...">formaterad att se ut som en knapp</div> har ingen roll
i tillgänglighetsträdet — webbläsaren ser en generisk <div> och registrerar
den som role="generic" (i praktiken osynlig för hjälpmedelsteknik).
onclick-hanteraren hamnar inte i tillgänglighetsträdet eftersom trädet bara
återspeglar vad webbläsaren härleder att elementet är utifrån dess HTML-roll.
Det är därför semantisk HTML spelar roll på den mest grundläggande nivån: inte på grund av stil eller konvention, utan för att semantiska HTML-element automatiskt fyller tillgänglighetsträdet med rätt roller. Icke-semantisk uppmärkning skapar ett div-soppa-träd som skärmläsare inte kan förstå sig på.
ARIA:s uppgift i trädet
ARIA finns specifikt för att fylla tillgänglighetsträdet i fall där inbyggd
HTML saknar ett matchande element. role="combobox" talar om för webbläsaren
att placera en combobox-nod i trädet för ett element som annars hade
framstått som generiskt. aria-expanded="true" sätter en tillståndsegenskap
på den noden.
ARIA ändrar INTE DOM:en. Det ändrar vad webbläsaren skriver in i tillgänglighetsträdet.
Hur man inspekterar det
Webbläsarens DevTools exponerar nu tillgänglighetsträdet direkt:
- Chrome / Edge DevTools — panelen Elementer → fliken Tillgänglighet (högerkolumn) visar de beräknade tillgänglighetsegenskaperna för den valda noden. Växlaren “Fullsidans tillgänglighetsträd” (Chrome-flagga i vissa versioner) visar trädet som en sidopanel.
- Firefox DevTools — Tillgänglighetspanelen (ikon i verktygsfältet) visar en dedikerad vy av tillgänglighetsträdet, liknande elementvyn men renderad i tillgänglighetsträds-termer.
- Safari Web Inspector — fliken Granskning / Tillgänglighet ger jämförbar inspektion.
När du kan se tillgänglighetsträdet kan du empiriskt besvara frågan “varför tillkännager det inte det här?”. Svaret är nästan alltid: noden i tillgänglighetsträdet har en annan roll än du trodde, eller så är dess namn tomt, eller så är dess tillstånd fel.
Varför “tillgänglighetsträd” är en bättre mental modell än “ARIA”
Ingenjörer som lär sig ARIA utan att förstå tillgänglighetsträdet strör ARIA-attribut i hopp om att skärmläsare ska plocka upp dem. Ingenjörer som förstår tillgänglighetsträdet vet att ARIA:s uppgift är att skriva specifika fält till specifika trädnoder, och att inspektera trädet direkt är snabbare än att gissa.