Ir para o conteúdo principal
Niquelao Acessibilidade web e desenvolvimento front-end em espanhol: padrões WCAG, widgets acessíveis e extensões para Firefox, explicados com código real.

Alguns links neste site são links de afiliados: se você comprar através deles, podemos ganhar uma comissão sem custo adicional para você. Isso nunca afeta nossas recomendações. Consulte nossa divulgação de afiliados para mais detalhes. Divulgação de afiliados.

Exemplos de funções ARIA: um guia completo

Os exemplos de funções ARIA mostram como os atributos de funções mapeiam elementos de interface para a árvore de acessibilidade, e a especificação WAI-ARIA 1.2 define 6 categorias de funções – widget, estrutura de documento, ponto de referência, região ativa, janela e resumo – cobrindo mais de 80 funções concretas. Este guia apresenta exemplos práticos prontos para serem copiados para cada categoria, bem como as regras que determinam quando uma função ajuda e quando prejudica ativamente.

Principais conclusões

  • As funções ARIA informam à tecnologia assistiva o que é um item; elas nunca adicionam comportamento, foco ou suporte de teclado por conta própria.
  • A primeira regra para usar ARIA é preferir elementos HTML nativos, que já carregam funções, estados e gerenciamento de teclado implícitos.
  • As seis categorias de funções WAI-ARIA 1.2 são widget, estrutura de documento, ponto de referência, região ativa, janela e resumo — funções abstratas nunca devem aparecer em sua marcação.
  • As funções de referência são as ARIAs mais econômicas e de menor risco que você pode adicionar a um site XHTML/CSS existente.
  • As funções de widget quase sempre exigem mapeamento JavaScript para interação do teclado e manipulação de estado, ou criam uma experiência pior do que HTML simples.
  • Validar cada função com leitor de tela e verificador automatizado; uma função válida na especificação ainda pode estar errada para o seu conteúdo.

O que as funções ARIA realmente fazem

As funções ARIA são tokens que você coloca no atributo role para substituir ou fornecer a identidade semântica de um elemento na árvore de acessibilidade. Um <div role="button"> diz a um leitor de tela para anunciar “botão”, mas o navegador ainda o trata como um contêiner genérico: não é focável, não responde a Enter ou Espaço e não possui um estado desabilitado.

Essa lacuna entre a semântica anunciada e o comportamento real é a fonte mais comum de falha do ARIA. Esses são exemplos comuns de funções ARIA de como a semântica pode divergir do comportamento.

A especificação WAI-ARIA, mantida pelo Accessible Rich Internet Applications Working Group do W3C, define funções, bem como estados e propriedades. As funções são a camada “o que é”; estados e propriedades como aria-expanded, aria-checked e aria-label são a camada “em que condição está”. Uma função sem seus estados obrigatórios está incompleto — role="checkbox" requer aria-checked, e role="combobox" requer aria-expanded mais uma caixa de listagem controlada.

Os elementos HTML nativos carregam funções implícitas. <button> corresponde à função do botão, <nav> à navegação, <h1> até <h6> ao cabeçalho e <input type="checkbox"> à caixa de seleção. Como o navegador fornece automaticamente a função, o comportamento do teclado e o estado, a primeira regra de uso do ARIA — documentada no ARIA Authoring Practices Guide do W3C — é usar a semântica nativa sempre que existir um elemento equivalente. Procure funções explícitas somente quando nenhum elemento nativo for adequado, como uma visualização em árvore personalizada ou um painel com guias construído a partir de <div>s.

As seis categorias de funções WAI-ARIA

WAI-ARIA 1.2 organiza funções em seis categorias, e saber a qual categoria uma função pertence informa quanto JavaScript você deve a ela. Aqui estão alguns exemplos comuns de funções ARIA:

Relacionado: — com plano gratuito para começar hoje mesmo.

