Hvad niveau AA faktisk betyder
WCAG er organiseret i tre niveauer. A er gulvet, AA er det niveau, europæiske udbud og EN 301 549 tager udgangspunkt i, og AAA er et mål, ingen er forpligtet til at nå på tværs af et helt websted. Når et udbud beder om »WCAG 2.2 AA«, betyder det hvert A- og AA-succeskriterium, på hver side i omfanget, i hver tilstand, en bruger kan nå.
Succeskriterier er testbare udsagn, ikke teknikker. »Kontrast (minimum)« fortæller dig ikke, hvilket token du skal ændre; det fortæller dig det målte forhold, et stykke tekst skal klare. Den skelnen betyder noget i en revision: et fund er forsvarligt, når det nævner kriteriet, elementet og målingen, ikke når det nævner et værktøj.
Et websted består eller falder ikke som helhed. Overensstemmelse erklæres pr. side, og et enkelt ikke-overensstemmende element på en side fjerner erklæringen for den side. Derfor slår løbende overvågning en engangsrevision: en temaopdatering kan ophæve erklæringen for hundrede sider på én gang.
De ni kriterier, WCAG 2.2 tilføjede
Seks af dem ligger på A eller AA og er dermed i omfanget af en EN 301 549-vurdering. Den sidste kolonne siger, om en scanner kan bedømme det, eller om et menneske skal.
| SK | Navn | Niveau | Hvordan det testes |
|---|---|---|---|
| 2.4.11 | Fokus ikke skjult (minimum) | AA | manuel |
| 2.4.12 | Fokus ikke skjult (udvidet) | AAA | manuel |
| 2.4.13 | Fokus-udseende | AAA | manuel |
| 2.5.7 | Trækkebevægelser | AA | manuel |
| 2.5.8 | Målstørrelse (minimum) | AA | automatiseret |
| 3.2.6 | Konsekvent hjælp | A | manuel |
| 3.3.7 | Redundant indtastning | A | manuel |
| 3.3.8 | Tilgængelig autentificering (minimum) | AA | delvist automatiseret |
| 3.3.9 | Tilgængelig autentificering (udvidet) | AAA | manuel |
Hvad scanneren kontrollerer, regel for regel
Hver automatisk regel bærer begge referencer, så ét fund læses som et WCAG-succeskriterium for udvikleren og som en EN 301 549-klausul for granskeren. Dette er de regler, der er indlæst i den offentlige koblingstabel; kataloget i produktet er større og vedligeholdes centralt.74 rules seeded
| Regel | What it detects | WCAG | EN 301 549 | Typisk effekt |
|---|---|---|---|---|
| accesskeys | Two elements claim the same access key | 2.1.1 | 9.2.1.1 | serious |
| area-alt | Image map region without alternative text | 1.1.1, 2.4.4, 4.1.2 | 9.1.1.1, 9.2.4.4, 9.4.1.2 | critical |
| aria-allowed-attr | ARIA attribute not allowed on this role | 4.1.2 | 9.4.1.2 | critical |
| aria-command-name | Custom button, link or menu item without a name | 4.1.2 | 9.4.1.2 | serious |
| aria-hidden-body | Whole document hidden from assistive technology | 4.1.2 | 9.4.1.2 | critical |
| aria-hidden-focus | Focusable element hidden from assistive technology | 1.3.1, 4.1.2 | 9.1.3.1, 9.4.1.2 | serious |
| aria-input-field-name | Custom input field without an accessible name | 4.1.2 | 9.4.1.2 | serious |
| aria-meter-name | Meter without an accessible name | 1.1.1 | 9.1.1.1 | serious |
| aria-progressbar-name | Progress indicator without an accessible name | 1.1.1 | 9.1.1.1 | serious |
| aria-required-attr | ARIA role missing a required attribute | 4.1.2 | 9.4.1.2 | critical |
| aria-required-children | Composite role without its required child roles | 1.3.1 | 9.1.3.1 | critical |
| aria-required-parent | ARIA role placed outside its required container | 1.3.1 | 9.1.3.1 | critical |
| aria-roles | Role value is not a recognised ARIA role | 4.1.2 | 9.4.1.2 | critical |
| aria-toggle-field-name | Checkbox, radio or switch without an accessible name | 4.1.2 | 9.4.1.2 | serious |
| aria-tooltip-name | Tooltip role without any text | 4.1.2 | 9.4.1.2 | serious |
| aria-valid-attr | Attribute name is not a valid ARIA attribute | 4.1.2 | 9.4.1.2 | critical |
| aria-valid-attr-value | ARIA attribute points at a value that does not resolve | 4.1.2 | 9.4.1.2 | critical |
| audio-caption | Audio without a captions or transcript track | 1.2.1 | 9.1.2.1 | critical |
| autocomplete-valid | autocomplete value not recognised | 1.3.5 | 9.1.3.5 | serious |
| avoid-inline-spacing | Text spacing locked by an inline style | 1.4.12 | 9.1.4.12 | serious |
| blink | Blinking content that cannot be stopped | 2.2.2 | 9.2.2.2 | serious |
| button-name | Button without an accessible name | 4.1.2 | 9.4.1.2 | critical |
| bypass | No way to skip the repeated navigation | 2.4.1 | 9.2.4.1 | serious |
| color-contrast | Text contrast below the required ratio | 1.4.3 | 9.1.4.3 | serious |
| css-orientation-lock | Content locked to one screen orientation | 1.3.4 | 9.1.3.4 | serious |
| definition-list | Definition list built from the wrong children | 1.3.1 | 9.1.3.1 | serious |
| dlitem | Definition term or description outside a list | 1.3.1 | 9.1.3.1 | serious |
| document-title | Page has no title | 2.4.2 | 9.2.4.2 | serious |
| duplicate-id-active | Duplicate id on an interactive element | 4.1.1 | 9.4.1.1 | serious |
| empty-heading | Heading with no text | 1.3.1 | 9.1.3.1 | minor |
| empty-table-header | Table header cell with no text | 1.3.1 | 9.1.3.1 | minor |
| focus-order-semantics | Focusable element with no interactive role | 2.4.3 | 9.2.4.3 | minor |
| form-field-multiple-labels | Field bound to more than one label | 3.3.2 | 9.3.3.2 | moderate |
| frame-title | Frame without a title | 2.4.1, 4.1.2 | 9.2.4.1, 9.4.1.2 | serious |
| heading-order | Heading level skipped | 1.3.1 | 9.1.3.1 | moderate |
| html-has-lang | Page language not declared | 3.1.1 | 9.3.1.1 | serious |
| html-lang-valid | Page language code is not valid | 3.1.1 | 9.3.1.1 | serious |
| html-xml-lang-mismatch | lang and xml:lang disagree | 3.1.1 | 9.3.1.1 | moderate |
| identical-links-same-purpose | Links with the same text lead somewhere different | 2.4.9 | 9.2.4.9 | minor |
| image-alt | Image without a text alternative | 1.1.1 | 9.1.1.1 | critical |
| input-button-name | Input button with no value or label | 4.1.2 | 9.4.1.2 | critical |
| input-image-alt | Image button without alternative text | 1.1.1, 4.1.2 | 9.1.1.1, 9.4.1.2 | critical |
| label | Form field without a programmatic label | 1.3.1, 4.1.2 | 9.1.3.1, 9.4.1.2 | critical |
| landmark-banner-is-top-level | Banner landmark nested inside another region | 1.3.1 | 9.1.3.1 | moderate |
| landmark-complementary-is-top-level | Complementary landmark nested inside another region | 1.3.1 | 9.1.3.1 | moderate |
| landmark-no-duplicate-main | More than one main landmark on the page | 1.3.1 | 9.1.3.1 | moderate |
| landmark-one-main | Page has no single main landmark | 1.3.1, 2.4.1 | 9.1.3.1, 9.2.4.1 | moderate |
| landmark-unique | Two landmarks share a role and a name | 1.3.1 | 9.1.3.1 | moderate |
| link-name | Link without discernible text | 2.4.4, 4.1.2 | 9.2.4.4, 9.4.1.2 | serious |
| list | List contains elements that are not list items | 1.3.1 | 9.1.3.1 | moderate |
| listitem | List item outside a list | 1.3.1 | 9.1.3.1 | serious |
| marquee | Scrolling marquee content | 2.2.2 | 9.2.2.2 | serious |
| meta-viewport | Zoom disabled by the viewport meta tag | 1.4.4 | 9.1.4.4 | serious |
| nested-interactive | Interactive control nested inside another | 4.1.2 | 9.4.1.2 | serious |
| no-autoplay-audio | Audio starts on its own for more than three seconds | 1.4.2 | 9.1.4.2 | moderate |
| object-alt | Embedded object without a text alternative | 1.1.1 | 9.1.1.1 | serious |
| p-as-heading | Paragraph styled to look like a heading | 1.3.1 | 9.1.3.1 | serious |
| page-has-heading-one | Page has no level one heading | 1.3.1 | 9.1.3.1 | moderate |
| presentation-role-conflict | Presentation role cancelled by other markup | 4.1.2 | 9.4.1.2 | minor |
| region | Content sits outside any landmark | 1.3.1 | 9.1.3.1 | moderate |
| role-img-alt | Element with role img has no alternative text | 1.1.1 | 9.1.1.1 | serious |
| scrollable-region-focusable | Scrollable area cannot be reached by keyboard | 2.1.1 | 9.2.1.1 | serious |
| select-name | Select element without an accessible name | 1.3.1, 4.1.2 | 9.1.3.1, 9.4.1.2 | critical |
| server-side-image-map | Server-side image map in use | 2.1.1 | 9.2.1.1 | minor |
| summary-name | Disclosure summary without a name | 4.1.2 | 9.4.1.2 | serious |
| svg-img-alt | Meaningful SVG without a text alternative | 1.1.1 | 9.1.1.1 | serious |
| tabindex | Positive tabindex overrides the natural focus order | 2.4.3 | 9.2.4.3 | serious |
| table-fake-caption | Table title styled as a caption instead of marked as one | 1.3.1 | 9.1.3.1 | serious |
| target-size | Touch target smaller than 24 by 24 pixels | 2.5.8 | 9.2.5.8 | moderate |
| td-has-header | Data cell in a large table has no header | 1.3.1 | 9.1.3.1 | serious |
| td-headers-attr | Data cell not associated with a header | 1.3.1 | 9.1.3.1 | serious |
| th-has-data-cells | Table header with no data cells attached | 1.3.1 | 9.1.3.1 | serious |
| valid-lang | Language of a passage is not a valid code | 3.1.2 | 9.3.1.2 | serious |
| video-caption | Video without a captions track | 1.2.2 | 9.1.2.2 | critical |
Hvad automatiseringen kan og ikke kan se
Ved hver score i Conforma står den samme sætning, for tallet er kun en del af billedet. Automatiske regler er fremragende til målbare egenskaber og blinde over for hensigt.
Automatiseret test dækker kun en del af tilgængelighedsbarriererne. En manuel verificering er nødvendig for en fuldstændig vurdering.
Sådan tester Conforma WCAG 2.2 AA
- Automatiske regler kører på hver side i en scanning, og hver overtrædelse skrives som et fund med reglen, selektoren, HTML-uddraget og et skærmbillede af elementet på plads.
- Hvert fund bærer begge referencer: WCAG-succeskriteriet og EN 301 549-klausulen, så en rapport læses ens for en udvikler og for en indkøbsgransker.
- Fund får et fingeraftryk ud fra regel, selektor og sti. En rettelse, der vender tilbage efter en udrulning, rapporteres som en regression i stedet for stille at blive talt som nyt arbejde.
- Den manuelle tjekliste dækker det, regler ikke kan bedømme, med videobevis, den anvendte hjælpeteknologi og en navngiven tester, og den forsegles i samme dokumentationspakke som den automatiske kørsel.
Spørgsmål vi får om dette
Er WCAG 2.2 AA det samme som at opfylde tilgængelighedsloven?
Nej. European Accessibility Act er loven, EN 301 549 er den harmoniserede standard, der bruges til at påvise den, og EN 301 549 henviser til WCAG 2.2 niveau AA for webindhold. At nå AA er det tekniske grundlag for en erklæring, ikke et certifikat.
Skal vi skifte fra 2.1 til 2.2 nu?
For alt nyt er det sikre svar ja. WCAG 2.2 er bagudkompatibel: indhold, der opfylder 2.2, opfylder også 2.1, så at teste mod den nyere version koster intet og dækker begge.
Betyder en perfekt automatisk score, at webstedet er i overensstemmelse?
Det betyder, at ingen automatisk overtrædelse blev fundet på de scannede sider. Tastaturbetjening, fokusrækkefølge og skærmlæserforløb kræver stadig et menneske, før der fremsættes nogen påstand.