NCA Social Media
Erstellt:
Aktualisiert:
Autor:
Roland Golla
Name, Rolle, Zustand: Ein Schalter stellt sich mit Namensschild vor

Was bedeuten Name, Rolle und Zustand?

Name, Rolle und Zustand sind die drei Angaben, die jedes Bedienelement einer Webseite an Hilfsmittel wie Screenreader liefern muss: wie es heißt, was es ist und wie es gerade eingestellt ist. Festgelegt ist das im WCAG Erfolgskriterium 4.1.2 Name, Role, Value auf Stufe A.

Der Browser sammelt diese Angaben im Accessibility Tree. Das ist eine zweite Sicht auf die Seite, parallel zum DOM. Screenreader und Sprachsteuerung greifen auf genau diesen Baum zu. Fehlt dort eine Angabe, fehlt sie für alle, die so surfen.

Die gute Nachricht: Natives HTML liefert Name, Rolle und Zustand meist von selbst. Ein echtes button Element ist ein Button. Ein Label gibt dem Feld seinen Namen. Eine Checkbox meldet, ob sie angehakt ist.

Inhalt
NCA Cypress Workshop mit Cypress Ambassador Roland Golla

E2E Tests, die euer Team selbst schreibt

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.

  1. 1
    Kostenloses Vorgespräch
    Projekt, Stack und Teststand klären
  2. 2
    Workshoptag bei euch
    Setup, Patterns und erste Tests im Team
  3. 3
    Praxistag optional
    Tests im eigenen Projekt und in CI
Roland Golla
Roland Golla
Fullstack Developer
Zum Cypress Workshop arrow_forward

Wir bauen Bedienelemente, die sich selbst vorstellen

Ob ein Button seinen Namen hat, entscheidet sich im Frontend Code. Genau dort arbeiten wir jeden Tag: Komponenten in Astro, React und Vue, Inhalte aus Sulu, Tests mit Cypress und Cypress Cloud in GitHub Actions oder GitLab CI. Bleibt ein Icon Button stumm oder vergisst ein Menü seinen Zustand, finden wir die Stelle in der Komponente und schützen sie mit einem Test.

Im barrierefreien Webdesign setzen wir von Anfang an auf semantisches HTML, damit Name und Rolle ohne Extra Code stimmen. Bei bestehenden Seiten zeigt ein Accessibility Audit, welche Bedienelemente im Accessibility Tree Lücken haben. Danach landen die Prüfungen im Accessibility Testing eurer Pipeline. Besonders oft betroffen sind barrierefreie Formulare und eigene Widgets, die auch per Keyboard Navigation funktionieren müssen.

Namensschild, Job und Stimmung bilden das Party Prinzip

Stell dir eine Party vor, auf der du nichts siehst. Eine Freundin stellt dir die Gäste vor. Bei jedem Gast willst du drei Dinge wissen: Wie heißt er? Was macht er hier? Wie geht es ihm gerade?

Genau so stellt ein Screenreader die Elemente einer Seite vor:

  • Name, das Namensschild: „Warenkorb“, „Suche“, „Menü“. Ohne Namen bleibt nur „Button“ übrig. Wofür, weiß keiner.
  • Rolle, der Job: Button, Link, Checkbox, Tab. Die Rolle verrät, was du mit dem Element tun kannst.
  • Zustand, die Stimmung: gedrückt, ausgeklappt, angehakt, ausgewählt. Der Zustand ändert sich. Und der Gast muss es sagen, sobald es passiert.

Ein Gast ohne Namensschild, der wie ein Kellner aussieht, aber keine Getränke bringt, sorgt für Chaos. Ein div mit Klick Handler ist genau dieser Gast. Er sieht aus wie ein Button und verrät dem Screenreader trotzdem nichts.

Woher der Browser die drei Angaben nimmt

Der Name. Wie ein Element heißt, regelt die W3C Spezifikation Accessible Name and Description Computation. Vereinfacht prüft der Browser diese Quellen der Reihe nach und nimmt die erste, die etwas liefert:

  1. aria-labelledby: verweist auf anderen Text auf der Seite.
  2. aria-label: ein unsichtbarer Text direkt am Element.
  3. Native Quellen: das label Element bei Feldern, alt bei Bildern, legend bei Fieldsets.
  4. Der Inhalt: bei Buttons und Links der Text zwischen den Tags.
  5. Notlösungen: title oder placeholder, wenn sonst nichts da ist.