CategoriaFinalidadeFunções de exemploJavaScript necessário?
WidgetControles interativos“button, checkbox, tab, slider, combobox`Sim – teclado + estado
Estrutura do documentoOrganização de conteúdo“heading, list, listitem, table, article`Não
MarcoRegiões de página para navegação“banner, main, navigation, complementary`Não
Região ativaAnuncie atualizações dinâmicasalert, status, log, timerNormalmente — para acionar atualizações
JanelaSubjanelas e caixas de diálogo“dialog, alertdialog`Sim — gestão de foco
AbstrataPapéis de superclasse, nunca criadoswidget, “input, section, landmark`N/A — não use

Papéis abstratos existem apenas para organizar a taxonomia. Escrever role="input" ou role="section" em seu HTML é um erro de validação e produz anúncios imprevisíveis porque essas funções não têm comportamento definido para tecnologia assistiva.

Exemplos de funções de referência

As funções de referência são os exemplos de funções ARIA mais seguros e impactantes que você pode adicionar a um site XHTML/CSS antigo porque não requerem JavaScript e mapeiam diretamente para regiões que você já possui. Um esqueleto de página típico:

<header role="banner">
  <nav role="navigation" aria-label="Principal">
    <ul>...</ul>
  </nav>
</header>
<main role="main">
  <article>...</article>
  <aside role="complementary" aria-label="Artículos relacionados">...</aside>
</main>
<footer role="contentinfo">...</footer>

Cada função de marcador corresponde a um elemento nativo - banner para <header> no nível superior, main para <main>, navigation para <nav>, complementary para <aside>, contentinfo para <footer>. Quando você usa o elemento nativo, a função fica implícita e você não deve repeti-la. O atributo role explícito ganha seu lugar apenas quando você está preso a uma marcação <div> que não pode ser modificada, o que é comum em modelos mais antigos e na saída do CMS.

Vale a pena dar uma olhada: — Acessibilidade gerenciada: automatização combinada com revisão humana.

Duas advertências são necessárias aqui. Primeiro, banner, main e contentinfo devem aparecer uma vez por página; vários pontos de referência “principais” perturbam a navegação. Segundo, quando existem vários pontos de referência do mesmo tipo – digamos, três elementos <nav> – forneça a cada um um aria-label separado para que os usuários de leitores de tela possam distingui-los na lista de pontos de referência. Um nav sem rótulo é anunciado da mesma forma que seus irmãos, o que vai contra o propósito.

Exemplos de funções de widget

As funções de widget são onde o ARIA se torna poderoso e perigoso em igual medida. Cada função de widget tem um contrato implícito: teclas de teclado específicas, estados específicos e comportamento de foco específico. O Guia de Práticas de Autoria ARIA publica o padrão completo de cada um. Esses exemplos de papéis de ária ilustram a complexidade envolvida.

Um botão de alternância, por exemplo, precisa de aria-pressed para comunicar seu estado ligado/desligado:

<button type="button" aria-pressed="false" id="mute">
  Silenciar
</button>

O elemento <button> fornece a função, foco e manipulação de Enter/Space; JavaScript apenas alterna aria-pressed entre "false" e "true". Esta é a forma ideal de uso de ARIA – elemento nativo, ARIA mínimo, script pequeno.

Uma interface de aba personalizada construída a partir de <div>s é o caso oposto. Ele precisa de role="tablist" no contêiner, role="tab" em cada aba, role="tabpanel" em cada painel, aria-selected na aba ativa, aria-controls ligando a aba ao painel e navegação com teclas de seta entre as abas.

Se você perder alguma delas, o widget se anuncia como guias, mas se comporta como texto estático. O mesmo se aplica a role="slider" (requer aria-valuenow, aria-valuemin, aria-valuemax e teclas de seta), role="combobox" (requer aria-expanded e uma caixa de listagem controlada), e role="tree" (requer aria-expanded e travessia completa da tecla de seta).

Relacionado: — A que acredita sua experiência e acessibilidade.

Uma regra de decisão útil: se houver um elemento nativo que faça o trabalho — <button>, <input type="checkbox">, <select>, <details> — use-o e ignore completamente a função do widget. Reserve funções de widget personalizadas para controles verdadeiramente novos e reserve o JavaScript para implementar o padrão de teclado completo antes do envio.

Exemplos de estrutura de documento e região ativa

As funções da estrutura do documento descrevem relacionamentos de conteúdo quando os elementos nativos não estão disponíveis. Esses exemplos de papéis de ária incluem role="heading" com aria-level, que é o resgate clássico para um estilo <div> agindo como um título:

<div role="heading" aria-level="2">Novedades do mês</div>

O atributo aria-level é obrigatório aqui — uma função de título sem nível é anunciada sem classificação, quebrando o contorno do documento. Da mesma forma, role="list" e role="listitem" restauram a semântica da lista quando CSS como list-style: none ou um flex container os remove em alguns navegadores, e role="table", role="row", role="columnheader" e role="cell" reconstroem uma tabela de dados a partir da marcação <div>. Na prática, a reestruturação em elementos reais <ul>, <ol> e <table> quase sempre requer menos trabalho do que manter um conjunto completo de funções de estrutura.

Se você estiver comprando: — Superposição de IA que promete cumprimento WCAG em 48 horas.

As funções da região ativa anunciam a alteração do conteúdo sem recarregar a página. role="alert" interrompe imediatamente o leitor de tela e acomoda mensagens de erro e notificações urgentes; role="status" espera educadamente e aceita confirmações como “Guardado”; role="log" se ajusta aos feeds de bate-papo e atividades; role="timer" corresponde a contagens regressivas. O detalhe crítico é que o contêiner da região ativa deve existir no DOM antes do conteúdo ser alterado — injetar um novo elemento com role="alert" e seu texto ao mesmo tempo muitas vezes não produz nenhum anúncio, porque a região não estava presente para ser monitorada. Crie um <div role="status"> vazio no carregamento da página e atualize seu texto posteriormente.

Erros comuns de função ARIA

Funções redundantes estão no topo da lista. Esses exemplos de papéis de ária, como <button role="button"> e <nav role="navigation">, não acrescentam nada e desorganizam a marcação; o papel implícito já existe. A mesma redundância aparece quando os desenvolvedores adicionam role="heading" a um <h2>.

Os estados obrigatórios ausentes vêm em segundo lugar. role="checkbox" sem aria-checked, role="slider" sem aria-valuenow e role="combobox" sem aria-expanded produzem anúncios incompletos que enganam os usuários. A especificação lista os estados e propriedades necessários para cada função, e os verificadores automatizados sinalizam sua ausência.

O uso indevido de função no elemento errado é o terceiro. Colocar role="button" em um <a href> substitui a semântica do link e interrompe o comportamento esperado, como abrir em uma nova guia. Colocar role="presentation" ou role="none" em um elemento focável remove sua semântica enquanto o deixa na ordem de tabulação, criando um elemento focável sem identidade anunciada. E usar funções abstratas como role="widget" ou role="input" é sempre um erro.

Finalmente, as funções ARIA não podem consertar um DOM quebrado. Um role="tabpanel" aninhado em seu próprio role="tab" produz uma árvore sem sentido, não importa quantos atributos você adicione. Corrija a estrutura primeiro e depois coloque o ARIA por cima.

Como testar funções ARIA

Testar funções ARIA requer vários métodos, pois ferramentas automatizadas detectam erros de validade, mas não incompatibilidades semânticas. Comece com um verificador de acessibilidade - ax DevTools, WAVE ou Lighthouse - para detectar funções inválidas, atributos obrigatórios ausentes e funções abstratas em sua marcação. Essas ferramentas são rápidas e detectam erros mecânicos.

Siga com um passe de leitor de tela. NVDA com Firefox no Windows, JAWS com Chrome e VoiceOver com Safari no macOS expõem a árvore de acessibilidade de maneira diferente, e uma função que é anunciada corretamente em um pode não ser anunciada em outro. Navegue por ponto de referência e por título para confirmar se suas funções de estrutura produzem o contorno esperado e, em seguida, navegue por cada widget para verificar se a função anunciada, o estado e o comportamento do teclado correspondem.

Inspecione a árvore de acessibilidade diretamente no Chrome ou Firefox DevTools, onde o painel “Acessibilidade” exibe a função calculada e o nome de qualquer elemento. Isso revela a lacuna entre a função que você escreveu e a função que o navegador realmente expõe - a maneira mais rápida de detectar uma função que é substituída por um pai ou totalmente ignorada.

Fontes e leituras adicionais

  • WAI-ARIA — Wikipedia: Web Accessibility Initiative – Accessible Rich Internet Applications (WAI-ARIA) é uma especificação técnica publicada pelo World Wide Web Consortium (W3C) que…

Perguntas frequentes

Quais são as funções ARIA e como funcionam?

As funções ARIA são valores no atributo role que definem a identidade de um elemento na árvore de acessibilidade, para que os leitores de tela o anunciem corretamente. Eles mudam apenas a semântica, não a aparência, o foco ou o comportamento do teclado. A especificação WAI-ARIA 1.2 define seis categorias de funções e mais de 80 funções concretas, cada uma com estados e propriedades necessários.

Quando devo usar funções ARIA em vez de HTML nativo?

Use funções ARIA somente quando nenhum elemento HTML nativo fornecer a semântica necessária. Elementos nativos como <button>, <nav> e <input type="checkbox"> carregam funções implícitas, além de suporte de teclado integrado e gerenciamento de estado. A primeira regra de uso do ARIA é preferir a semântica nativa e adicionar funções explícitas apenas para widgets personalizados ou marcação legada que você não pode reestruturar.

Qual é a diferença entre funções ARIA e atributos ARIA?

As funções ARIA respondem “o que é este item”, enquanto atributos ARIA como aria-expanded, aria-checked e aria-label respondem “em que estado ele está” ou “como é chamado”. Os papéis e seus atributos obrigatórios funcionam juntos: como exemplos de papéis de ária, role="checkbox" está incompleto sem aria-checked, e role="combobox" precisa de aria-expanded mais uma caixa de listagem controlada.

Posso usar funções ARIA em qualquer elemento HTML?

As funções ARIA podem ser aplicadas à maioria dos elementos, mas algumas combinações são inválidas ou prejudiciais. Papéis abstratos como widget e input nunca devem ser criados. Alterar a função de um link para role="button" quebra o comportamento esperado do link, e role="presentation" em um elemento focável remove sua semântica enquanto o deixa em ordem de tabulação.

As funções ARIA funcionam sem JavaScript?

A estrutura do documento e as funções de referência funcionam sem JavaScript porque apenas modificam a semântica. Funções de widget como tab, slider e combobox requerem JavaScript para implementar a interação do teclado e atualizar estados — sem ele, o elemento se anuncia como um controle, mas não se comporta como tal, o que é pior que o HTML simples.

Como posso verificar se minhas funções ARIA estão corretas?

Combine testes automatizados e manuais. Execute axe DevTools, WAVE ou Lighthouse para detectar funções inválidas e atributos obrigatórios ausentes e, em seguida, teste com NVDA, JAWS e VoiceOver para confirmar anúncios e comportamento do teclado. O painel Acessibilidade no Chrome e Firefox DevTools exibe a função computada, revelando quaisquer funções que o navegador substitui ou ignora.

Perguntas frequentes

Quais são as funções ARIA e como funcionam?

Os papéis ARIA são valores no atributo role que definem a identidade de um elemento na árvore de acessibilidade, para que os leitores de tela o anunciem corretamente. Eles mudam apenas a semântica, não a aparência, o foco ou o comportamento do teclado. A especificação WAI-ARIA 1.2 define seis categorias de funções e mais de 80 funções concretas, cada uma com estados e propriedades necessários.

Quando devo usar funções ARIA em vez de HTML nativo?

Use funções ARIA somente quando nenhum elemento HTML nativo fornecer a semântica necessária. Elementos nativos como <button>, <nav> e <input type='checkbox'> carregam funções implícitas, além de suporte integrado ao teclado e gerenciamento de estado. A primeira regra de uso do ARIA é preferir a semântica nativa e adicionar funções explícitas apenas para widgets personalizados ou marcação legada que você não pode reestruturar.

Qual é a diferença entre funções ARIA e atributos ARIA?

As funções ARIA respondem 'o que é este item', enquanto atributos ARIA como aria-expanded, aria-checked e aria-label respondem 'em que estado ele está' ou 'como é chamado'. As funções e seus atributos obrigatórios funcionam juntos: como exemplos de funções de ária, role='checkbox' está incompleto sem aria-checked, e role='combobox' precisa de aria-expanded mais uma caixa de listagem controlada.

Posso usar funções ARIA em qualquer elemento HTML?

As funções ARIA podem ser aplicadas à maioria dos elementos, mas algumas combinações são inválidas ou prejudiciais. Funções abstratas, como widget e entrada, nunca devem ser criadas. Alterar a função de um link para role='button' quebra o comportamento esperado do link, e role='presentation' em um elemento focável remove sua semântica, deixando-o na ordem de tabulação.

As funções ARIA funcionam sem JavaScript?

A estrutura do documento e as funções de referência funcionam sem JavaScript porque apenas modificam a semântica. Funções de widget como guia, controle deslizante e caixa de combinação exigem JavaScript para implementar a interação do teclado e atualizar estados — sem ele, o elemento se anuncia como um controle, mas não se comporta como tal, o que é pior que o HTML simples.

Como posso verificar se minhas funções ARIA estão corretas?

Combine testes automatizados e manuais. Execute ax DevTools, WAVE ou Lighthouse para detectar funções inválidas e atributos obrigatórios ausentes e, em seguida, teste com NVDA, JAWS e VoiceOver para confirmar anúncios e comportamento do teclado. O painel Acessibilidade no Chrome e Firefox DevTools exibe a função computada, revelando quaisquer funções que o navegador substitui ou ignora.


Cumprir WCAG sem tocar no código?

Superposição de IA que promete cumprimento WCAG em 48 horas