Sobre esta regra de acessibilidade
O role meter no ARIA representa uma medição escalar dentro de um intervalo conhecido — pense num indicador que mostra um valor como a temperatura do CPU, a força da palavra-passe ou a capacidade de armazenamento. Quando um leitor de ecrã encontra um elemento com role="meter", anuncia o elemento como um medidor, mas sem um nome acessível, não consegue transmitir o que está a ser medido. O utilizador ouve algo como “medidor” sem contexto, o que é efetivamente sem significado.
Este problema afeta principalmente utilizadores que são cegos ou têm baixa visão e dependem de leitores de ecrã, bem como utilizadores com deficiências motoras que podem navegar através de tecnologias assistivas. Relaciona-se com WCAG 2.0/2.1/2.2 Critério de Sucesso 1.1.1: Conteúdo Não-textual (Nível A), que exige que todo o conteúdo não-textual tenha uma alternativa textual que serve um propósito equivalente. Um medidor sem nome falha em fornecer esta alternativa textual.
Como corrigir
Certifique-se de que cada elemento com role="meter" tem um nome acessível claro e descritivo usando um destes métodos:
-
aria-label— Adicione texto descritivo diretamente ao elemento. -
aria-labelledby— Referencie outro elemento visível que contém o texto da etiqueta. O elemento referenciado deve existir e conter texto não vazio. -
title— Use o atributotitlecomo método de nomeação alternativo (emboraaria-labelouaria-labelledbysejam geralmente preferidos).
O nome deve descrever claramente o que o medidor está a medir para que os utilizadores compreendam o seu propósito no contexto.
Exemplos
Incorreto: Medidor sem nome acessível
O seguinte medidor não tem nome algum. Um leitor de ecrã anunciá-lo-á como um medidor mas não consegue dizer ao utilizador o que mede.
<div role="meter" aria-valuemin="0" aria-valuemax="100" aria-valuenow="75"></div>
Incorreto: aria-label vazio
Um aria-label vazio é equivalente a não ter nome.
<div role="meter" aria-label="" aria-valuemin="0" aria-valuemax="100" aria-valuenow="75"></div>
Incorreto: aria-labelledby referenciando um elemento inexistente ou vazio
Se o elemento referenciado não existe ou não tem conteúdo textual, o medidor ainda não tem um nome acessível.
<div role="meter" aria-labelledby="nonexistent" aria-valuemin="0" aria-valuemax="100" aria-valuenow="75"></div>
<div role="meter" aria-labelledby="empty-label" aria-valuemin="0" aria-valuemax="100" aria-valuenow="75"></div>
<div id="empty-label"></div>
Correto: Usando aria-label
<div role="meter" aria-label="Utilização do disco" aria-valuemin="0" aria-valuemax="100" aria-valuenow="75"></div>
Correto: Usando aria-labelledby
<span id="meter-label">Nível da bateria</span>
<div role="meter" aria-labelledby="meter-label" aria-valuemin="0" aria-valuemax="100" aria-valuenow="42"></div>
Correto: Usando o atributo title
<div role="meter" title="Intensidade do sinal" aria-valuemin="0" aria-valuemax="5" aria-valuenow="3"></div>
Correto: Usando o elemento nativo <meter> com um <label>
Quando possível, prefira o elemento HTML nativo <meter>, que tem semântica incorporada e pode ser associado com um <label>.
<label for="fuel">Nível de combustível</label>
<meter id="fuel" min="0" max="100" value="68">68%</meter>
Learn more:
Ajude-nos a melhorar os nossos guias
Detecte problemas de acessibilidade automaticamente
O Rocket Validator examina milhares de páginas com Axe Core e o W3C Validator, encontrando problemas de acessibilidade em todo o seu site.