Semantic HTML 2026: Landmarks, Überschriften, Buttons statt div, Code Beispiele und Tests mit Cypress. Die Basis für WCAG 2.2, Screenreader und SEO.
Mehr erfahren
Ein Tag inhouse mit Roland Golla, offizieller Cypress Ambassador und seit über 20 Jahren in Testing und Refactoring zu Hause. Auf unserem YouTube Kanal zeigt er in über 70 Live Coding Tutorials, wie Cypress in echten Projekten läuft. Dazu kommt unser Open Source Plugin NCA TESTIFY: Basistests für jede Website, mit einer Zeile im CI/CD Setup. Im Workshop lernt euer Team Setup, stabile Selektoren, Custom Commands und Tests in der Pipeline.
<!-- Nicht barrierefrei: keine Rolle, kein Fokus, keine Tastatur -->
<div class="btn" onclick="save()">Speichern</div>
<!-- Barrierefrei: Rolle, Fokus und Tastatur kommen vom Browser -->
<button type="button" onclick="save()">Speichern</button>
<!-- Die Region steht schon beim Laden im DOM, zunächst leer -->
<div id="cart-status" role="status"></div>
<script>
const status = document.getElementById('cart-status');
function addToCart(count) {
status.textContent = `${count} Artikel im Warenkorb`;
}
</script>
const dialog = document.querySelector('#settings-dialog');
const opener = document.querySelector('#open-settings');
opener.addEventListener('click', () => dialog.showModal());
// Fokus zur Sicherheit explizit zurück zum Auslöser
dialog.addEventListener('close', () => opener.focus());
describe('DOM und Barrierefreiheit', () => {
it('hat keine axe Verstöße nach WCAG AA', () => {
cy.visit('/');
cy.injectAxe();
cy.checkA11y(null, {
runOnly: { type: 'tag', values: ['wcag2a', 'wcag2aa', 'wcag22aa'] },
});
});
it('meldet den Warenkorb über eine Live Region', () => {
cy.visit('/produkt');
cy.get('[data-cy=add-to-cart]').click();
cy.get('[role=status]').should('contain.text', 'im Warenkorb');
});
it('setzt den Fokus in den Dialog', () => {
cy.get('#open-settings').click();
cy.focused().closest('dialog').should('exist');
});
});
Think 'what does this expose to the accessibility tree?'
Semantic HTML 2026: Landmarks, Überschriften, Buttons statt div, Code Beispiele und Tests mit Cypress. Die Basis für WCAG 2.2, Screenreader und SEO.
Mehr erfahren
Wir sind hier, um Ihnen zu helfen. Gemeinsam meistern wir Ihre digitalen Herausforderungen und fördern die Inklusion im Internet. Lassen Sie uns Ihre Projekte mit barrierefreiem Webdesign erfolgreich machen.
Das Document Object Model ist die Baumstruktur, in die der Browser eine HTML Seite übersetzt. Jedes Element, jedes Attribut und jeder Text wird darin zu einem Knoten. JavaScript liest und ändert diese Knoten, Frameworks wie React, Vue oder Astro erzeugen sie. Gepflegt wird das DOM als Living Standard von der WHATWG.
Aus dem DOM baut der Browser den Accessibility Tree. Genau diesen Baum lesen Screenreader, Sprachsteuerung und andere assistive Technologien aus. Fehlt im DOM eine Rolle, ein Name oder ein Zustand, fehlt diese Information auch für den Nutzer. Die WCAG 2.2 Kriterien, die über das BFSG verbindlich sind, prüfen deshalb vor allem das DOM.
Das DOM enthält alle Knoten einer Seite. Der Accessibility Tree ist eine gefilterte Sicht darauf mit Rolle, Name, Zustand und Beziehungen jedes bedeutungstragenden Elements. Dekorative Elemente fehlen dort. Der Browser erzeugt den Accessibility Tree automatisch aus dem DOM, ARIA Attribute können ihn ergänzen oder überschreiben.
Vor allem 1.3.1 Info und Beziehungen, 1.3.2 Bedeutungstragende Reihenfolge, 2.4.3 Fokus Reihenfolge, 4.1.2 Name, Rolle, Wert und 4.1.3 Statusmeldungen. Sie verlangen semantisches Markup, eine sinnvolle Reihenfolge, korrekte Namen und Rollen sowie angesagte Änderungen. Das frühere Kriterium 4.1.1 Syntaxanalyse ist in WCAG 2.2 gestrichen.
Erst im Browser: Accessibility Tree in den Chrome DevTools oder im Firefox Accessibility Inspector ansehen. Dann automatisiert mit axe-core, etwa über cypress-axe in der CI Pipeline. Dynamisches Verhalten wie Live Regions und Fokus deckt ihr mit eigenen Cypress Tests ab. Zum Schluss folgt der manuelle Test mit Tastatur und Screenreader.
Eine Live Region ist ein Bereich im DOM, dessen Änderungen Screenreader automatisch ansagen. Ihr markiert ihn mit role status, aria-live polite oder für dringende Meldungen mit role alert. Wichtig ist, dass die Region schon beim Laden im DOM steht und erst danach Inhalt bekommt. Sonst melden viele Screenreader nichts.
Ein natives button Element bringt Rolle, Fokus und Tastatursteuerung automatisch mit. Ein div mit Klick Handler hat nichts davon: Es erscheint im Accessibility Tree nicht als Button, ist per Tab nicht erreichbar und reagiert nicht auf Enter oder Leertaste. Das alles nachzubauen kostet Zeit und ist fehleranfällig.
Nein. CSS verschiebt Elemente nur optisch, etwa mit order, row-reverse, Grid Platzierung oder absoluter Positionierung. Screenreader und die Tab Taste folgen weiter der DOM Reihenfolge. Weicht die Optik davon ab, springt der Fokus quer über die Seite. Deshalb gehört die Lesereihenfolge ins DOM und nicht ins Stylesheet.
Nicht grundsätzlich. Das virtuelle DOM ist nur ein Zwischenschritt, am Ende entsteht echtes DOM im Browser. Probleme entstehen durch die Komponenten selbst, etwa durch überflüssige Wrapper, doppelte IDs oder fehlendes Fokusmanagement bei Seitenwechseln. Deshalb prüft ihr immer das gerenderte Ergebnis und nicht den Quellcode.
Der Accessibility Tree schaut durch die Shadow Grenze hindurch, Rollen und Namen innerhalb einer Web Component werden also erkannt. ID Referenzen wie aria-labelledby oder label for funktionieren aber nicht über die Grenze hinweg. Label, Beschreibung und Feld sollten deshalb innerhalb derselben Shadow Root liegen.
aria-hidden true entfernt ein Element samt Kindern aus dem Accessibility Tree. Im DOM und auf dem Bildschirm bleibt es erhalten. Das ist sinnvoll für dekorative Icons. Gefährlich wird es bei fokussierbaren Elementen: Sie bekommen weiter den Fokus, sind für Screenreader aber leer. Für ganze Bereiche ist das inert Attribut die bessere Wahl.
Nein. Automatisierte Tools finden fehlende Namen, falsche Rollen und ungültige ARIA Attribute zuverlässig. Ob die Reihenfolge Sinn ergibt, ob ein Name verständlich ist oder ob eine Änderung zur richtigen Zeit angesagt wird, erkennen sie nicht. Dafür braucht es den manuellen Test mit Tastatur und Screenreader zusätzlich zur Pipeline.