Introduzione
Nell’ambito del progetto PNRR – 1.4.2 “Citizen inclusion – Miglioramento dell’accessibilità dei servizi pubblici digitali”, l’Agenzia per l’Italia Digitale realizza una collana di documenti specialistici da mettere a disposizione di coloro che erogano servizi al pubblico attraverso siti web e APP.
Nello specifico, la presente pubblicazione intende fornire un supporto tecnico per comprendere meglio i criteri di successo che sono spesso più frequentemente “non soddisfatti” all’interno di pagine web e documenti non web, così come è evidenziato dal monitoraggio periodico che AGID effettua annualmente su un campione di siti web ed APP.
Definizione e Acronimi
API, Interfaccia di Programmazione dell’Applicazione: le API, definiscono le interfacce ovvero le procedure per consentire lo scambio di dati fra diversi computer, software o componenti software, ad esempio, le API di un sistema operativo o di un linguaggio di programmazione.
API di accessibilità: I sistemi operativi e altre piattaforme forniscono una serie di interfacce che espongono informazioni su oggetti ed eventi alle tecnologie assistive. Le tecnologie assistive utilizzano queste interfacce per ottenere informazioni e interagire con tali widget (componenti n.d.a). Esempi di API di accessibilità sono Microsoft Active Accessibility, MSAA, Microsoft User Interface Automation UI-AUTOMATION, MSAA con UIA Express, UIA-EXPRESS, il protocollo di accessibilità di Mac OS X, AXAPI, Linux/Unix Accessibility Toolkit, ATK, Assistive Technology Service Provider Interface, AT-SPI, e IAccessible2. (rif. W3C Reccommendation “Core Accessibility API Mappings 1.1”)
Determinato programmaticamente (determinabile programmaticamente): in grado di essere letto dal software mediante i dati forniti dallo sviluppatore in modo che altri software, incluse le tecnologie assistive, possano estrarre e presentare tali informazioni agli utenti in diverse modalità (rif. UNI CEI EN 301549 vigente)
DOM, Document Object Model: Il Document Object Model è un’interfaccia di programmazione, API, per documenti HTML e XML. Definisce la struttura logica del documento e le modalità per modificarne struttura, contenuto e stile. Il DOM è una rappresentazione ad albero degli elementi, una struttura gerarchica a oggetti che presenta proprietà, metodi ed eventi disponibili.
Evento: Un messaggio programmatico utilizzato per comunicare cambiamenti discreti nello stato di un oggetto ad altri oggetti in un sistema computazionale. L’input dell’utente su una pagina web è comunemente mediato attraverso eventi astratti che descrivono l’interazione e possono fornire avvisi di modifiche allo stato di un oggetto documento. In alcuni linguaggi di programmazione, gli eventi sono più comunemente noti come notifiche. (rif. W3C Reccommendation “Core Accessibility API Mappings 1.1”)
Nome: testo attraverso il quale un software riesce a far identificare a un utente un componente all’interno del contenuto Web. NOTA Il nome può essere nascosto e visibile solo attraverso l’uso di tecnologie assistive, mentre un’etichetta viene resa disponibile a tutti gli utenti. In molti (ma non tutti) i casi, l’etichetta e il nome coincidono. NOTA Questa definizione non ha nulla a che fare con l’attributo “name” presente nella specifica HTML. (rif. WCAG 2.1)
Placeholder: l’attributo placeholder è un breve testo che offre suggerimenti per la compilazione e compare all’interno del campo di input dove è attesa la compilazione dell’utente. Il placeholder è un attributo delle tipologie di campi di input, text, search, url, tel, email e password.
Proprietà: Attributi essenziali per la natura di un determinato oggetto o che rappresentano un valore di dati associato all’oggetto. Un cambiamento di una proprietà può avere un impatto significativo sul significato o sulla presentazione di un oggetto. (rif. W3C Reccommendation “Core Accessibility API Mappings 1.1”)
Ruolo: Indicatore principale della tipologia. Questa associazione semantica consente agli strumenti di presentare e supportare l’interazione con l’oggetto in modo coerente con le aspettative dell’utente riguardo ad altri oggetti di quel tipo. (rif. W3C Reccommendation “Core Accessibility API Mappings 1.1”)
Stato: Uno stato è una proprietà dinamica che esprime le caratteristiche di un oggetto che può cambiare in risposta all’azione dell’utente o ai processi automatizzati. Gli stati non influiscono sulla natura essenziale dell’oggetto, ma rappresentano i dati associati all’oggetto o le possibilità di interazione dell’utente. (rif. W3C Reccommendation “Core Accessibility API Mappings 1.1”)
Tecnologia Assistiva (AT): apparecchiature, sistemi di prodotti, hardware, software o servizi utilizzati per aumentare, mantenere o migliorare le capacità delle persone (rif. Guida ISO/IEC 71:2014 “Guide for addressing accessibility in standards”)
Tecnologie assistive: Questa definizione può differire da quella utilizzata in altri documenti. Hardware e/o software che:
- si basa sui servizi forniti da un agente utente per recuperare e visualizzare il contenuto Web
- funziona con un agente utente o il contenuto web stesso attraverso l’uso di API e
- fornisce servizi oltre a quelli offerti dall’agente utente per facilitare l’interazione dell’utente con i contenuti web da parte di persone con disabilità
Esempi di tecnologie assistive importanti nel contesto di questo documento includono quanto segue:
- ingranditori dello schermo, utilizzati per ingrandire e migliorare la leggibilità visiva del testo e delle immagini renderizzati;
- lettori di schermo, che vengono spesso utilizzati per trasmettere informazioni attraverso il parlato sintetizzato o un display Braille aggiornabile;
- software di sintesi vocale, utilizzato per convertire il testo in parlato sintetico;
- software di riconoscimento vocale, utilizzato per consentire il controllo vocale e la dettatura;
- tecnologie di input alternative (compresi puntatori della testa, tastiere su schermo, interruttori singoli e dispositivi sip/puff), utilizzate per simulare la tastiera;
- dispositivi di puntamento alternativi, utilizzati per simulare il puntamento e il clic del mouse.
(rif. W3C Reccommendation “Core Accessibility API Mappings 1.1”)
WAI ARIA: Web Accessibility Initiative – Accessible Rich Internet Applications
Riderimenti Tecnici
- AGID “Linee Guida sull’accessibilità degli strumenti informatici” e “Linee Guida sull’accessibilità degli strumenti informatici – per i soggetti erogatori di cui all’art 3 comma 1-bis della legge n. 4/2004”
- UNI CEI EN 301549:2021 – NORMA EUROPEA UNI CEI EN 301549 – dicembre 2021
“Requisiti di accessibilità per prodotti e servizi ICT”
- Web Content Accessibility Guidelines (WCAG) 2.1. W3C Recommendation 05 June 2018
- Linee Guida per l’accessibilità dei contenuti Web (WCAG) 2.1 – Traduzione italiana autorizzata – Pubblicata il 13 settembre 2018
- WCAG 2.1 Understanding Docs
- Techniques for WCAG 2.1
- W3C Recommendation “Accessible Name and Description Computation 1.1”
- W3C Candidate Recommendation Draft “Core Accessibility API Mappings 1.2”
- W3C Recommendation “Accessible Rich Internet Applications (WAI-ARIA) 1.2”
- W3C Working Draft “Using ARIA”
Riferimento UNI CEI EN 301549 criterio di successo 4.1.2 Nome, ruolo, valore (Livello A)
- WEB
- 9.4 Robusto
- 9.4.1 Compatibile
- 9.4.1.2 Nome, ruolo, valore
Laddove l’ICT è una pagina web, deve soddisfare le WCAG 2.1 – Criterio di successo 4.1.2 Nome, ruolo, valore
- Documenti non web
- 10.4 Robusto
- 10.4.1 Compatibile
- 10.4.1.2 Nome, ruolo, valore
Laddove l’ICT è un documento non web, deve soddisfare le WCAG 2.1 – Criterio di successo 4.1.2 Nome, ruolo, valore
Riferimento WCAG 2.1 – Criterio di successo 4.1.2 Nome, ruolo, valore (Livello A)
Per tutti i componenti dell’interfaccia utente (inclusi ma non limitati a: elementi di un modulo, collegamenti e componenti generati da script), nome e ruolo possono essere determinati programmaticamente; stati, proprietà e valori che possono essere impostati dall’utente possono essere impostabili da programma; e le notifiche sui cambi di stato di questi elementi sono rese disponibili ai programmi utente, incluse le tecnologie assistive.
NOTA
Questo criterio di successo ha valenza soprattutto per gli autori Web che sviluppano o programmano con linguaggi di scripting i componenti delle proprie interfacce utente. Per esempio, se utilizzati in accordo alle specifiche i controlli HTML standard rispondono a questo criterio.
Introduzione al criterio di successo 4.1.2
Questo criterio di successo appartiene insieme al 4.1.1 “Analisi sintattica (parsing)” e al 4.1.3 “Messaggi di stato” al Principio 4 “Robusto” e alla Linea guida 4.1 “Compatibile” che si prefigge lo scopo di “garantire la massima compatibilità con i programmi utente attuali e futuri, comprese le tecnologie assistive”. La compatibilità è un tema centrale per consentire l’utilizzo del web con le tecnologie assistive, con tutti i programmi e gli ausili che gli utenti utilizzano sulle loro postazioni per superare le barriere legate all’accessibilità. La compatibilità del web con le tecnologie assistive viene richiesta esplicitamente anche nei requisiti di conformità delle WCAG previsti dalla norma UNI EN 501349:
- 5.2.4 “Utilizzo delle tecnologie nelle sole modalità compatibili con l’accessibilità”: le tecnologie devono essere progettate in modo che i programmi utente, comprese le tecnologie assistive, possano accedere a tutte le informazioni di cui hanno bisogno per presentare il contenuto all’utente attraverso un rendering alternativo
- 5.2.5 “Non interferenza”: le tecnologie che non sono supportate dall’accessibilità possono essere utilizzate, purché tutte le informazioni siano disponibili anche utilizzando tecnologie supportate dall’accessibilità e purché il materiale non supportato dall’accessibilità non interferisca
Le tecnologie assistive consentono di presentare con il contenuto delle pagine web e dei documenti non web in formati alternativi più facilmente utilizzabili dagli utenti, ad esempio l’audio per le persone non vedenti, e di interagire nelle modalità più consone, ad esempio i puntatori alternativi al mouse come i dispositivi sip-and-puff che controllano il movimento con il soffio oppure ai comandi vocali. Per poter interagire con le interfacce le tecnologie assistive devono essere messe in condizione di ottenere tutte le informazioni semantiche, necessarie cioè a comprenderne il significato. I componenti più complessi e personalizzati, come mini-applicazioni web incorporate nelle pagine, potrebbero non essere affatto utilizzabili con le tecnologie assistive se non definiti con le informazioni semantiche necessarie. A livello generale il criterio di successo “Nome, Ruolo e Valore” richiede che per tutti i componenti dell’interfaccia utente, e in particolare per quelli personalizzati e non HTML standard, siano fornite alle tecnologie assistive le informazioni per:
- interpretare il contenuto Web, percepire la presenza dei componenti dell’interfaccia
- presentare il contenuto Web all’utente attraverso un’interfaccia alternativa
- interagire con i componenti impostando stati e proprietà
- ottenere aggiornamenti circa stato dei componenti, ad esempio che la pratica è in “stato inserito” e le notifiche “Errore nella compilazione del modulo”
Come le Tecnologie Assistive interagiscono con le pagine web
Mentre in passato le tecnologie assistive interagivano direttamente con il mark up attualmente si affidano principalmente ai browser per interpretare il contenuto delle pagine e presentarlo agli utenti sottoforma di rendering alternativo.
I browser interpretano il codice delle pagine web in una rappresentazione ad albero degli elementi, una struttura gerarchica a oggetti che presenta proprietà, metodi ed eventi disponibili chiamata Document Object Model, DOM. Sulla base del DOM, le API di accessibilità specifiche della piattaforma elaborano l’albero di accessibilità, una rappresentazione semantica degli oggetti che viene utilizzata per fornire una rappresentazione utilizzabile dalle tecnologie assistive.
Definire gli elementi secondo le specifiche rende disponibili alle tecnologie assistive nome, ruolo, valore e stato attraverso il Document Object Model, DOM, e le API di accessibilità specifiche della piattaforma.
Le API di accessibilità comunicano alle tecnologie assistive le informazioni sui componenti delle interfacce utente:
- Proprietà come ruolo, nome, valore, posizione etc.
- Stati
- Eventi, ad esempio digitazione in una casella di testo, selezione di un valore da una select, click di un link
- Azioni disponibili per l’utente come aprire una pagina, cliccare, selezionare, attivare, digitare etc.
- Relazioni fra gli oggetti che esprimono un contenuto semantico, ad esempio la didascalia è collegata all’immagine, il punto elenco fa parte di tre punti elenco totali
- Contenuto testuale
Le API di accessibilità comprendono gli algoritmi per calcolare e recuperare il nome accessibile e le proprietà per ogni oggetto dell’albero di accessibilità.
Sono approfonditi di seguito i requisiti richiesti dal criterio di successo 4.1.2 per garantire la compatibilità di componenti dell’interfaccia utente:
- nome e ruolo possono essere determinati programmaticamente
- stati, proprietà e valori che possono essere impostati dall’utente possono essere impostabili da programma
- le notifiche sui cambi di stato di questi elementi sono rese disponibili ai programmi utente, incluse le tecnologie assistive
Nome e ruolo possono essere determinati programmaticamente
Il criterio di successo 4.1.2 richiede che tutti i componenti dell’interfaccia abbiano un nome associato tramite codice. Il nome, definito anche “nome accessibile “perché utilizzato dalle tecnologie assistive, deve essere:
- significativo per la finalità del componente nell’interfaccia
- coerente con il nome visibile nell’interfaccia utente
Il nome accessibile è una breve descrizione che fornisce informazioni sullo scopo dell’oggetto, dovrebbe essere uguale all’etichetta visibile agli utenti, se presente, in modo che gli utenti di tecnologie assistive che usano i comandi vocali siano in grado di attivare gli oggetti. Ad esempio, se sul pulsante di ricerca è visualizzato “cerca” il nome accessibile dovrebbe essere “cerca“ e non “ricerca”, “trova” etc, vedi criterio di successo 2.5.3 “Etichetta nel nome”.
Il nome accessibile viene calcolato sulla base di un algoritmo a seconda del componente e non corrisponde all’attributo HTML <name>, usato in programmazione ma non intercettato dalle tecnologie assistive.
Il ruolo invece definisce la tipologia di componente, input, link, select etc., e fornisce alla tecnologia assistiva le informazioni su come interagire.
Nome e ruolo devono essere definiti dagli autori del software in modo che siano determinabili programmaticamente, cioè che le informazioni che contengono possano essere estratte e rappresentate sotto altre forme dai programmi utente e in particolare dalle tecnologie assistive. Per un’icona non decorativa, ad esempio, il nome accessibile, “errore”, può essere fornito tramite l’alternativa testuale.
Come specificato nella nota del criterio di successo, il ruolo è definito per gli elementi standard dell’HTML, come i campi di input, i pulsanti, i collegamenti ipertestuali etc., se usati secondo le specifiche, documentate e supportate per esporre queste proprietà alle tecnologie assistive, vedi paragrafo Utilizzo di HTML secondo le specifiche. I componenti standard HTML cioè sono definiti in modo tale da offrire queste informazioni ma gli autori devono garantire che le informazioni siano disponibili. Il nome accessibile di un campo di input, ad esempio, può essere veicolato dall’etichetta associata; è richiesto quindi che gli autori creino, associno e valorizzino opportunamente un’etichetta al campo di input.
Per questo motivo si consiglia di usare sempre, ove possibile, i componenti HTML standard. Nel caso sia necessario definire un componente personalizzato, oppure se gli elementi dell’interfaccia sono definiti dinamicamente con un ruolo diverso da quello usuale, il criterio di successo richiede che sia fornito con gli attributi necessari per poter interagire con le tecnologie assistive.
Stati, proprietà e valori impostati dall'utente possono essere impostabili da programma
l criterio di successo richiede che sia possibile interagire con i comandi presenti nella pagina ricevendo e impostando il valore tramite programma utente o tecnologia assistiva. Tramite screen reader, ad esempio, deve essere possibile selezionare una voce da un componente option, assegnare un valore ad un campo di input oppure cambiare lo stato di una pratica da “in lavorazione” a “lavorazione conclusa”. Il valore di un collegamento ipertestuale è rappresentato dall’attributo href che contiene il link a cui punta, il valore di un campo di input è il suo contenuto mentre il valore di una lista di elementi selezionabili è l’elemento selezionato.
Le notifiche sui cambi di stato di questi elementi sono rese disponibili ai programmi utente
Per poter interagire correttamente con i componenti di una pagina web è necessario ottenere informazioni sui cambiamenti di stato di un oggetto, ad esempio se un elemento espandibile come un menu è chiuso o aperto o se un elemento di selezione è stato selezionato.
Consultare l’Albero di Accessibilità dal browser
I principali browser web di mercato permettono di consultare l’albero di accessibilità tramite gli strumenti di sviluppo.
L’albero di accessibilità del browser rappresenta gli oggetti a disposizione delle tecnologie assistive per interrogare attributi e proprietà ed eseguire azioni.
Ispezionando l’albero dell’accessibilità è possibile verificare la rispondenza ai requisiti delineati dal criterio di successo e individuare alcune problematiche di accessibilità. Di seguito una checklist di verifica:
- sono rappresentati tutti gli elementi della pagina?
- sono presenti nomi e descrizioni appropriati per tutti gli oggetti?
- lo scopo di ogni oggetto è definito in modo da essere comprensibile con il rendering alternativo?
- cambiando lo stato di un elemento (ad esempio, comprimendo un menu o facendo clic su una casella di controllo) l’albero di accessibilità si aggiorna?
Schema riassuntivo
Descrizione dell’errore |
I componenti standard HTML dell’interfaccia non espongono il nome accessibile. Vedi paragrafi: Il nome accessibile con l’elemento <label>
Il nome accessibile per i raggruppamenti: <legend> e <fieldset>
Il nome accessibile con l’attributo ‘title’
Esempi di calcolo del nome accessibile |
Perché è un errore |
Il nome accessibile, di solito presentato come etichetta, non è programmaticamente determinabile.
Il nome accessibile potrebbe non essere presente oppure non essere associato al componente tramite codice.
La tecnologia assistiva non è in grado di associare correttamente il componente alle etichette presenti nell’interfaccia.
Nel caso il componente sia composto da più elementi non è chiaro con quale elemento si stia interagendo.
L’effetto è che lo scopo del componente non è chiaro. |
Che cosa implementare per il web |
Fornire il nome accessibile ai componenti e valorizzarlo opportunamente tramite l’elemento <label> o <title> e ai gruppi di componenti tramite <fieldset> e <legend>. |
Che cosa implementare per i documenti non web |
Associare etichette ai componenti tramite i “Controlli per il formulario”. |
Descrizione dell’errore |
I componenti personalizzati dell’interfaccia non espongono il nome accessibile. Vedi paragrafi:
Il nome accessibile con aria-label
Il nome accessibile con aria-labelledby
Esempi di calcolo del nome accessibile |
Perché è un errore |
Il nome accessibile, di solito presentato come etichetta, non è programmaticamente determinabile.
Il nome accessibile potrebbe non essere presente oppure non essere associato al componente tramite codice.
La tecnologia assistiva non è in grado di associare correttamente il componente alle etichette presenti nell’interfaccia.
Nel caso il componente sia composto da più elementi non è chiaro con quale elemento si stia interagendo.
L’effetto è che lo scopo del componente non è chiaro. |
Che cosa implementare per il web |
Fornire il nome accessibile ai componenti e valorizzarlo opportunamente tramite attributi e proprietà WAI-ARIA che supportino le API di accessibilità e siano accessibili da tastiera, secondo la Linea guida 2.1 “Accessibile da tastiera”. |
Che cosa implementare per i documenti non web |
Per la creazione dei documenti non web ci si affida agli strumenti messi a disposizione dai programmi come i “Controlli per il formulario”. Potrebbe pertanto non essere possibile definire componenti completamente personalizzati.
Si consiglia di seguire le istruzioni per configurare proprietà e attributi e di testare quanto realizzato con diverse combinazioni di sistema operativo, browser, dispositivo (pc, tablet, smartphone) e tecnologie assistive. |
Descrizione dell’errore |
I componenti personalizzati non supportano le API di accessibilità oppure gli attributi WAI-ARIA non sono implementati correttamente. Vedi capitoli Definire componenti personalizzati accessibili e Fornire nome ruolo e valore tramite gli attributi WAI-ARIA |
Perché è un errore |
Le tecnologie assistive potrebbero non intercettare il componente personalizzato e ignorarlo oppure potrebbero non ottenere le informazioni necessarie per interagire correttamente |
Che cosa implementare per il web |
Componenti predisposti dalle piattaforme per interfacciarsi con le API di accessibilità oppure componenti completamente personalizzati con attributi e proprietà WAI-ARIA che supportino le API di accessibilità e che, in entrambi i casi, siano accessibili da tastiera, secondo la Linea guida 2.1 “Accessibile da tastiera”.
Si consiglia di testare approfonditamente quanto realizzato con diverse combinazioni di sistema operativo, browser, dispositivo (pc, tablet, smartphone) e tecnologie assistive. |
Che cosa implementare per i documenti non web |
Per la creazione dei documenti non web ci si affida agli strumenti messi a disposizione dai programmi come i “Controlli per il formulario”. Potrebbe pertanto non essere possibile definire componenti completamente personalizzati.
Si consiglia di seguire le istruzioni per configurare proprietà e attributi e di testare quanto realizzato con diverse combinazioni di sistema operativo, browser, dispositivo (pc, tablet, smartphone) e tecnologie assistive. |
Eccezioni
Non sono previste eccezioni per il criterio di successo 4.1.2 Nome, ruolo, valore.
Suggerimenti per la soddisfazione del criterio di successo 4.1.2 Nome, ruolo, valore
- Utilizzare HTML secondo le specifiche
- Usare componenti e link HTML standard
- Definire componenti personalizzati accessibili
- Fornire nome ruolo e valore tramite gli attributi WAI-ARIA.
Utilizzare HTML secondo le specifiche
Per soddisfare il criterio di successo 4.1.2 si consiglia di utilizzare solo le funzionalità definite nelle specifiche seguendo le modalità previste dalle specifiche. Ad esempio, l’HTML prevede tag semantici codificati, componenti cioè che contengono una rappresentazione non ambigua del proprio significato comprensibile dal browser e dalle tecnologie assistive. HTML5, in particolare, ha introdotto tag semantici per l’organizzazione dei contenuti della pagina. Alcuni esempi sono:
- le intestazioni <header>,
- i piè di pagina <footer>,
- le sezioni in cui organizzare ulteriormente il contenuto <section>,
- le immagini e le relative didascalie <figure> e <figcaption>
Il tag <footer>, ad esempio, è l’elemento che contiene la parte inferiore delle pagine ed espone contenuti come contatti, riferimenti ai social, link utili e, nel caso delle pubbliche amministrazioni, i link agli adempimenti legali, fra cui la dichiarazione di accessibilità. Definire l’intestazione della pagina nel tag <footer> è un esempio grossolano di utilizzo improprio del tag semantico.
Usare i tag definiti nelle specifiche nelle modalità previste, cioè seguendo le indicazioni in termini di attributi e valori, garantisce che i componenti siano correttamente interpretati e presentati agli utenti. Ad esempio, definire correttamente le sezioni <section> consente a chi naviga con lo screen reader di scorrere il contenuto navigando fra le sezioni per comprendere rapidamente l’organizzazione e focalizzarsi sul contenuto di interesse.
Usare componenti e link HTML standard
Le tecnologie assistive utilizzano le API di accessibilità per ottenere informazioni necessarie per il rendering alternativo come nome, valore, ruolo e stato. Nella tabella viene mostrato come si ricavano tali attributi per alcuni componenti HTML standard di uso comune:
- nome: fornito dal testo associato all’elemento
- ruolo: fornito dall’elemento HTML
- valori e stati, vengono resi disponibili a seconda dell’elemento
Il nome, ad esempio può essere associato al componente tramite un attributo obbligatorio, la <label> o l’attributo ‘title’ per gli input con ruolo ‘testo editabile’.
Nei paragrafi successivi sono fornite indicazioni di dettaglio per l’implementazione.
Elemento HTML |
<a> |
Ruolo |
link |
Nome |
- testo contenuto nel tag <a>
- testo alternativo ‘alt’ se si tratta di un’immagine contenente un collegamento ipertestuale
- valore dell’attributo <title>
|
Valore |
Attributo ‘href’ |
Stato |
|
Elemento HTML |
<button> |
Ruolo |
push button |
Nome |
- testo contenuto nel tag <button>
- valore dell’attributo <title>
|
Valore |
|
Stato |
|
Elemento HTML |
<fieldset> |
Ruolo |
raggruppamento |
Nome |
testo contenuto nell’elemento <legend> del fieldset |
Valore |
|
Stato |
|
Elemento HTML |
<input type = “button”, “submit” e “reset”> |
Ruolo |
push button |
Nome |
attributo ‘value’ |
Valore |
|
Stato |
|
Elemento HTML |
<input type = “image”> |
Ruolo |
push button |
Nome |
valore dell’attributo <title> o <alt> |
Valore |
|
Stato |
|
Elemento HTML |
<input type = “text”> |
Ruolo |
testo editabile |
Nome |
- elemento <label> associato all’input
- attributo <title>
|
Valore |
attributo ‘value’ |
Stato |
|
Elemento HTML |
<input type = “password”> |
Ruolo |
testo editabile |
Nome |
- elemento <label> associato all’input
- attributo <title>
|
Valore |
Nascosto di proposito |
Stato |
|
Elemento HTML |
<input type=”file”> |
Ruolo |
testo editabile |
Nome |
- elemento <label> associato all’input
- attributo <title>
|
Valore |
attributo ‘value’ |
Stato |
|
Elemento HTML |
<input type=”checkbox”> |
Ruolo |
radio button |
Nome |
- elemento <label> associato all’input
- attributo <title>
|
Valore |
|
Stato |
attributo ‘checked’ |
Elemento HTML |
<input type=”radio”> |
Ruolo |
checkbox |
Nome |
- elemento <label> associato all’input
- attributo <title>
|
Valore |
|
Stato |
attributo ‘checked’ |
Elemento HTML |
<select> |
Ruolo |
listbox |
Nome |
- elemento <label> associato all’input
- attributo <title>
|
Valore |
Elemento con attributo ‘selected’ impostato al valore “selected” |
Stato |
|
Elemento HTML |
<textarea> |
Ruolo |
testo editabile |
Nome |
- elemento <label> associato all’input
- attributo <title>
|
Valore |
Testo nell’elemento <textarea> |
Stato |
|
Il nome accessibile con l’elemento <label>
È possibile fornire il nome tramite il tag <label>:
- per numerose tipologie di campi di input e per la textarea che consente la digitazione su più righe
- per gli elementi di selezione multipla radio, checkbox, select
- per gli elementi che visualizzano la scala in un intervallo, <meter> e il progresso di un’operazione, ad esempio, nel caricamento di un file, <progress>
L’utilizzo dell’elemento label per associare l’etichetta al componente offre numerosi vantaggi:
- è associato tramite l’attributo univoco “id” che contraddistingue ogni elemento in programmazione
- è programmaticamente determinabile: grazie all’“id” i programmi utente, ad esempio lo screen reader, riescono ad estrarre le informazioni necessarie per offrire la presentazione in un altro formato
Il nome accessibile per i raggruppamenti: <legend> <fieldset>
Il tag <fieldset> si utilizza per raggruppare ed enfatizzare il legame semantico fra gli elementi a selezione multipla di tipo radiobutton e chechbox, ad esempio per selezionare le modalità di spedizione di un pacco. Consente infatti sia di raggruppare visivamente gli oggetti che di collegarli ad una didascalia:
- tramite le proprietà del tag <fieldset> è possibile rendere visibile una cornice che identifichi visivamente il raggruppamento
- il tag <legend>, utilizzabile solo insieme al tag <fieldset>, consente di inserire una didascalia riferita a tutto il raggruppamento
Il nome accessibile, l’etichetta, dei singoli elementi è fornito tramite il tag <label>. Anche i tag <fieldset> e <legend> sono programmaticamente determinabili.
Un altro utilizzo del tag <fieldset> consiste nel raggruppare elementi che insieme sono logicamente correlati per definire un’entità, ad esempio, il bonifico bancario:
- ordinante,
- beneficiario,
- IBAN beneficiario,
- importo,
- causale etc.
Raggruppare gli elementi correlati e definirli con una legenda valida per tutti come il tag <legend> agevola la comprensione del form.
Definire componenti personalizzati accessibili
Nel paragrafo Come le Tecnologie Assistive interagiscono con le pagine web, sono state presentate le API di accessibilità specifiche per piattaforma. Se si opta per definire un componente tramite programmazione numerose piattaforme sono fornite di componenti predisposti per interfacciarsi con le API di accessibilità. I componenti predefiniti della piattaforma devono essere forniti di nome, ruolo e valore ovvero proprietà e stati necessari ad interagire con le tecnologie assistive.
Nei casi in cui non è possibile usare un componente predefinito ma se ne definisce uno personalizzato è necessario realizzare un’implementazione compatibile con l’API di accessibilità utilizzando gli attributi WAI-ARIA.
È sempre necessario definire i componenti, sia predisposti dalle piattaforme che personalizzati, in modo che sia consentita l’interazione da tastiera secondo la Linea guida 2.1 “Accessibile da tastiera”.
Si consiglia di effettuare sempre dei test con le tecnologie assistive per verificare che il risultato ottenuto sia quello atteso con diverse combinazioni di sistema operativo, browser, dispositivo (pc, tablet, smartphone).
Fornire nome, ruolo e valore tramite gli attributi WAI-ARIA
Gli attributi WAI-ARIA, Web Accessibility Initiative – Accessible Rich Internet Applications, rendono le applicazioni Web più accessibili per le tecnologie assistive. Associano ai componenti dell’interfaccia le informazioni semantiche necessarie alle tecnologie assistive per interagire correttamente con i componenti. Gli attributi WAI-ARIA costituiscono una raccolta di stati e proprietà di accessibilità utilizzati per supportare le API di accessibilità di numerose piattaforme. Le tecnologie assistive possono accedere a queste informazioni attraverso il DOM o la mappatura delle API di accessibilità. Stati e proprietà, insieme al ruolo possono fornire alle tecnologie assistive informazioni sull’interfaccia utente da trasmettere all’utente in qualsiasi momento. Ogni modifica agli stati o alle proprietà comporta una notifica alle tecnologie assistive, che sono messe così in grado di avvisare l’utente dei cambiamenti.
Gli attributi WAI-ARIA possono essere utilizzati per fornire nome, ruolo, valore e stato per i componenti personalizzati o per sovrascrivere o integrare nome, ruolo, valore e stato dei componenti HTML standard.
Nel W3C Working draft “Using ARIA” sono riassunte le best practice per l’utilizzo di WAI-ARIA:
- Se puoi utilizzare un componente HTML standard o un attributo già predisposto con la semantica e il comportamento necessario invece di modificare un componente aggiungendo un ruolo, stato o proprietà ARIA per renderlo accessibile, allora fallo.
- Non modificare la semantica nativa, a meno che non sia realmente necessario
- Tutti i componenti interattivi ARIA devono essere utilizzabili con la tastiera
- Non utilizzare gli attributi role=”presentation” (nasconde il componente dal DOM) o aria-hidden=”true” (rimuove il componente dal DOM) su elementi che ricevono il focus
- Tutti gli elementi interattivi devono avere un nome accessibile
Abbiamo affrontato le prime due best practice nel paragrafo, Usare componenti e link HTML standard. I punti 3 e 4 affrontano il tema dell’accessibilità da tastiera e del focus che deve essere garantita e implementata anche per tutti i componenti personalizzati, vedi paragrafo Definire componenti personalizzati accessibili. Il punto 5 affronta il tema del nome accessibile descritto nel dettaglio nei paragrafi seguenti.
Definire correttamente tutti gli attributi di un componente personalizzato è molto più complesso che implementare un componente HTML standard e aumenta in maniera considerevole l’onere della manutenzione. Si consiglia quindi di utilizzare gli attributi WAI-ARIA solo quando è strettamente necessario e di effettuare sempre dei test con le tecnologie assistive per verificare che il risultato ottenuto sia quello atteso con diverse combinazioni di sistema operativo, browser, dispositivo (pc, tablet, smartphone).
Sono presentati di seguito alcuni casi di implementazione particolarmente significativi.
Il nome accessibile con aria-label
L’attributo aria-label viene utilizzato per:
- attribuire un nome accessibile ad un elemento html che ne è privo
- sovrascrivere il nome accessibile di un elemento html
L’elemento HTML <div> è un elemento contenitore di titoli, paragrafi, immagini etc. risulta molto versatile ma è privo di un nome accessibile. Tramite l’aria-label è possibile fornire una descrizione del contenuto presentato nel <div>.
Il tag aria-label viene spesso utilizzato per tradurre nel rendering alternativo lo scopo di un elemento veicolato dal contesto e dall’aspetto di un componente. Ad esempio, la X maiuscola che indica il pulsante di chiusura di una finestra modale è un indicatore sufficiente per gli utenti vedenti. Il nome accessibile del pulsante corrisponde al contenuto racchiuso nel tag <button></button>, in questo caso “X”, poco significativo per un utente di screen reader. Il tag aria-label che, secondo l’algoritmo di calcolo sovrascrive il nome del pulsante, può essere associato all’elemento button per fornire agli utenti di tecnologie assistive un nome accessibile, come “Chiudi”.
L’attributo aria-label si usa quando nella pagina non è presente un testo da utilizzare come nome accessibile. Se è già presente nella pagina un testo che fornisce il nome accessibile è possibile associarlo al componente tramite l’attributo aria-labelledby.
Il nome accessibile con aria-labelledby
Nell’esempio di notifica con pulsante di chiusura disponibile nella libreria Bootstrap Italia, il nome accessibile “Titolo notifica” è presente nel titolo h2 e viene associato al div tramite l’id=”not1dms-title”.
<div class=”container test-docs”>
<div class=”row”>
<div class=”col-12 col-md-6 mb-4 mb-md-0″>
<p class=”mb-4″><strong>Notifica eliminabile con testo</strong></p>
<div class=”notification dismissable” role=”alert” aria-labelledby=”not1dms-title” id=”not1dms”>
<h2 id=”not1dms-title” class=”h5 “>Titolo notifica</h2>
<button type=”button” class=”btn notification-close”>
<svg class=”icon”><use href=”/bootstrap-italia/dist/svg/sprites.svg#it-close”></use></svg>
<span class=”visually-hidden”>Chiudi notifica: Titolo notifica</span>
</button>
</div>
</div>
</div>
</div>
Bootstrap Italia è una libreria open source, costruita su Bootstrap 5.2.3, di cui eredita tutte le funzionalità personalizzate secondo le indicazioni in termini di design, usabilità e accessibilità definite nelle nuove “Linee guida di design per i siti internet e i servizi digitali della Pubblica Amministrazione“, e nel “Manuale operativo di design” a supporto. Bootstrap Italia usa i pattern e i componenti definiti nello UI KIT Designers Italia versione 3.0.1 e li trasforma in codice pronto all’uso.
L’aria-labelledby permette di concatenare più valori referenziati attraverso i rispettivi identificativi univoci, id; questa proprietà è particolarmente utile se è necessario concatenare più valori oppure per fornire le informazioni di contesto disponibili agli utenti vedenti. Per fornire etichette significative per un grafico a barre, ad esempio, bisogna concatenare opportunamente i valori delle assi e delle quantità rappresentate. Analogamente per comprendere il significato di un dato numerico in una tabella è necessario concatenare il valore con il titolo della relativa riga e colonna.
Esempi di calcolo del nome accessibile
Per gli utenti di tecnologie assistive il contenuto delle proprietà aria-label e aria-labelledby integra o sostituisce quello dell’elemento html nativo, ad esempio la label.
Il nome accessibile viene ricavato a seconda dell’elemento dell’interfaccia utente e potrebbe anche non essere impostato.
Le API di accessibilità creano una struttura parallela chiamata albero dell’accessibilità, che rappresenta gli oggetti accessibili del Document Object Model, DOM. Il nome accessibile viene calcolato secondo un algoritmo che cambia a seconda degli attributi che sono presenti per l’elemento.
Per i campi di input di tipo “text”, “password”,”number”, “search”, “tel”, “email”,”url” e per i componenti di tipo textarea, ad esempio, l’algoritmo per il calcolo del nome accessibile valuta in ordine gerarchico gli attributi presenti per l’elemento:
- in prima battuta l’attributo aria-label o aria-labelledby, se è presente
- altrimenti l’elemento label
- altrimenti l’attributo title
- altrimenti il valore del placeholder, l’attributo placeholder compare all’interno del campo di input dove è attesa la compilazione dell’utente
- se nessuno dei precedenti produce una stringa di testo utilizzabile non esiste un nome accessibile
Per l’elemento immagine, tag <img>, l’algoritmo per il calcolo del nome accessibile attribuisce in prima battuta il valore:
- aria-labelledby se è presente
- altrimenti aria-label
- altrimenti l’attributo alt
- altrimenti l’attributo title
- Se nessuno dei precedenti produce una stringa di testo utilizzabile, non esiste un nome accessibile
L’attributo role
L’attributo role fornisce informazioni alle tecnologie assistive su come elaborare i componenti:
- una descrizione
- informazioni gerarchiche sui ruoli correlati, il ruolo “searchbox”, ad esempio, caratterizza una casella di testo utilizzata per la ricerca
- contesto del ruolo, ad esempio, una voce fa parte di un elenco
- stati e proprietà supportati per ciascun ruolo, per la checkbox, ad esempio è disponibile lo stato selezionato, “aria-checked”
I ruoli possono definire come interagire con un singolo componente, ad esempio “button” per indicare un pulsante, oppure come il componente è definito nella struttura della pagina, ad esempio “textbox” per le caselle di testo.
Quando i ruoli WAI-ARIA sovrascrivono la semantica del linguaggio non ci sono modifiche nel DOM ma solo nell’albero dell’accessibilità .
Fornire nome, ruolo e valore per i documenti non web
Anche per i documenti non web è necessario fornire nome, ruolo e valore per gli elementi che compongono il documento. Gli utenti di tecnologie assistive devono essere messi in grado di riconoscere i componenti del documento non web e di poter interagire.
Se per l’HTML è possibile ricorrere ai componenti standard che sono dotati degli attributi necessari per i documenti non web si fa ricorso agli oggetti nativi messi a disposizione dai programmi. Gli autori di documenti non web si affidano quindi ai programmi seguendo le istruzioni per realizzazione di oggetti accessibili.
Si raccomanda di verificare sempre i documenti non web realizzati e di effettuare test con le tecnologie assistive per verificare che il risultato ottenuto sia quello atteso con diverse combinazioni di sistema operativo, browser, dispositivo (pc, tablet, smartphone).
Il caso di studio proposto è la realizzazione di una casella di input per un modulo pdf editabile. Il programma utilizzato è l’editor di testo “Writer” della suite open source “Libre Office” che permette di esportare file in formato pdf.
Il nome accessibile è rappresentato dall’etichetta che trasmette lo scopo di ciascun controllo del modulo. Il ruolo dipende dal componente dei “controlli del formulario” selezionato, casella di testo, campo data, pulsante di scelta etc. Il valore può essere specificato se necessario tramite le “proprietà del controllo”.
Per associare il nome accessibile, l’etichetta, alla casella di testo sono necessari i seguenti passaggi. Dalla barra degli strumenti “Controlli per il formulario” è possibile selezionare l’oggetto “Etichetta” fra i numerosi componenti interattivi disponibili: la casella di testo, il campo data, il campo numerico, il campo valuta, il pulsante, l’elemento di selezione file per l’upload, etc. Selezionato il componente desiderato il cursore del mouse cambia aspetto per indicare che è possibile disegnare l’oggetto. Cliccando con il tasto destro su “Proprietà del controllo” è possibile definire le proprietà generali e relative all’aspetto (carattere, dimensioni del carattere etc.) ad esempio:
- il “Nome”, necessario a distinguere l’etichetta dalle altre disponibili nella pagina, corrisponde all’attributo “name” dell’HTML. È possibile lasciare il nome suggerito ad esempio “Testo fisso 2”
- la “Didascalia” è il nome accessibile e il testo visibile dell’etichetta, nell’esempio “Ufficio di riferimento”
Dalla barra degli strumenti “Controlli per il formulario” selezionando “Casella di testo” o dal percorso “Formulario\Casella di testo” è possibile creare un nuovo oggetto di questa tipologia. Anche per la casella di testo è presente un nome predefinito, mentre dalla voce “Campo didascalia” delle “Proprietà del controllo” è possibile visualizzare le etichette presenti nel formulario per selezionare l’etichetta desiderata da associare al componente, in questo esempio l’etichetta “Ufficio di riferimento”, creata al passaggio precedente.
Per una casella di input il “valore” è il contenuto del campo. A seconda del significato del campo è possibile inserire un valore di default, se opportuno, tramite la proprietà “Testo predefinito” cliccando con il tasto destro su “Proprietà del controllo”. Nell’esempio la proprietà “Testo predefinito” è stata valorizzata a “Ufficio Roma Centro”.
È opportuno impostare ulteriori proprietà che forniscono indicazioni per l’interazione necessarie alla navigazione da tastiera e a definire l’aspetto al focus:
- tabulazione: la tabulazione è necessaria per la navigazione da tastiera ma può essere disattivata tramite questa proprietà
- sequenza di attivazione: indica l’ordine sequenziale da 0 a n con cui il focus passerà da un oggetto all’altro del documento e deve seguire l’ordine logico di interazione. Se la tabulazione è disattivata viene disattivata anche la sequenza di attivazione
- fra gli eventi disponibili selezionare “al ricevimento del fuoco” e “alla perdita del fuoco” e la relativa macro predefinita
Per esportare il file in formato pdf è possibile selezionare dal menu “File” la voce “Esporta come\ Esporta direttamente in pdf” oppure “Esporta come\ Esporta nel formato pdf” selezionando le voci:
- Generale\PDF con tag
- Generale\Crea formulario PDF – Formato di invio dati: PDF
- Struttura\Esporta la struttura
- Struttura\Esporta segnaposti