Die Rolle. Jedes HTML Element bringt eine eingebaute Rolle mit. a mit href ist ein Link, button ein Button, input type checkbox eine Checkbox. Ein role Attribut überschreibt diese Rolle. Ein div oder span hat keine Rolle, die etwas über Bedienung verrät.

Zustand und Wert. Native Elemente melden ihren Zustand selbst: checked, disabled, das open Attribut bei details. Bei eigenen Widgets übernehmen ARIA Attribute wie aria-expanded, aria-pressed, aria-checked oder aria-selected diese Aufgabe. Der Wert gehört bei Schiebereglern und Eingabefeldern dazu.

Wichtig ist der letzte Teil von 4.1.2: Ändert sich etwas, muss der Browser die Änderung an Hilfsmittel melden können. Ein Zustand, der nur beim Laden stimmt, reicht nicht. Wann ARIA überhaupt nötig ist, erklärt die Seite zu ARIA. Wie DOM und Accessibility Tree zusammenhängen, zeigt die Seite zum Document Object Model.

Wie gut stellt sich dein Button vor?

Zwischen einem stummen Element und einem Button, der alles sagt, liegen vier Stufen. Die Tabelle zeigt, was bei Hilfsmitteln ungefähr ankommt und woran es meist liegt. Die genaue Ansage hängt vom Screenreader ab.

Vom stummen Element zum sprechenden Button

Stufe Was ungefähr ankommt Typische Ursache
1: Stumm Nur loser Text oder gar nichts, keine Bedienung erkennbar div oder span mit Klick Handler
2: Nur Rolle „Button“, ohne Hinweis wofür Icon Button ohne Text und ohne Label
3: Name und Rolle „Menü, Button“, aber offen oder zu bleibt unklar Natives button mit Text, Zustand fehlt
4: Vollständig „Menü, Button, ausgeklappt“ und jede Änderung wird gemeldet Name, Rolle und Zustand im Code gepflegt und getestet

Name, Rolle und Zustand mit Cypress absichern

Das Markup. Ein Menü Button mit echtem button Element. Name und Rolle liefert HTML von selbst. Für den Zustand sorgt aria-expanded, das euer Script bei jedem Klick umschaltet. Ein Button zum Stummschalten nutzt dafür aria-pressed.

Code:
          

<button type="button" aria-expanded="false" aria-controls="hauptmenue">
  Menü
</button>
<ul id="hauptmenue" hidden>
  <li><a href="/leistungen">Leistungen</a></li>
</ul>

<button type="button" aria-pressed="false">Ton aus</button>

Zustand nach dem Klick prüfen. Der Test schaut, ob der Button einen Namen hat und nach jedem Klick den neuen Zustand meldet. Fällt das Umschalten bei einem Refactoring weg, wird der Build rot.

Code:
          

describe('Menü Button: Name, Rolle, Zustand', () => {
  beforeEach(() => {
    cy.visit('/')
  })

  it('hat einen Namen und meldet ausgeklappt', () => {
    cy.get('button[aria-controls="hauptmenue"]').as('menue')

    cy.get('@menue').should(($btn) => {
      const name = $btn.attr('aria-label') || $btn.text().trim()
      expect(name, 'Accessible Name').to.not.be.empty
    })

    cy.get('@menue').should('have.attr', 'aria-expanded', 'false')
    cy.get('@menue').click()
    cy.get('@menue').should('have.attr', 'aria-expanded', 'true')
    cy.get('#hauptmenue').should('be.visible')

    cy.get('@menue').click()
    cy.get('@menue').should('have.attr', 'aria-expanded', 'false')
  })

  it('meldet gedrückt beim Toggle Button', () => {
    cy.contains('button', 'Ton aus')
      .should('have.attr', 'aria-pressed', 'false')
      .click()
    cy.contains('button', 'Ton aus')
      .should('have.attr', 'aria-pressed', 'true')
  })
})

Alle Namen auf einmal prüfen. Mit cypress-axe laufen genau die axe Regeln, die fehlende Namen bei Buttons, Links, Feldern und ARIA Widgets finden. Alle tragen in axe den Tag für Kriterium 4.1.2. Ein Test mit Screenreader bleibt trotzdem nötig, denn ob ein Name verständlich ist, prüft kein Tool.

