Introdução ao ARIA: role, aria-label e aria-hidden

Dê um primeiro passo no mundo do ARIA e aprenda a enriquecer elementos HTML com informações extras para tecnologias assistivas.

Até agora, aprendemos que o HTML semântico é a base da acessibilidade. Usar as tags corretas (<button>, <nav>, <h1>, etc.) já fornece muita informação para tecnologias assistivas como leitores de tela. No entanto, nem sempre o HTML semântico é suficiente.

Às vezes, precisamos criar componentes de interface complexos (como abas, acordeões, carrosséis) que não têm uma tag HTML semântica equivalente, ou precisamos adicionar informações extras a elementos HTML existentes. É aí que entra o ARIA (Accessible Rich Internet Applications).

O ARIA é um conjunto de atributos especiais que você pode adicionar a elementos HTML para fornecer informações adicionais sobre seu papel, estado e propriedades para tecnologias assistivas.


A regra de ouro do ARIA: "Use HTML semântico primeiro"

Antes de pensar em ARIA, sempre se pergunte: "Existe uma tag HTML semântica que já faz o que eu preciso?". Se sim, use-a! O HTML nativo é sempre preferível ao ARIA, pois é mais robusto, tem suporte nativo e não requer JavaScript para funcionar.

  • Exemplo: Se você precisa de um botão, use <button>. Não use <div role="button">.

Atributos ARIA essenciais: role, aria-label e aria-hidden

Vamos explorar alguns dos atributos ARIA mais comuns e úteis.

1. role: Definindo o papel de um elemento

O atributo role informa às tecnologias assistivas qual é o "papel" de um elemento na interface do usuário, quando o HTML nativo não consegue expressar isso adequadamente.

Como funciona:

  • Você adiciona role="nome-do-papel" a um elemento HTML.
  • Existem diversos papéis ARIA (ex: button, checkbox, tab, alert, navigation, main).

Exemplo:

Imagine que, por algum motivo, você não pode usar a tag <nav> para sua navegação principal. Você poderia usar um <div> e adicionar o role="navigation":

<!DOCTYPE html>
<html lang="pt-BR">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Exemplo de ARIA Role</title>
  <style>
    body { font-family: sans-serif; margin: 20px; }
    .minha-nav {
      background-color: #f0f0f0;
      padding: 10px;
      border-radius: 5px;
    }
    .minha-nav ul { list-style: none; padding: 0; margin: 0; display: flex; gap: 15px; }
    .minha-nav a { text-decoration: none; color: dodgerblue; font-weight: bold; }
  </style>
</head>
<body>

  <h1>Minha Página</h1>

  <!-- Exemplo de uso de role="navigation" em um div -->
  <div role="navigation" class="minha-nav">
    <ul>
      <li><a href="#">Início</a></li>
      <li><a href="#">Produtos</a></li>
      <li><a href="#">Contato</a></li>
    </ul>
  </div>

  <p>Este é o conteúdo principal da página.</p>

</body>
</html>

Importante sobre role:

  • Não substitua HTML semântico: Se você pode usar <nav>, use <nav>. role="navigation" em um <div> é um fallback, não a primeira escolha.
  • Melhora a semântica: Ajuda leitores de tela a entenderem a função do elemento.

2. aria-label: Fornecendo um rótulo acessível

O atributo aria-label é usado para fornecer um rótulo de texto acessível para um elemento quando não há um rótulo visível ou quando o rótulo visível não é suficiente.

Como funciona:

  • Você adiciona aria-label="Texto do rótulo" a um elemento.
  • O texto do aria-label é lido por tecnologias assistivas em vez (ou em adição) ao conteúdo visível do elemento.

Exemplo:

  • Botão de fechar (apenas ícone):

    <button aria-label="Fechar">X</button>
    
  • Campo de busca sem <label> visível (não recomendado, mas possível):

    <input type="search" aria-label="Pesquisar no site">
    
  • Navegação com múltiplos menus (para diferenciar):

    <nav aria-label="Navegação Principal">...</nav>
    <nav aria-label="Navegação Secundária">...</nav>
    

Importante sobre aria-label:

  • Não substitua <label>: Para campos de formulário, sempre use a tag <label> visível associada ao campo. aria-label é para casos onde um rótulo visível não é prático ou suficiente.
  • Seja conciso e descritivo: O texto deve ser claro e direto.

3. aria-hidden: Escondendo conteúdo de tecnologias assistivas

O atributo aria-hidden é usado para indicar que um elemento e todos os seus descendentes não devem ser expostos a tecnologias assistivas.

Como funciona:

  • Você adiciona aria-hidden="true" a um elemento.
  • O conteúdo ainda é visível na tela, mas é ignorado por leitores de tela.

Exemplo:

  • Ícones puramente decorativos: Se você usa um ícone que é apenas visual e não adiciona nenhuma informação semântica (e não tem alt ou aria-label em seu elemento pai), você pode escondê-lo.

    <span class="icone-decorativo" aria-hidden="true"></span>
    
  • Conteúdo duplicado ou fora da tela: Em alguns componentes interativos (como carrosséis), pode haver conteúdo que está visualmente fora da tela, mas ainda é acessível por leitores de tela. aria-hidden="true" pode ser usado para escondê-lo até que seja relevante.

Importante sobre aria-hidden:

  • Não esconda conteúdo importante: Use com extrema cautela. Nunca esconda conteúdo que seja essencial para a compreensão ou interação do usuário.
  • Visibilidade visual vs. acessibilidade: aria-hidden afeta apenas a acessibilidade para tecnologias assistivas, não a visibilidade visual.

Resumindo

  • ARIA (Accessible Rich Internet Applications) é um conjunto de atributos para adicionar informações extras a elementos HTML, melhorando a acessibilidade para tecnologias assistivas.
  • Regra de Ouro: Use HTML semântico primeiro! ARIA é um complemento, não um substituto.
  • role: Define o papel de um elemento (ex: role="button", role="navigation").
  • aria-label: Fornece um rótulo de texto acessível quando não há um rótulo visível ou ele é insuficiente.
  • aria-hidden="true": Esconde um elemento e seus descendentes de tecnologias assistivas (use com cautela para conteúdo decorativo ou fora da tela).

O ARIA é uma ferramenta poderosa, mas deve ser usada com responsabilidade e conhecimento para evitar criar mais problemas de acessibilidade do que resolver.