Skip to main content
Validação HTML

Valor inválido “list” para o atributo “role” no elemento “section”.

Sobre este problema HTML

O elemento section tem semântica ARIA implícita — mapeia para role="region" quando recebe um nome acessível. De acordo com a especificação ARIA in HTML, cada elemento HTML tem um conjunto de roles que pode assumir, e list não está entre os roles permitidos para section. Quando o validador W3C encontra role="list" num section, sinaliza isto como um valor inválido porque o role entra em conflito com o propósito pretendido do elemento como um marco de secção.

Isto é importante por várias razões. Primeiro, tecnologias assistivas como leitores de ecrã dependem do emparelhamento correto de elementos e roles para transmitir a estrutura da página. Um section anunciado como uma lista cria uma experiência confusa e contraditória — o DOM subjacente diz “isto é uma secção de documento” enquanto o role ARIA diz “isto é uma lista.” Segundo, os browsers podem lidar com semânticas conflituantes de forma imprevisível, levando a comportamentos inconsistentes entre plataformas. Terceiro, a especificação HTML define explicitamente quais roles são válidos em cada elemento, e violar estas regras significa que a sua marcação não está em conformidade.

A melhor correção é quase sempre usar elementos de lista HTML nativos. Os elementos ul, ol e li fornecem semântica de lista incorporada que todos os browsers e tecnologias assistivas compreendem sem atributos ARIA adicionais. Os elementos nativos também lidam corretamente com a interação por teclado e gestão de foco de forma automática.

Se o seu design requer um componente personalizado onde a marcação de lista nativa não é viável — por exemplo, uma grelha de cartões complexa que funciona como uma lista — pode aplicar role="list" a um elemento semanticamente neutro como div ou span. Cada filho direto que atua como um item de lista deve então receber role="listitem". Esta abordagem satisfaz a especificação ARIA evitando o conflito elemento-role.

Se realmente precisa de um section para agrupar conteúdo dentro de uma região de página e a lista é apenas parte dessa secção, aninhe uma lista adequada dentro do section em vez de tentar fazer o próprio section comportar-se como uma lista.

Exemplos

❌ Incorreto: role="list" num elemento section

Isto desencadeia o erro de validação porque list não é um role permitido para section.

<section role="list">
  <div>Item A</div>
  <div>Item B</div>
</section>

✅ Corrigido: Usar elementos de lista nativos (recomendado)

As listas nativas fornecem o melhor suporte de acessibilidade sem necessidade de ARIA.

<ul>
  <li>Item A</li>
  <li>Item B</li>
</ul>

✅ Corrigido: Aninhar uma lista dentro do section

Se precisar da semântica de seccionamento de section juntamente com uma lista, aninhe a lista dentro dele.

<section aria-labelledby="resources-heading">
  <h2 id="resources-heading">Resources</h2>
  <ul>
    <li>Item A</li>
    <li>Item B</li>
  </ul>
</section>

✅ Corrigido: Roles ARIA num contentor neutro

Use isto apenas quando a marcação de lista nativa não for possível, como para componentes de UI altamente personalizados.

<div role="list">
  <div role="listitem">Item A</div>
  <div role="listitem">Item B</div>
</div>

✅ Corrigido: Remover o role completamente

Se o conteúdo não é realmente uma lista, simplesmente remova o atributo role e deixe o section carregar a sua semântica natural.

<section>
  <h2>Updates</h2>
  <div>Item A</div>
  <div>Item B</div>
</section>

Encontre problemas como este automaticamente

O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.