Code:
          

describe('Bedienelemente haben Namen', () => {
  it('besteht die axe Regeln zu Name, Role, Value', () => {
    cy.visit('/')
    cy.injectAxe()
    cy.checkA11y(null, {
      runOnly: {
        type: 'rule',
        values: [
          'button-name',
          'link-name',
          'input-button-name',
          'label',
          'select-name',
          'aria-command-name',
          'aria-toggle-field-name',
          'aria-input-field-name'
        ]
      }
    })
  })
})

Gäste, die auf der Party für Verwirrung sorgen

  1. Das klickbare div. Es sieht aus wie ein Button, hat aber weder Rolle noch Tastaturbedienung. Ein echtes button Element löst beides auf einmal.
  2. Der stumme Icon Button. Lupe, Herz oder Hamburger ohne Text. Ohne aria-label oder versteckten Text bleibt der Name leer.
  3. Zustand nur per Farbe. Eine Klasse wie is-active färbt den Tab grün. Im Accessibility Tree ändert sich dabei nichts.
  4. Der eingefrorene Zustand. aria-expanded steht fest auf false, obwohl das Menü längst offen ist. Eine falsche Angabe verwirrt mehr als eine fehlende.
  5. Name und sichtbarer Text passen nicht. Auf dem Button steht „Senden“, im aria-label „Formular abschicken“. Wer per Sprache „Senden“ sagt, trifft ins Leere. Das Kriterium 2.5.3 Label in Name verlangt, dass der sichtbare Text im Namen steckt.
  6. Placeholder als einziger Name. Er verschwindet beim Tippen und ist nur eine Notlösung. Ein sichtbares Label ist stabiler.
  7. Rolle ohne Verhalten. role="button" auf einem span verspricht einen Button. Enter, Leertaste und Fokus müsst ihr dann selbst bauen.

Elements, particularly interactive elements, need names.

Scott O'Hara, Mitherausgeber der W3C Spezifikation ARIA in HTML, Microsoft – Name, labels, ARIA, what to do?, scottohara.me

Drei Fragen an jede neue Komponente

Wenn wir eine Komponente bauen oder prüfen, stellen wir ihr dieselben drei Fragen wie einem Gast an der Tür: Wie heißt du? Was machst du? Wie geht es dir gerade? Kann der Accessibility Tree alle drei beantworten, ist der wichtigste Teil geschafft. Den Rest klären Tests mit Tastatur und Screenreader.

Name, Rolle und Zustand gehören zum Prinzip Robustheit, einem der vier Grundprinzipien POUR der WCAG. Den Namen eines Elements siehst du schnell mit dem Bookmarklet ANDI, das genau dafür gebaut wurde.

Bei Bildern übernimmt der Alternativtext die Rolle des Namens. Bei Symbolen hilft die Seite zu barrierefreien Icons. Und wer per Spracherkennung durch eine Seite steuert, braucht Namen, die zum sichtbaren Text passen. Sonst findet der Sprachbefehl sein Ziel nicht.

CYPRESS.IO Ambassador und IT Consultant für QA Engenieering und Qualität in PHP Projekten.
Erreichen Sie unsere Spezialisten zu barrierefreien Webdesign

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.

Häufige Fragen zu Name, Rolle und Zustand

Accessible Name, Accessibility Tree, ARIA Zustände und Tests: die wichtigsten Antworten rund um Kriterium 4.1.2.

Was bedeutet Name, Rolle, Zustand 2026?

Name, Rolle und Zustand sind die drei Angaben, die jedes Bedienelement an Hilfsmittel liefern muss: wie es heißt, was es ist und wie es gerade eingestellt ist. Das verlangt das WCAG Erfolgskriterium 4.1.2 Name, Role, Value. Auch 2026 ist es eines der Kriterien, an denen eigene Widgets am häufigsten scheitern.

Welche WCAG Stufe hat Kriterium 4.1.2 im Jahr 2026?

Kriterium 4.1.2 Name, Role, Value gehört zur Stufe A, also zur Grundstufe. Wer Konformität nach Stufe AA anstrebt, muss es deshalb auch 2026 vollständig erfüllen. Es steht in WCAG 2.0, 2.1 und 2.2 und gehört zum Prinzip Robustheit. Es gilt für alle Bedienelemente, auch für Komponenten aus Frameworks.

