Qualità
Accessibilità
Il riferimento è il fondamento Accessibilità del design system .italia: UNI CEI EN 301549:2021 e WCAG 2.1 livello AA, con WCAG 2.2. Le ricette sono HTML senza shadow DOM, quindi tutti i tool automatici le leggono per intero, senza i falsi positivi dei web component descritti nella guida di Dev Kit Italia.
I controlli automatici trovano solo una parte dei problemi. Le verifiche manuali qui sotto restano necessarie, e per i servizi pubblici serve la valutazione di un esperto di accessibilità e, dove possibile, di utenti reali.
Verifiche automatiche
Ogni esempio documentato viene mostrato in Chromium headless con il CSS precompilato e controllato così. I risultati sono raggruppati per componente; il comando fallisce se ci sono errori, quindi si può usare in CI (.github/workflows/a11y.yml).
| Controllo | Cosa verifica | Criteri WCAG |
|---|---|---|
| axe | Regole WCAG 2.2 A/AA di axe-core, il motore consigliato da Dev Kit Italia, su ogni esempio e in ogni tema: il contrasto cambia con il tema. Le «best practice» di axe (heading e label vuoti, landmark) sono avvisi. | 1.1.1, 1.3.1, 1.4.3, 2.4.4, 2.5.8, 4.1.2 e le altre regole automatiche |
| tastiera | Tab e Maiusc+Tab dall'inizio alla fine di ogni esempio: nessuna trappola, tutti i controlli visibili raggiungibili, il focus cambia l'aspetto dell'elemento e non resta coperto da altro contenuto. | 2.1.1, 2.1.2, 2.4.7, 2.4.11 |
| interazioni | Scenari da tastiera per componente: Invio e Spazio aprono accordion e dropdown, Esc chiude modale e popover e il focus torna al pulsante, le frecce cambiano scheda, opzione e voto, un tooltip mostrato col focus si chiude con Esc. | 2.1.1, 2.4.3, 1.4.13, 3.3.1 |
| reflow | A 320px di larghezza (1280px con zoom al 400%) niente scorrimento orizzontale, tranne dentro i contenitori fatti per scorrere. Con la spaziatura del testo WCAG (interlinea 1,5, spaziatura tra lettere e parole) nessun testo viene tagliato. | 1.4.10, 1.4.12 |
| html | Validazione HTML con html-validate (preset standard e a11y): annidamenti non permessi, id duplicati, attributi non validi, regole di accessibilità del markup. | 4.1.1 (WCAG 2.1), 1.3.1 |
| aria | Snapshot dell'albero di accessibilità di ogni esempio (ruoli, nomi, stati) in tests/a11y-snapshots/. Una modifica fa fallire il controllo finché non viene rivista e accettata. | 1.3.1, 4.1.2 (regressioni) |
| sito | Le pagine della documentazione intere: titolo, lingua, landmark, ordine dei titoli, link «Vai al contenuto» al primo Tab, reflow a 320px. | 2.4.1, 2.4.2, 3.1.1, 1.3.1, 1.4.10 |
bunx playwright install --only-shell chromium # una volta: il browser usato dai test
bun run a11y # componenti: tutti i controlli, temi italia-*
bun run a11y --check axe,keyboard --component tabs,input
bun run a11y --theme italia-darker # un tema (--all-themes: anche quelli daisyUI)
bun run a11y --update-snapshots # accetta le modifiche all'albero di accessibilità
bun run docs:build && bun run a11y:site # pagine del sito, come pa11y-ci con runner axe
bun run a11y --json a11y-report.json --no-fail # report JSON senza far fallire il comandoVerifiche manuali
Dal fondamento Accessibilità di designers.italia.it, per ogni componente e ogni pagina che li usa:
Tastiera
- L'ordine del focus segue l'ordine di lettura della pagina.
- Il comportamento di ogni controllo è quello atteso (Invio sui link e pulsanti, Spazio su checkbox e radio, frecce nelle select e nei gruppi).
- Nessun contenuto compare o sparisce in modo inatteso quando un elemento riceve il focus.
Lettori di schermo
- Combinazione di riferimento del design system: Windows + Chrome + JAWS; in alternativa NVDA.
- Da verificare anche: macOS + Safari o Chrome + VoiceOver, iOS + Safari + VoiceOver, Android + Chrome + TalkBack.
- Ordine di lettura, etichette (anche nascoste e ARIA), struttura dei titoli, testi alternativi.
- Annuncio dei cambiamenti dinamici: notifiche, messaggi di errore, pannelli che si aprono.
Zoom e visualizzazione
- Zoom del browser al 400% su schermo largo 1280px: niente contenuti tagliati o sovrapposti.
- Elementi a scorrimento orizzontale (caroselli, tabelle) verificati a 1024px.
- Contrasto di stati che i tool non vedono: hover, focus, elementi sopra immagini.
Per ogni variante di componente
- Accessibilità visiva: contrasto e leggibilità.
- Compatibilità con i lettori di schermo: struttura ed etichette.
- Navigabilità: focus, struttura, tastiera.
- Comprensibilità: comportamento prevedibile, gestione degli errori.