Gráficos, mapas e infográficos estão presentes em nossas vidas, mas é quando essas informações não estão acessíveis?
Pessoas com deficiência, não conseguem compreender eles devido a falta de acessibilidade. Nesse artigo, vou te mostrar duas técnicas que podem melhorar isso.
Vamos lá?
O que são imagens complexas?
São representações visuais que contêm informações que não podem ser transmitidas através de uma sentença ou frase curta, como por exemplo:
- fluxogramas;
- organogramas;
- diagramas e ilustrações em que o texto da página depende da capacidade do usuário de compreender a imagem;
- infográficos;
- mapas mostrando locais ou outras informações como sistemas climáticos;
- os famosos CAPTCHAs.
Nesses cenário o atributo ALT não funciona bem, Dessa forma precisamos encontrar outras soluções. Escrevi um guia completo sobre como escrever textos alternativos.
Criando gráficos acessíveis
Como exemplo, vou usar o gráfico da pesquisa WebAim Million. Seu objetivo é mostrar os erros de acessibilidade das páginas na web.

Para criar gráficos acessíveis, podemos usar duas técnicas: tabelas semânticas e atributos ARIA.
Solução 1: usando tabelas
Essa solução é simples, basicamente vamos representar o gráfico em uma tabela HTML. Vale lembrar que marcar a tabela de forma semântica é importante.
Devemos colocar a tabela logo abaixo do gráfico, leitores de tela leem o HTML por ordem de declaração no DOM.
Dessa forma, usuários de leitores de tela terão várias formas de acesso, possibilitando assim, a navegabilidade nas informações.
Vamos usar duas abordagens com tabelas, a primeira será manter ela visível para todos, e a segunda exibiremos somente para os leitores de tela.
Exibindo a tabela
Para fins didáticos vou considerar somente o erro de baixo contraste e texto alternativo no exemplo. A estrutura HTML da nossa tabela será da seguinte forma:
<table>
<caption>Home pages with most common WCAG 2 failures</caption>
<tbody>
<tr>
<th scope="col">WCAG Failure Type</th>
<th scope="col">% of home pages in 2022</th>
<th scope="col">% of home pages in 2021</th>
<th scope="col">% of home pages in 2020</th>
<th scope="col">% of home pages in 2019</th>
</tr>
<tr>
<th scope="row">Low contrast text</td>
<td>83.9%</td>
<td>86.4%</td>
<td>86.3%</td>
<td>85.3%</td>
</tr>
<tr>
<th scope="row">Missing alternative text for images</td>
<td>55.4%</td>
<td>60.6%</td>
<td>66%</td>
<td>68%</td>
</tr>
</tbody>
</table>Detalhe importante estou usando o atributo <strong><em>scope</em></strong>, ele define o cabeçalho de uma coluna ou linha. Iremos usar os seguintes valores:
- row: o cabeçalho refere-se a todas as células da linha a que pertence;
- col: o cabeçalho refere-se a todas as células da coluna a que pertence.
Quando navegamos com o leitor de telas ele identifica esses atributos e conseguimos ter uma navegação mais linear e fluída dentro da tabela.
Ocultando tabela visualmente
A única diferença da tabela anterior é uso de uma classe CSS para ocultar a tabela visualmente, dessa forma somente o leitor de tela irá consumir a informação.
<table class="visually-hidden">
<caption>Home pages with most common WCAG 2 failures</caption>
<tbody>
<tr>
<th scope="col">WCAG Failure Type</th>
<th scope="col">% of home pages in 2022</th>
<th scope="col">% of home pages in 2021</th>
<th scope="col">% of home pages in 2020</th>
<th scope="col">% of home pages in 2019</th>
</tr>
<tr>
<th scope="row">Low contrast text</td>
<td>83.9%</td>
<td>86.4%</td>
<td>86.3%</td>
<td>85.3%</td>
</tr>
<tr>
<th scope="row">Missing alternative text for images</td>
<td>55.4%</td>
<td>60.6%</td>
<td>66%</td>
<td>68%</td>
</tr>
</tbody>
</table>Solução 2: usando atributos ARIA
Outra técnica interessante é utilizar o atributo aria-describedby, ele é utilizado para estabelecer um relacionamento entre widgets ou grupos e o texto que o descreve.
Também pode ser usado uma sequência de ids ou somente um. Ele não está limitado a controles de formulários. Pode ser usado em contextos globais dentro de um documento HTML.
<img src="grafico.png" aria-describedby="description" alt="Representação dos erros mais comuns da WCAG 2.1 nas Home pages mais famosas" />
<div id="description">
<h2>Taxa de falhas de baixo contraste em porcentagem por ano</h2>
<ul>
<li>Em 2019: 85.3%</li>
<li>Em 2020: 86.3%</li>
<li>Em 2021: 86.4%</li>
<li>Em 2022: 83.9%</li>
</ul>
</div>Com o aria-describedby aplicado, o leitor de telas irá ler o atributo alt e logo após será direcionado ao conteúdo da <div> que contém o ID com valor de description.
Dessa forma as duas informações se complementam e conseguimos passar uma informação com maior relevância para todos os usuários.
Conclusão
Percebemos que as adequações de acessibilidade para tornar a experiência mais acessível são simples. Entretanto, vale salientar que essas são algumas de várias soluções que podemos utilizar.
Tanto as tabelas como os atributos ARIA tem suas vantagens, devemos olhar o nosso contexto e tentar adequar a nossa realidade.
Me conte nos comentários as dificuldades que já teve nesse tema.
Referências
- https://accessibility.psu.edu/images/charts/
- https://www.w3.org/TR/WCAG21/#text-alternatives
- https://www.w3.org/WAI/WCAG21/Understanding/non-text-content.html
- https://www.w3.org/WAI/WCAG21/quickref/?showtechniques=111#non-text-content
- https://www.w3.org/WAI/WCAG21/Understanding/use-of-color.html
- https://www.w3.org/WAI/WCAG21/Techniques/general/G95.html#examples
- https://www.w3.org/WAI/WCAG21/Techniques/general/G73
- https://webaim.org/projects/million/
- https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-describedby
- https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th