Brauche ich 2026 ARIA für Name, Rolle und Zustand?

Meist nicht. Native HTML Elemente wie button, a mit href, input mit label oder details liefern Name, Rolle und Zustand von selbst. ARIA brauchst du 2026 vor allem bei eigenen Widgets, für die es kein passendes HTML Element gibt, etwa Tabs oder ein Menü Button mit aria-expanded.

Wie teste ich Name, Rolle und Zustand 2026 automatisch?

Mit cypress-axe kannst du gezielt die axe Regeln laufen lassen, die fehlende Namen finden, etwa button-name, link-name oder aria-toggle-field-name. Zustände prüfst du mit eigenen Cypress Tests, die nach einem Klick aria-expanded oder aria-pressed abfragen. Einen Test mit echtem Screenreader ersetzt das 2026 nicht.

Was hat sich 2026 mit WCAG 2.2 an Kriterium 4.1.2 geändert?

Der Text von Kriterium 4.1.2 ist in WCAG 2.2 gleich geblieben. Weggefallen ist das Nachbarkriterium 4.1.1 Parsing, das als veraltet entfernt wurde. Für dich heißt das 2026: Name, Rolle und Zustand bleiben Pflicht, die Prüfung auf sauberes HTML Parsing ist kein eigenes Kriterium mehr.

Was ist der Accessibility Tree?

Der Accessibility Tree ist eine Sicht auf die Seite, die der Browser parallel zum DOM aufbaut. Er enthält für jedes relevante Element Name, Rolle, Zustand und Wert. Screenreader und andere Hilfsmittel lesen diesen Baum über Schnittstellen des Betriebssystems. In den DevTools von Chrome und Firefox kannst du ihn dir ansehen.

Was ist der Accessible Name?

Der Accessible Name ist der Name, den Hilfsmittel für ein Element ansagen. Der Browser berechnet ihn nach der W3C Spezifikation Accessible Name and Description Computation. Quellen sind unter anderem aria-labelledby, aria-label, das label Element, der alt Text oder der Inhalt eines Buttons. Die erste passende Quelle gewinnt.

Was ist der Unterschied zwischen Zustand und Eigenschaft?

Zustände ändern sich während der Nutzung, etwa aria-expanded, aria-pressed oder aria-checked. Eigenschaften bleiben meist gleich, etwa aria-controls oder aria-haspopup. Kriterium 4.1.2 verlangt, dass Änderungen an Zuständen an Hilfsmittel gemeldet werden können. Deshalb muss dein Script den Zustand bei jeder Änderung im Markup aktualisieren.

Reicht ein title Attribut als Name?

Nur als Notlösung. Das title Attribut steht in der Berechnung des Accessible Name ganz hinten und wird nur genutzt, wenn sonst nichts da ist. Der Tooltip erscheint nicht bei Tastatur oder Touch, und manche Hilfsmittel lesen ihn nicht zuverlässig vor. Sichtbarer Text oder ein Label sind die bessere Wahl.

Warum reicht ein div mit Klick Handler nicht?

Ein div hat keine Rolle, die Bedienung verrät, keinen Namen aus einem Label und keinen Platz in der Tab Reihenfolge. Ein Screenreader kündigt es nicht als Button an, die Tastatur erreicht es nicht. Ein echtes button Element bringt Rolle, Fokus und Bedienung mit Enter und Leertaste von selbst mit.

Muss der Name zum sichtbaren Text passen?

Ja, wenn das Element sichtbaren Text hat. Das Kriterium 2.5.3 Label in Name verlangt, dass der sichtbare Text im Accessible Name enthalten ist. Wer per Sprachsteuerung „Senden“ sagt, soll den Button mit der Aufschrift Senden auch treffen. Am besten beginnt der Name direkt mit dem sichtbaren Text.

Wie finde ich den Namen eines Elements heraus?

Am schnellsten über die DevTools deines Browsers. In Chrome und Firefox zeigt der Bereich Accessibility für jedes Element Name, Rolle und Zustände an. Das Werkzeug ANDI blendet den Accessible Name direkt auf der Seite ein. Für den echten Eindruck lohnt sich zusätzlich ein Durchlauf mit einem Screenreader.