BarrierLab

a11y-rules: Übernahme aus auditmysite

Belege, Abweichungen und nicht übernommene Prüfungen je Schritt der Regelmigration aus auditmysite.

Ab 0.14.0 zogen die Regeln von auditmysite schrittweise nach a11y-rules (casoon/barrierlab#13, auditmysite#690). Der Changelog nennt je Version die neuen Kennungen; hier steht je Schritt, was sie ersetzen, worauf sie sich stützen und wo sie bewusst von auditmysite abweichen.

Jeder Abschnitt gibt den Stand des genannten Release wieder. Spätere Änderungen an Urteil oder WCAG-Bezug, vor allem die Normative Zuordnung in 0.26.0, stehen im Changelog. Wo nicht anders vermerkt, setzt a11y-rules keine Obergrenze je Seite; auditmysite meldete je Regel höchstens 5, 10 oder 20 Befunde.

Die 48 echten Seiten, auf die sich die Belege ab 0.18.0 beziehen, sind auditmysites Referenzseiten und 40 verbreitete deutsche und internationale Seiten, abgerufen am 2026-10-03.

0.14.0: ARIA (B1)

Die ARIA-Regeln aus auditmysite (casoon/barrierlab#14, B1). Norm ist WAI-ARIA 1.2 und ARIA in HTML; die Rollen- und Attributtabellen sind aus der Spezifikation erzeugt, als Bitmasken je Rolle.

Neue Kennungen

Neue KennungTierersetzt in auditmysite
aria/attribute-unknown1aria-attr-name-invalid (aria_roles)
aria/attribute-value-invalid1aria-valid-attr-value (Wertebereiche)
aria/owns-conflict1duplicate-id-aria (parsing)
aria/tab-selected-missing1aria-tab-selected-state, tab-no-aria-selected (widget_rules)
aria/tabpanel-missing1aria-tablist-tabpanel (widget_rules)
aria/combobox-popup-missing1aria-combobox-options (widget_rules)
popover/target-missing, popover/target-invalid1modern-attribute-misuse (modern_attributes)
inert/dialog-inert1modern-attribute-misuse (active_surface_inert)
aria/attribute-not-allowed2aria-allowed-attr
aria/attribute-prohibited2aria-prohibited-attr
aria/required-parent-missing2aria-required-parent
aria/required-children-missing2aria-roles (erforderliche Bestandteile)

Die IDREF-Prüfung von aria-valid-attr-value übernimmt aria/reference-missing. aria/role-invalid und aria/role-abstract gab es schon; sie ersetzen die Rollenprüfung von aria-roles.

Kontext und Bestandteile werden am DOM geprüft, nicht am Accessibility-Tree: Ein <li> in <ul role="tablist"> ist nach ARIA in HTML ein listitem, auch wenn Chrome es zu generic glättet. Damit meldet der Fall aus auditmysite#715 (ul[role=tablist] > li > a[role=tab]) wie axe aria/required-children-missing an der Tabliste und aria/required-parent-missing an Tabs und Einträgen. generic, none/presentation und vom Host Ausgeblendetes sind durchlässig (<tbody> in Chrome, auditmysite#659); aria-owns zählt als Besitz.

Abweichungen

  • aria/attribute-not-allowed und aria/attribute-prohibited urteilen über die Rolle des Hosts, explizit oder implizit — auditmysite nur über explizite role-Angaben (bei prohibited zusätzlich div/span). <div aria-expanded> ist damit ein Befund. Dazu die „MUST NOT”-Fälle aus ARIA in HTML (aria-checked an nativer Checkbox/Radio, aria-valuemin/-max neben min/max, aria-placeholder neben placeholder, aria-disabled/-readonly/-required="false" neben dem nativen Attribut, abweichendes aria-colspan/-rowspan). Leere Werte zählen wie fehlende. Rollen außerhalb von ARIA 1.2 (browserinterne, mark) bleiben ohne Urteil.
  • aria/attribute-value-invalid meldet aria-current und aria-invalid nicht: ARIA 1.2 legt fest, dass ein unbekannter Wert dort als true gilt. Vergleich ohne Groß-/Kleinschreibung, leere Werte ohne Befund.
  • aria/required-children-missing prüft nur Behälter mit expliziter Rolle — native Tabellen und Listen geben ihre Bestandteile per HTML vor (auditmysite#659, #674). Die leere native Tabelle aus dem Korpus table_required_rows_tbody (nur <caption>) ist deshalb kein Befund mehr. Kein Befund ohne jeden besessenen Knoten, unter aria-busy="true" und bei aria-expanded="false".
  • aria/required-parent-missing lässt über ARIA 1.2 hinaus group für listitem (ARIA 1.1), combobox für option und radiogroup für menuitemradio zu. Stößt der Weg nach oben auf eine Rolle, die ARIA 1.2 nicht kennt, entsteht kein Befund.
  • aria/tab-selected-missing ist REVIEW (ARIA sagt SHOULD) und steht an der Tabliste, wenn kein Tab aria-selected="true" trägt — nicht an jedem Tab ohne das Attribut; die übrigen haben mit der Vorgabe false den richtigen Zustand.
  • aria/tabpanel-missing ist REVIEW: ARIA beschreibt das Panel nur als üblich.
  • aria/combobox-popup-missing stützt sich auf das MUST für aria-controls (ARIA 1.2); ein Popup im Teilbaum oder per aria-owns (ARIA 1.1) genügt weiterhin.
  • inert/dialog-inert ist FAIL nur für <dialog open>; role="dialog" wird REVIEW, sichtbare role="menu" gar nicht geprüft (ein aus dem Bild geschobenes Menü mit inert ist richtig gebaut).

Nicht übernommen

Aus modern_attributes: der fehlende Name offener Dialoge und Popover (gehört zur Namensprüfung von Dialogen) und „Fokus in einem inerten Teilbaum” (braucht das aktive Element, das kein Tier liefert).

0.15.0: Namen (B2)

Die Namensregeln aus auditmysite (casoon/barrierlab#15, B2). Norm sind WAI-ARIA 1.2 („Accessible Name Required”), accname 1.2, HTML-AAM und WCAG 2.5.3; alle in Tier 2.

Neue Kennungen

Neue KennungSchwereersetzt in auditmysite
names/required-missinghocharia-command-name (ohne button und a[href]), aria-input-field-name, aria-meter-name, aria-progressbar-name, aria-toggle-field-name, aria-treeitem-name (aria_naming_rules); aria-label „kein Name” (accessible_name)
names/symbol-onlymittelaria-label „Icon Only” (accessible_name)
dialog/name-missinghocharia-dialog-name (aria_naming_rules), dialog-name (dialog_rules)
dialog/modal-unmarkedmitteldialog-name „Dialog Modal” (dialog_rules)
summary/name-missinghochsummary-name (summary_name)
status/live-overriddenhoch (alert), mittel (status, log)aria-live-region-role (status_messages)
label-in-name/mismatchmittellabel-content-name-mismatch (label_in_name)

Unbenannte Buttons, Links (a[href]) und SVGs melden weiter buttons/name-missing, links/name-missing und svg/name-missing; names/required-missing meldet sie nicht noch einmal. Ein natives Formularfeld ganz ohne Beschriftung meldet forms/label-missing; names/required-missing nur, wenn eine Beschriftung behauptet wird, aber leer ausgeht (<label for> ohne Text).

Abweichungen

  • names/required-missing prüft menu und tab nicht (ARIA 1.2 verlangt dort keinen Namen) und keine native <option> (die leere Platzhalteroption eines <select> ist üblich; Chrome stellt sie nicht als option aus). Unbenannte, nicht fokussierbare Elemente sind ein Verstoß wie in aria_naming_rules, nicht die Warnung aus accessible_name.
  • dialog/name-missing meldet einen Fall, für den auditmysite zwei Kennungen hatte. Ein geschlossenes <dialog> (ohne open) wird nicht geprüft.
  • dialog/modal-unmarked ist REVIEW statt Verstoß (ARIA verlangt aria-modal nicht; ein nicht modaler Dialog trägt es zu Recht nicht) und prüft nur role="dialog": Ob ein natives <dialog> per showModal() geöffnet wurde, liefert kein Tier.
  • summary/name-missing meldet nur die <summary>, die ihr <details> bedient, nicht zusätzlich das <details>.
  • status/live-overridden ist ein Verstoß nur bei aria-live="off" (die Region wird dann nicht angesagt). Eine andere Dringlichkeit (alert mit polite, status mit assertive) ist REVIEW: ARIA erlaubt das Überschreiben, angesagt wird weiterhin. Implizite Rollen zählen mit (<output> ist status).
  • names/symbol-only ist REVIEW statt Verstoß — 4.1.2 verlangt einen Namen, über seine Güte sagt es nichts. Buchstaben zählen nach Unicode.
  • label-in-name/mismatch prüft alle Rollen mit Namen aus dem Inhalt (button, link, menuitem*, tab, checkbox, radio, switch, option, treeitem), deren Name aus aria-label oder aria-labelledby stammt — auditmysite nur button mit aria-label. Verglichen wird der berechnete Name, ohne Groß-/Kleinschreibung, Satzzeichen und Leerraum, mit Buchstaben nach Unicode. Wie in auditmysite: kein Befund, wenn der Name im sichtbaren Text steht; REVIEW, wenn der sichtbare Text mehr als doppelt so lang ist wie der Name (#513). Visuell versteckter Text (.sr-only) ist ohne Stile nicht erkennbar und zählt als sichtbar.

Nicht übernommen

Aus accessible_name: leeres aria-labelledby und aria-describedby an einem Element, das einen Namen hat — die übrigen Namensquellen greifen, es schadet nicht (wie schon bei aria/reference-missing). Ebenfalls noch nicht übernommen: description-duplicates-name (auditmysite#713). Dafür bräuchte a11y_dom::Semantics die Accessible Description, die es bisher nicht liefert.

0.16.0: Formulare (B3)

Die Formularregeln aus auditmysite (casoon/barrierlab#16, B3). Norm sind WCAG 2.2 (1.3.1, 1.3.5, 3.2.1, 3.2.2, 3.3.1, 3.3.2, 3.3.7, 3.3.8), der HTML-Standard („Autofill”, Formulareigentümer) und WAI-ARIA 1.2 (aria-invalid, aria-errormessage, aria-required). Kennungen: forms/* für Felder und Formulare, context/* für den Kontextwechsel bei Fokus und Eingabe, auth/* für die Anmeldung.

Neue Kennungen

Neue KennungTierUrteil, Schwereersetzt in auditmysite
forms/autocomplete-invalid1FAIL, niedrigautocomplete-valid „Invalid autocomplete value” (input_purpose)
forms/purpose-missing2REVIEW, mittelautocomplete-valid „lacks autocomplete” (input_purpose), identify-purpose (identify_purpose)
forms/error-unidentified1FAIL, mittelinput-error-message (form_rules), aria-invalid-without-describedby (error_identification)
forms/group-missing1FAIL, mittelform-field-group (form_rules, AX- und DOM-Teil)
forms/group-name-missing2FAIL, mittellabel „Form group has no legend or label” (instructions)
forms/required-unmarked2REVIEW, mittellabel „Required field not clearly indicated” (instructions), label „may not indicate required status” (form_rules)
forms/instructions-missing2REVIEW, niedriglabel „may require format instructions” (instructions)
forms/title-only-label2REVIEW, mittellabel-title-only (label_title_only)
forms/no-submit1FAIL, mittel; REVIEW, niedrig ohne action und Textfeldform-no-submit (form_rules)
forms/redundant-entry1REVIEW, mittelredundant-entry (redundant_entry)
context/on-input1FAIL, mittel; REVIEW, niedriginput-no-context-change, Inline-onchange (on_input)
context/on-focus1REVIEW, hochfocus-no-context-change „onfocus” (on_focus)
context/autofocus1REVIEW, mittelfocus-no-context-change „autofocus” (on_focus)
auth/captcha1REVIEW, mittelaccessible-auth-captcha (accessible_authentication)

Mitgebrachte Korrekturen

Als Tests in tests/forms.rs: auditmysite#643 (Anleitung per aria-describedby zählt gleich welchen Wortlauts; kurze Formatbegriffe nur als ganzes Wort; ein einzelnes Kontrollkästchen ist keine Gruppe, gleichnamige im selben Formular schon), #656 (native Datumsfelder, Zahlenfelder nur über die Beschriftung), #658 (der Name eines Dings ist kein Personenname, auch über id und name), #728 (Formular nur aus Schaltern: REVIEW, niedrig).

Bleibt im Host

Der Einfüge-Test an Passwort- und Einmalcode-Feldern (accessible-auth-paste-blocked), das Nachschlagen aufgerufener Funktionen über window und die Namensvermutung („Language”) aus on_input.

Nicht übernommen

Weil schon abgedeckt: label „no accessible label” und „Placeholder used as only label” (instructions) sowie labels.rs check_form_control — forms/label-missing, forms/placeholder-as-label und names/required-missing melden dieselben Fälle, auch ARIA-Widgets ohne Namen, leeres oder ins Leere zeigendes aria-labelledby und leeres <label for>. Ebenso der seitenweite UNTESTED-Vermerk aus identify_purpose (1.3.6 für Symbole und Bereiche).

Abweichungen

  • forms/autocomplete-invalid prüft die ganze Grammatik des HTML-Standards ([section-*] [shipping|billing] [Kontakt] Feldname [webauthn]), nicht nur das letzte Token, mit der vollständigen Liste der Feldnamen. Geprüft werden input (außer hidden), select und textarea.
  • forms/purpose-missing ist REVIEW statt Verstoß: Ob ein Feld die Person betrifft, ist aus Beschriftung, id und name geraten. Ein Fall statt zwei (identify-purpose meldete dieselben Felder nach id/name, niedrig). Die Beschriftung ist der Accessible Name des Hosts; email- und tel-Felder zählen immer. Technische Adressen (ip_address) zählen nicht.
  • forms/error-unidentified meldet einen Fall, den auditmysite zweimal meldete. Als Beschreibung zählen aria-describedby und aria-errormessage mit Text; ein Ziel außerhalb der Sicht (versteckt oder fehlend — das meldet aria/reference-missing) gilt als Beschreibung.
  • forms/group-missing prüft auf Struktur: Als Gruppe zählen <fieldset>, <details> und role="group"/"radiogroup" als Vorfahre.
  • forms/required-unmarked ist REVIEW statt Verstoß und meldet den Fall einmal (auditmysite: zweimal, niedrig und mittel): Der Screenreader sagt das Pflichtfeld an; ob es sichtbar gekennzeichnet ist, sieht nur ein Mensch.
  • forms/title-only-label ist REVIEW statt Verstoß: title ist eine zulässige Technik (H65). Felder mit placeholder meldet forms/placeholder-as-label.
  • forms/group-name-missing meldet kein radiogroup (das tut names/required-missing).
  • forms/no-submit zählt Felder und Buttons, die per form-Attribut außerhalb des Formulars stehen.
  • context/on-input liest nur den Handler im Markup; ruft er eine Funktion auf, bleibt es REVIEW. Neu: auch Optionsfelder mit onchange (F37).
  • context/on-focus und context/autofocus sind REVIEW statt Verstoß: Ob ein onfocus den Kontext wechselt, steht nicht im Markup, und autofocus wechselt ihn für sich genommen nicht. Schweregrade unverändert.

0.17.0: Landmarks, Tastatur, Struktur (B4)

Die Landmark-, Tastatur- und Strukturregeln aus auditmysite (casoon/barrierlab#17, B4). Norm sind WAI-ARIA 1.2 (Landmark-Rollen, aria-activedescendant), HTML-AAM (header, footer, aside, section, form) und WCAG 2.2 (1.3.1, 2.1.1, 2.4.1, 2.4.3, 4.1.2). Alle neuen Regeln außer headings/none sind Tier 2: Ob <form> und <section> Landmarks sind, hängt an ihrem Accessible Name, ob ein Element interaktiv ist, an seiner Rolle. Die Landmark-Rolle bestimmt die Regel selbst aus dem Markup, nicht aus der Rolle des Hosts — accname und ältere Chrome-Fassungen geben einem <header> in <main> noch banner.

Neue Kennungen

Neue KennungTierUrteil, Schwereersetzt in auditmysite
landmarks/not-unique2REVIEW, mittellandmark-unique (landmark_granular)
landmarks/not-top-level2FAIL, mittellandmark-banner-is-top-level, landmark-contentinfo-is-top-level, landmark-main-is-top-level (landmark_granular)
landmarks/banner-duplicate2FAIL, mittellandmark-no-duplicate-banner (landmark_granular)
landmarks/contentinfo-duplicate2FAIL, mittellandmark-no-duplicate-contentinfo (landmark_granular)
landmarks/content-outside2FAIL, mittelregion (region)
headings/none1FAIL, mittel; REVIEW, niedrig hinter offenem Dialogbypass „No headings found” (bypass_blocks)
keyboard/focusable-no-role2REVIEW, niedrigfocusable-no-role (keyboard)
keyboard/interactive-not-focusable2REVIEW, hochkeyboard „appears not keyboard-focusable” (keyboard)
dialog/focusable-missing2FAIL, mittel (2.4.3)dialog-no-focusable (patterns/modal_dialog)
patterns/accordion-controls-missing2REVIEW, niedrigaccordion-no-controls (patterns/accordion)

Mitgebrachte Korrekturen

Als Tests in tests/landmarks.rs: auditmysite#639 (<header>/<footer> in main, article oder unter role="main" sind keine banner/contentinfo), #642 (Sprunglink am Ziel erkannt, nicht am Text), #709 (keine Überschriften hinter offenem Dialog: Hinweis), #727 (unbenanntes <form>/<section> ist keine Landmark — weder für die Eindeutigkeit noch als umgebende Landmark). #638 und #644 betreffen Tabellen und redundant-role, keine Regel dieses Schritts.

Bleibt im Host

keyboard-trap (2.1.2) — der Hinweis je modalem Dialog und der seitenweite UNTESTED-Vermerk brauchen echte Tastaturbedienung. Aus patterns/ die Mustererkennung und die Journeys, dazu accordion-trigger-not-button und aria-expanded-required (siehe unten).

Nicht übernommen

  • accordion-trigger-not-button — an Rollen, die aria-expanded nicht unterstützen, meldet das schon aria/attribute-not-allowed; an Rollen, die es unterstützen (link, menuitem, tab, treeitem, …), erlaubt WAI-ARIA 1.2 den Zustand ausdrücklich, und fehlender Fokus fällt unter keyboard/interactive-not-focusable.
  • aria-expanded-required — rät eine Aufklappnavigation aus dem Wort „menu”/„Menü” im Namen; sprachabhängig wie der Fehler aus #642, ohne Norm dahinter.
  • tab-no-aria-selected und aria-dialog-name liefen schon als aria/tab-selected-missing und dialog/name-missing (B1, B2), fehlende main- und banner-Landmark sowie doppelte main schon als landmarks/main-missing, landmarks/banner-missing und landmarks/main-duplicate (B0).

Abweichungen

  • landmarks/not-unique ist REVIEW statt Verstoß: WAI-ARIA 1.2 und die APG verlangen unterscheidbare Namen nur als SHOULD, WCAG 1.3.1 setzt keine an Landmarks voraus. Wie in auditmysite zählen gleich benannte und gleich unbenannte Landmarks; mehrere main, banner oder contentinfo melden also zusätzlich zu ihrem Duplikatbefund.
  • <aside> in article, aside, nav oder section ist nur mit Namen complementary (HTML-AAM).
  • landmarks/banner-duplicate und landmarks/contentinfo-duplicate zeigen wie landmarks/main-duplicate auf die zweite Landmark, auditmysite auf die erste.
  • landmarks/content-outside meldet das äußerste Element ohne Landmark darin, einmal je Block (wie axe region), nicht jeden Textknoten und jedes benannte Element einzeln. Steht Text unmittelbar neben einer Landmark, trägt der umgebende Container den Befund. Die Befundzahl je Seite sinkt damit.
  • keyboard/focusable-no-role zählt nur die Tabfolge (tabindex ≥ 0): tabindex="-1", etwa am Ziel eines Sprunglinks, erreicht niemand per Tab. Ein benannter Bereich (region) mit tabindex="0" ist das empfohlene Muster für scrollbare Bereiche und zählt nicht.
  • keyboard/interactive-not-focusable nimmt deaktivierte Felder, native <option> (Chrome führt sie nicht als option), Elemente unter aria-activedescendant und Inertes aus. Fokussierbar heißt wie Chrome focusable: nativ oder mit irgendeinem tabindex, auch -1 (Tabs mit rovingem tabindex).
  • dialog/focusable-missing sucht in allen Nachfahren, auditmysite nur in den direkten Kindern. Ein geschlossenes <dialog> zählt nicht.
  • patterns/accordion-controls-missing ist REVIEW statt Verstoß: WAI-ARIA 1.2 verlangt aria-controls am Button nicht, die APG nennt es beim Disclosure-Muster optional. Ausgenommen wie in auditmysite: zugeklappte Buttons, <summary> und Buttons in navigation/banner.
  • headings/none zählt auch role="heading"; versteckte Überschriften zählen nicht.

Die Links- und Zeigerregeln aus auditmysite (casoon/barrierlab#18, B5). Norm sind WCAG 2.2 (2.1.1, 2.4.8, 4.1.2), der HTML-Standard (<a> ohne href ist ein Platzhalter, kein Link) und WAI-ARIA 1.2 (aria-current). Alle drei Regeln sind Tier 1: Sie lesen nur Attribute.

Neue Kennungen

Neue KennungTierUrteil, Schwereersetzt in auditmysite
keyboard/click-handler-not-focusable1FAIL, hoch (2.1.1)click-events-have-key-events (click_handlers)
links/used-as-button1FAIL, niedrig (4.1.2)link-as-button (fake_navigation_link)
navigation/location-missing1REVIEW, niedrig (2.4.8, AAA)location (location)

Belege

Der auditmysite-Korpus (keyboard_and_targets, audit_exclude_cap) und die 48 echten Seiten. Dort fand links/used-as-button den Aufruf der Consent-Einstellungen (<a href="#" onclick="UC_UI_recall();">, wetter.com) und einen Neu-laden-Link (craigslist.org), keyboard/click-handler-not-focusable nichts — wetter.com hängt Handler über data-onclick an, das kein Handler ist. navigation/location-missing meldet auf 30 der 48 Seiten, fast alle davon Startseiten; daher REVIEW.

Nicht übernommen

pointer_cancellation (2.5.2): Der statische Teil sucht onmousedown und ontouchstart an Bedienelementen. Auf keiner der 48 Seiten und in keinem Korpusfall kam das vor — ohne Beleg kommt die Regel nicht hinein. Der seitenweite UNTESTED-Vermerk gehört zur manuellen Checkliste (casoon/barrierlab#39).

Abweichungen

  • <a onclick> ohne href meldet keyboard/click-handler-not-focusable, nicht links/used-as-button: Ohne href ist das Element kein Link, wird nicht als Link angesagt und ist nicht fokussierbar. auditmysite meldet es als Scheinlink.
  • navigation/location-missing ist REVIEW statt Verstoß: 2.4.8 lässt sich auch mit Titel, Überschriften oder einer Sitemap erfüllen. aria-current="true" zählt wie in auditmysite nicht als Ortsangabe — auf t-online.de markiert es Karussellpunkte.

0.18.0: Bilder und Medien (B6)

Die Bild- und Medienregeln aus auditmysite (casoon/barrierlab#19, B6). Norm sind WCAG 2.2 (1.1.1, 1.4.2, 2.4.1, 4.1.2) und der HTML-Standard (<area>, <input type="image">, <object>, ismap, <iframe>). Fünf Regeln lesen nur Attribute und Text und sind Tier 1; frames/name-missing braucht die Namensberechnung (aria-labelledby) und ist Tier 2.

Neue Kennungen

Neue KennungTierUrteil, Schwereersetzt in auditmysite
images/area-alt-missing1FAIL, hoch (1.1.1)area-alt (image_input_rules)
images/input-alt-missing1FAIL, hoch (1.1.1)input-image-alt (image_input_rules)
objects/alt-missing1FAIL, hoch (1.1.1)object-alt (image_input_rules)
images/server-side-map1FAIL, mittel (1.1.1)server-side-image-map (server_side_image_map)
media/audio-autoplay1REVIEW, mittel (1.4.2)background-audio (background_audio)
frames/name-missing2FAIL, hoch (2.4.1, 4.1.2)frame-title (media_rules)

Belege

Der auditmysite-Korpus (misc_content_checks, forms_and_misc, object_no_alt, media_and_visual, frame_missing_title) und die 48 echten Seiten. Dort meldet nur frames/name-missing: die drei Sportdaten-Rahmen auf n-tv.de mit title="". Den Sportdaten-Rahmen auf spiegel.de (ohne title) setzt Alpine erst im Browser aus einem <template> ein; er steht als Fall in den Tests. <area>, <input type="image">, <object>, ismap und <audio autoplay> kommen auf keiner der 48 Seiten vor — die Belege dafür sind die Korpusfälle.

Die Plattformliste für manual/media-alternatives (YouTube, Vimeo, Dailymotion, Wistia) stammt aus auditmysites video-caption. Ob ein solches Video Untertitel hat, steuert der Player der Plattform. Beleg: das YouTube-Video auf w3.org/WAI, das bisher keinen Checklistenpunkt auslöste.

Nicht übernommen

  • media-alt (media_alternative, 1.2.8): meldet auf jeder Seite einen UNTESTED-Hinweis, auch ohne Medien. Wo Medien sind, sagt manual/media-alternatives dasselbe (Transkript, Audiodeskription); ohne Medien gibt es nichts zu prüfen. Hosts bilden media-alt auf manual/media-alternatives ab.
  • video-caption (media_rules, 1.2.2): ohne geprüfte Untertiteldatei bleibt es beim UNTESTED-Hinweis, und den gibt manual/media-alternatives. Ob eine <track>-Datei tatsächlich lädt, prüft nur der Host über das Netz; dieser Teil bleibt in auditmysite, ebenso frame-tested (ob ein Rahmen fremd ist, weiß nur der Browser).
  • role="application" ohne Namen (media_rules): kein Beleg — weder im Korpus noch auf den 48 Seiten ein unbenanntes.
  • role="img" ohne Namen (media_rules): SVGs deckt svg/name-missing, <img> deckt images/alt-missing; ein unbenanntes anderes Element mit role="img" kommt weder im Korpus noch auf den 48 Seiten vor.
  • Benanntes dekoratives Element (media_rules): aria-label an role="presentation"/"none" meldet schon aria/attribute-prohibited. Die einzigen Fälle auf den 48 Seiten (wikipedia.org, title an role="presentation") tragen aria-hidden="true" und stehen nicht im Accessibility-Tree.
  • <embed> aus object-alt: kein Beleg.

Abweichungen

  • aria-labelledby zählt an <area>, <input type="image"> und <object> als Alternative, aria-label auch an <area>. auditmysite kennt an <area> nur alt und sonst nur aria-label.
  • media/audio-autoplay ist REVIEW und führt 1.4.2 statt 1.4.7: Ob der Ton länger als drei Sekunden läuft und sich anhalten lässt, steht nicht im Markup; selbststartender Ton ist Gegenstand von 1.4.2 (Audio Control), 1.4.7 betrifft Hintergrundgeräusche unter Sprache.
  • frames/name-missing führt 2.4.1 und 4.1.2 (Technik H64), auditmysite nur 2.4.1. Ohne berechnete Stile gilt ein Rahmen mit Inline-display: none als unsichtbar (craigslist.org), dazu wie in auditmysite einer mit Breite und Höhe 0 oder 1 (duckduckgo.com). Mit Stilen (Tier 3) nimmt die Sicht versteckte Rahmen ohnehin heraus; die Prüfung auf ≤ 1 px gerenderte Größe bleibt beim Host.

0.18.0: Darstellungskonvention (#22)

Die statischen Regeln der Darstellungskonvention (casoon/barrierlab#22, Entwurf v0): figure[data-viz] mit Text-, Standbild- und Live-Schicht, html[data-display] mit Umschalter. Die Konvention steht auf der Seite Darstellungsmodi.

Entscheidung zum Paket: a11y-rules, nicht web-checks. Die Regeln brauchen den DOM — Vorfahren, Nachfahren, Verweise per aria-describedby — und lesen dabei nur Attribute und Struktur; alle sieben sind Tier 1 (Modul viz). Sie melden nur auf Seiten, die die Konvention benutzen, tragen das Schlagwort best-practice und hängen wie in auditmysite am nächsten WCAG-Kriterium. Die Kennungen display/* sind dieselben wie in auditmysite (src/wcag/rules/display_modes.rs); der dort gemessene Teil (berechnete Sichtbarkeit, Zeitpunkt von data-display, Textmodus) bleibt dort.

Neue Kennungen

Neue KennungTierUrteil, Schwerein auditmysite
viz/text-missing1FAIL, hoch (1.1.1)— (display/text-not-visible misst den Textmodus)
display/text-hidden1FAIL, hoch; REVIEW, niedrig bei Verweis per aria-describedby/aria-details (1.1.1)display/text-hidden, Attribut-Teil
viz/caption-missing1FAIL, niedrig (1.1.1)—
viz/static-missing1FAIL, mittel (2.2.2)—
viz/table-missing1REVIEW, niedrig (1.3.1)—
display/toggle-missing1FAIL, mittel (2.2.2)display/toggle-missing, statischer Teil
display/init-missing1REVIEW, niedrig (2.2.2)display/init-missing, statischer Teil

Belege

Die gebauten Seiten der Referenzumsetzung Geographia (371 Seiten, web-geographia/apps/*/dist, Stand 2026-10-03). viz/text-missing meldet die Startseite, die ihre Diagramme in .viz-desc ohne [data-viz-text] beschreibt, und „Build Earth 2.0” (space/solar-system/settlement/), das auch viz/static-missing auslöst; viz/caption-missing die Klima-Monitor- und Deutschlandkarten ohne <figcaption>; display/toggle-missing die Laborseiten ohne Kopfzeile; viz/table-missing 196 Diagramme, vor allem Sparklines. display/text-hidden folgt dem Fall aus auditmysite#704 (div#layers-home-desc auf geographia.eu/atmosphere/) samt den dort festgehaltenen Testfällen; im heutigen Build blendet Geographia nur visuell aus. display/init-missing meldet dort nichts. Auf den 48 echten Seiten ohne Konvention meldet keine der sieben Regeln.

Grenzen und nicht übernommen

  • Die Kernaussage wird nur auf „nicht leer” geprüft, nicht auf Qualität.
  • viz/orphan-media aus dem Entwurf (canvas, video, svg[role=img] außerhalb der Konvention) ist nicht aufgenommen: In Geographia steht jedes solche Medium in [data-viz] oder unter aria-hidden, ein echter Positivfall fehlt.
  • display/init-missing kann nur die Abwesenheit feststellen; ob ein vorhandenes Skript den Modus setzt, zeigt erst die laufende Seite.

Abweichungen

  • viz/* gibt es in auditmysite nicht; dort prüft display/text-not-visible den Text erst im gerenderten Textmodus.
  • Ist die figure selbst per hidden ausgeblendet, meldet display/text-hidden nichts (wie auditmysite#725); aria-hidden oder inert an der figure dagegen bleiben ein Befund, weil die Grafik dann sichtbar ist.

0.18.0: Tabellen, Dokument, Sprache, Rollen (B7)

Die Tabellen-, Dokument-, Sprach- und Rollenregeln aus auditmysite (casoon/barrierlab#20, B7). Norm sind WCAG 2.2 (1.3.1, 1.4.13, 2.2.1, 2.4.10, 3.1.1, 3.1.2, 3.1.4, 4.1.2), der HTML-Standard (headers, lang/xml:lang, „shared declarative refresh steps”), ARIA in HTML (überflüssige Rollen) und WAI-ARIA 1.2. Alle Regeln sind Tier 1: Sie lesen Tags, Attribute und Text.

Neue Kennungen

Neue KennungTierUrteil, Schwereersetzt in auditmysite
tables/header-without-data1FAIL, hoch (1.3.1)th-has-data-cells (table_extended)
tables/data-undetermined1UNTESTED, hoch (1.3.1)th-has-data-cells, incomplete (table_extended)
tables/headers-attr-invalid1FAIL, hoch (1.3.1)td-headers-attr (table_extended)
document/lang-mismatch1FAIL, mittel (3.1.1)html-xml-lang-mismatch (language_extended)
language/part-unmarked1REVIEW, mittel (3.1.2)language-of-parts (language_of_parts)
language/part-undetermined1UNTESTED, mittel (3.1.2)— (auditmysite schweigt auf anderen Sprachen)
language/abbreviation-unexpanded1REVIEW, niedrig (3.1.4, AAA)abbreviations (abbreviations)
timing/meta-refresh1FAIL, hoch (2.2.1)meta-refresh (timing_adjustable)
headings/section-without-heading1REVIEW, niedrig (2.4.10, AAA)heading-order (section_headings, Abschnittszählung)
aria/role-redundant1FAIL, niedrig (4.1.2)redundant-role (redundant_role)
names/title-only1REVIEW, mittel (4.1.2)title-only-description (content_on_hover)
patterns/tooltip-unreferenced1FAIL, niedrig (1.4.13)content-on-hover-focus (content_on_hover)

Belege

Der auditmysite-Korpus und die 48 echten Seiten. Treffer dort:

  • aria/role-redundant: 251 Befunde auf 5 Seiten — wetter.com 188 (li[role=menuitem] > a[href][role=link]), lidl.de 39 und sparkasse.de 16 (a[href][role=link]), bahn.de und spiegel.de je 4 (button[role=button] als Akkordeon-Auslöser). Dazu Korpus redundant_role_list_style.
  • names/title-only: 200 Befunde auf 10 Seiten — spiegel.de 163 (Teaser-Links um ein Bild mit leerem alt), focus.de 16 (Symbol-Links), bahn.de 7 (Suchknöpfe), dazu heise.de, tagesschau.de, faz.net, sueddeutsche.de, check24.de, zeit.de und basf.com. Dazu Korpus name_description_best_practice.
  • headings/section-without-heading: ein Hinweis auf 7 Seiten, fast nur Teaser-Karten als <article> (t-online.de 61, faz.net 39, bild.de 25, check24.de 20, basf.com 15, web.de 4, spiegel.de 1).
  • Auf keiner der 48 Seiten, belegt im Korpus: tables/header-without-data (table_headers_no_data, table_grid_rows_unrendered), tables/headers-attr-invalid (forms_extended), document/lang-mismatch und language/abbreviation-unexpanded (misc_content_checks), language/part-unmarked (text_and_layout), timing/meta-refresh (meta_refresh_present), patterns/tooltip-unreferenced (forms_and_misc). Der einzige Treffer von language/part-unmarked auf echten Seiten war ein Fehlalarm und ist behoben (eingebettetes CSS, siehe Abweichungen).

Mitgebrachte Korrekturen

Aus auditmysite, je als Test:

  • auditmysite#638: leere Datenzellen, Zellen mit aria-hidden-Kind und ein Spaltenkopf über Zeilenköpfen sind kein „Kopf ohne Daten” (korpus_table_headers_tbody_ignored_issue_638, spaltenkopf_ueber_zeilenkoepfen_barrierlab_eu_issue_638).
  • auditmysite#639: die Tabelle im Kapitel mit <header> im Artikel (tabelle_im_kapitel_geographia_issue_639; der Landmark-Teil steht seit B4 in tests/landmarks.rs).
  • auditmysite#654: Ein noch nicht dargestellter Zeilenvorrat ist tables/data-undetermined, nicht FAIL (korpus_table_grid_rows_unrendered_issue_654, native_tabelle_mit_koerper_issue_654).
  • auditmysite#659: tbody > tr mit Zeilenkopf und Datenzelle (korpus_table_required_rows_tbody_issue_659; die Rollenregel steht seit B1 in tests/aria.rs).
  • auditmysite#644: role="list" auf <ul>/<ol> wird nicht gemeldet (korpus_redundant_role_list_style_issue_644).

Nicht übernommen

  • presentation-semantic-children (info_relationships): Nach WAI-ARIA 1.2 nimmt role="presentation"/"none" nur dem Element selbst die Semantik; Nachfahren behalten ihre, außer den erforderlichen Bestandteilen von Tabellen und Listen. Den Tabellenfall meldet schon tables/presentational-with-headers, F92 betrifft das Element selbst. Auf den 48 Seiten hätte die Regel 187 <li role="none"> um Menülinks gemeldet (t-online.de: das APG-Muster Menüleiste) — durchweg Fehlalarme.
  • section_headings, Lücken in der Gliederung: meldet schon headings/skip-level.
  • section_headings, „mehr als 10 Absätze, weniger als 3 Überschriften”: kein Beleg — auf keiner der 48 Seiten, in keinem Korpusfall.
  • timing_adjustable: Der seitenweite UNTESTED-Vermerk für Skript-Fristen und timeouts (2.2.6) gehören zur Checkliste (manual/timing).
  • redundant_role für <ul>/<ol> mit role="list": Ob die Rolle überflüssig ist, hängt am berechneten list-style-type (auditmysite#644), und ComputedStyle in a11y-dom hatte dieses Feld in 0.18.0 nicht. Bis es das gab, wurde das Paar nicht geprüft statt geraten; aria/role-redundant sagt über Listen nichts aus. auditmysite meldete ol#numbered-list im Korpus mit Stil weiterhin selbst, bis a11y-dom das Feld lieferte (seit 0.20.0, siehe unten).

Abweichungen

  • tables/data-undetermined erkennt ausstehende Zeilen an einer Zeilengruppe ohne Zeile in der Sicht — auch am leeren <tbody> im Markup, das auf seine Daten wartet. Ist die ganze Zeilengruppe ausgeblendet, fehlt sie in der Sicht, und die Kopfzellen melden FAIL.
  • tables/headers-attr-invalid prüft nur Zellen (td, th und ihre Rollen); nur dort definiert HTML das Attribut.
  • language/part-unmarked meldet den innersten Textblock (<li><p> einmal), lässt <script>, <style> und <template> aus — auf sparkasse.de las sich das eingebettete CSS sonst als Englisch — und meldet auf Seiten, die weder Deutsch noch Englisch sind, language/part-undetermined statt nichts.
  • language/abbreviation-unexpanded ist REVIEW statt Verstoß: 3.1.4 lässt sich auch mit der Ausschreibung im Text oder einem Glossar erfüllen. Ein leeres title zählt als fehlend.
  • timing/meta-refresh meldet 0 s nicht: Eine sofortige Weiterleitung ist keine Frist (H76, axe meta-refresh); web.de und gmx.net leiten so ohne JavaScript weiter. Eine Anweisung ohne Ziffern führt der Browser nicht aus.
  • headings/section-without-heading zählt Artikel und benannte Abschnitte ohne eigene Überschrift, ohne Navigationen, statt alle Abschnitte gegen alle Überschriften der Seite; REVIEW statt Verstoß.
  • aria/role-redundant meldet <li role="listitem"> nur in einer Liste ohne eigene Rolle: In ul[role=list] gehört es zur selben WebKit-Abhilfe (lidl.de).
  • names/title-only ist REVIEW statt Verstoß, wie forms/title-only-label: title ist eine gültige Namensquelle (H65). Textfelder meldet forms/title-only-label; submit und reset haben einen Vorgabenamen.
  • patterns/tooltip-unreferenced lässt neben aria-describedby auch aria-labelledby als Verweis gelten.

0.19.0: Stylesheets (#21, erster Teil)

Die Regeln über Stylesheets aus auditmysite (casoon/barrierlab#21, erster Teil). Dort las JavaScript document.styleSheets; hier kommen die Sheets als Text herein, geparst vom Paket stylesheet-parse. Norm sind WCAG 2.2 (1.3.4, 1.4.8, 2.3.3, 2.4.7), CSS Syntax Level 3 und Selectors Level 4.

Neue Kennungen

Neue KennungUrteil, Schwereersetzt in auditmysite
focus/outline-removedFAIL, hoch (2.4.7)focus-visible-outline-none (focus_visible_css)
motion/reduced-motion-ignoredREVIEW, mittel (2.3.3, AAA)prefers-reduced-motion (reduced_motion)
orientation/content-hiddenREVIEW, mittel; hoch für html/body/main (1.3.4)css-orientation-lock (orientation), Stylesheet-Teil
text/justifiedREVIEW, niedrig (1.4.8, AAA)visual-presentation (visual_presentation), Blocksatz
text/line-height-tightREVIEW, niedrig (1.4.8, AAA)visual-presentation, Zeilenabstand

Der Selektor-Abgleich gegen das Dokument (Teilmenge von Selectors Level 4, dreiwertig: Treffer, kein Treffer, unbekannt) sorgt dafür, dass nur zählt, was auf der Seite vorkommt — wie querySelectorAll in auditmysite (#712).

Belege

Der auditmysite-Korpus (media_and_motion, reduced_motion_transform, reduced_motion_override, text_and_layout) und die Stylesheets der 48 echten Seiten (337 Sheets, 24 MB, Abruf 2026-10-03). Auf ihnen meldet motion/reduced-motion-ignored 30 Seiten, text/line-height-tight 21 (etwa gov.uk mit 1,32 im Fließtext), focus/outline-removed, orientation/content-hidden und text/justified keine.

Abweichungen

  • focus/outline-removed: Ein in einer :focus-Regel wieder gesetzter Rahmen zählt als Ersatz. sueddeutsche.de entfernt ihn für alle und setzt ihn für die Tastatur wieder ([data-whatintent='keyboard'] *:focus); auditmysite meldete das als Verstoß.
  • orientation/content-hidden ist REVIEW statt Verstoß und meldet nur Selektoren, die ein Element der Seite treffen, ohne Pseudo-Elemente. In auditmysites Form schlug die Regel auf vier der 48 Seiten an: zweimal Breakpoint-Marker (body:before, zwei Seiten von bundesregierung.de), ein Schließknopf (n-tv.de) und welt.de. Der echte Fall, ein Dialog, der im Querformat „bitte drehen” zeigt (welt.de), ist erst mit geöffnetem Dialog im Dokument. Die Prüfung von transform: rotate am berechneten Stil von body/html bleibt beim Host.
  • text/*: Gemessen wird an den <p> der Seite, nicht an Selektoren, die mit body, p, div … beginnen. Sonst meldete html { line-height: 1.15 } aus normalize.css jede Seite. Zeilenhöhe nur ohne Einheit, in em oder %. REVIEW statt Verstoß; der UNTESTED-Vermerk für Farbwahl und Spaltenbreite gehört zur Checkliste.
  • motion/reduced-motion-ignored: eine Meldung je Seite wie in auditmysite, aber REVIEW statt Verstoß. Eine allein stehende transition-duration ist kein Übergang (Tailwind .duration-200).

Danach noch offen

list-style-type (für redundant_role an Listen), Linkfarbe gegen Textfarbe (use_of_color), Scroll-Ausmaße (scrollable_region) und non_text_contrast_css. Sie brauchten neue Felder in ComputedStyle/Layout, die erst ein Host-Lauf gefüllt sehen musste (auditmysite#698). Die ersten drei kamen mit 0.20.0, non_text_contrast_css mit 0.23.0.

0.20.0: Darstellungswerte (#21, zweiter Teil)

Der zweite Teil von casoon/barrierlab#21: drei Regeln aus auditmysite, die gemessene Darstellungswerte brauchen. Norm sind WCAG 2.2 (1.4.1, 2.1.1, 4.1.2) und ARIA in HTML. Alle drei sind Tier 3 und urteilen mit FAIL — was sie lesen, ist gemessen, nicht vermutet. Liefert der Host ein Feld nicht, steht je Regel und Seite ein UNTESTED im Bericht, kein stiller Nicht-Befund.

Neue Kennungen

Neue KennungUrteil, Schwerebrauchtersetzt in auditmysite
lists/role-redundantFAIL, niedrig (4.1.2)ComputedStyle::list_style_typeredundant-role für <ul>/<ol> (redundant_role)
color/link-indistinctFAIL, mittel (1.4.1)text_decoration_line, font_style, font_family, border_bottom_stylelink-in-text-block (use_of_color)
keyboard/scrollable-region-not-focusableFAIL, hoch (2.1.1)Rendering::scroll_overflow_pxscrollable-region-focusable (scrollable_region)

Belege

Belege und mitgebrachte Korrekturen aus dem auditmysite-Korpus (tests/darstellung.rs): redundant_role_list_style (#644: role="list" bei list-style: none ist nicht überflüssig), link_in_text_block_context (#710: nur Links im Fließtext; Navigation, Logo, Listen aus nur einem Link und Fußzeilen mit Trennern zählen nicht), scrollable_region_focusable (#717: gov.si div.menus; Bereich mit tabindex, mit Link darin, mit overflow: hidden oder ohne Überhang bestehen; Puffer 13 px wie axe).

Die neuen Felder hat auditmysite (casoon/auditmysite#698) vor dem Release gegen den unveröffentlichten Stand gefüllt gesehen: auf gov.uk, bundesregierung.de, wetter.com, n-tv.de und spiegel.de jeweils an allen dargestellten Elementen, Farben und Hintergrund dort etwas seltener (Verlauf, Hintergrundbild, transparente Textfüllung). Die drei Korpusfälle melden wie erwartet.

Abweichungen

  • color/link-indistinct vergleicht wie auditmysite Unterstreichung, Gewicht, Schnitt, Schrift, Unterkante und Hintergrund mit dem Elternelement. Der Hintergrund ist hier der effektive, den der Host über die Vorfahren auflöst (ComputedStyle::background_color), nicht der eigene des Elements.
  • keyboard/scrollable-region-not-focusable prüft nicht selbst, ob Inhalt sichtbar ist — das übernimmt die Sicht der Regel (versteckte Teilbäume fehlen darin).

0.21.0: Kontrast (#47)

Kontrast und Layout nach dem Vergleich mit auditmysites eigener Kontrastregel (casoon/barrierlab#47, casoon/auditmysite#698).

Neue Kennungen

Neue KennungUrteil, SchwereNorm
contrast/text-enhancedFAIL, mittelWCAG 1.4.6 (AAA): 7:1, bei großem Text 4,5:1

Gemeldet wird nur, was 1.4.3 besteht; was schon dort verfehlt, steht nicht doppelt. Beleg: die Linkfarbe von gov.uk, #1d70b8 auf Weiß, 5,17:1.

Belege

Vor dem Release hat auditmysite (casoon/auditmysite#698) die neuen Eingaben in echten Läufen gefüllt: visually_hidden und obscured auf gov.uk, bundesregierung.de, wetter.com, n-tv.de und spiegel.de (der Suchknopf von gov.uk als verborgen erkannt), sampled_backdrop auf berlin.de und in den Bild-Fixtures, die damit ihre bisherigen Urteile behalten.

  • Kontrast über Bildern und Verläufen urteilt wie auditmysite vor der Umstellung. Belege: auditmysites tests/fixtures/image_contrast.html (dunkler Verlauf besteht, heller verfehlt, geteilter ist Hinweis).
  • Optisch verborgener Text: gov.uk, button.gem-c-search__submit, „Search GOV.UK” per text-indent: -5000px versteckt, bisher FAIL 3,91:1.

Abweichungen

  • Text unter aria-hidden wird weiter gemessen. WCAG 1.4.3 gilt für sichtbaren Text, unabhängig vom Accessibility-Tree. auditmysite nahm ihn aus (#395).

0.22.0: Zielgrößen und Heuristiken (#698)

Die Heuristiken nach dem Vergleich mit auditmysites lokalen Regeln (casoon/auditmysite#698, Korpus und sechs echte Seiten, 2026-10-05).

Neue Kennungen

Neue KennungUrteil, SchwereNorm
targets/size-enhancedREVIEW, niedrigWCAG 2.5.5 (AAA): 44 × 44 CSS-px, Ausnahmen „inline” und „Equivalent”, keine Abstandsausnahme

Gemeldet wird nur, was targets/size nicht schon meldet.

Belege

Vor dem Release hat auditmysite die neuen Felder in echten Läufen gefüllt: pointer_events_none (bundesregierung.de 114, spiegel.de 120, gov.uk 6, berlin.de 2) und animating (bundesregierung.de 246, wetter.com 89, spiegel.de 23, target_size_animation a#slow).

Korpusfälle zu targets/size: target_size_equivalent, target_size_hidden_neighbours (#705), target_size_animation (#706). Echte Seiten: Sprunglinks bei −99999 px und Karussellpunkte 10 × 10 px (#slick-slide-control00) auf bundesregierung.de, 27 Teaserkarten mit cursor: pointer ebendort (keyboard/pointer-only), 20 Teaserkarten mit Bild- und Titellink in flex-row-reverse (order/visual-mismatch) und ein 1 × 1 px großer Sprunglink (focus/obscured) auf spiegel.de.

Abweichungen

  • motion/infinite-animation: Lade-Kreisel mit kurzem Durchlauf bleiben gemeldet, denn 2.2.2 gilt für Bewegung, die insgesamt länger als fünf Sekunden läuft. auditmysite zählte nur Durchläufe über fünf Sekunden.

0.23.0: Prüfhinweise und Kontrast von Bedienelementen

Checkliste

Sieben neue manual/*-Punkte für die Prüfhinweise, die auditmysite bisher selbst erzeugte (casoon/barrierlab#39, casoon/auditmysite#722). Wie die übrigen UNTESTED, einmal je Seite und nur mit Anlass. Bisher stand bei auditmysite jeder dieser Hinweise auf jeder Seite, auch ohne Anlass.

KennungWCAGAnlass
manual/pointer-gestures2.5.1draggable, Touch-/Zeiger-Handler im Markup, Karussell- und Kartenbibliotheken (swiper, slick, leaflet …)
manual/motion-actuation2.5.4Inline-Skript mit devicemotion/deviceorientation (eigene Regel, Scope::Markup)
manual/no-timing2.2.3Felder oder meta refresh
manual/interruptions2.2.4Live-Region, role=alert/status/log/marquee/timer, <dialog>, meta refresh
manual/re-authenticating2.2.5Anmeldung (Passwortfeld, Captcha)
manual/unusual-words3.1.3Text
manual/help3.3.5Felder

Kontrast von Bedienelementen

contrast/control-insufficient und contrast/control-undetermined (1.4.11) sind ein Port von auditmysites non_text_contrast_css (casoon/barrierlab#21, casoon/auditmysite#698). Anders als dort wird kein Vergleich gegen Weiß gezogen, wenn der Hintergrund fehlt, sondern UNTESTED gemeldet.

0.24.0: Linkzweck

Linkzweck aus auditmysite (link_purpose, link_purpose_link_only; casoon/barrierlab#13, #18). Beide Regeln hatte auditmysite#690 auf B5 verschoben, B5 hat sie dann nicht mitgenommen. Alle Befunde sind Tier 2 und REVIEW: Ob ein Linktext reicht, entscheidet am Ende der Zusammenhang.

Neue Kennungen

Neue KennungWCAG, Schwereersetzt in auditmysite
links/url-name2.4.4, niedrig; nur ohne Kontext„raw URL” aus link_purpose
links/single-character-name2.4.4, mittel; Ziffern ausgenommen„single character” aus link_purpose
links/new-window-unannounced3.2.5 (AAA), niedrig„opens in new window” aus link_purpose
links/purpose-link-only2.4.9 (AAA), niedriglink-name-only (link_purpose_link_only)

Abweichungen

  • links/new-window-unannounced prüft target="_blank". auditmysite prüfte aria-haspopup und traf den gemeinten Fall nie. G201 gehört zu 3.2.5, nicht zu 2.4.4 wie bisher in auditmysite.
  • links/generic-name wertet den Zusammenhang aus wie auditmysite #569 (Plan 71, Technik H80).

Diese Seite auf GitHub bearbeiten