Skip to main content
Validação HTML

Valor inválido “rowgroup” para o atributo “role” no elemento “header”.

Sobre este problema HTML

A função rowgroup representa um grupo de linhas dentro de uma estrutura tabular — similar ao que <thead>, <tbody>, ou <tfoot> fornecem numa <table> HTML nativa. De acordo com a especificação ARIA, a função rowgroup deve ser usada em elementos que servem como contentores estruturais para linhas dentro de uma grid, table, ou treegrid. Um elemento <header> não é apropriado para esta função porque carrega o seu próprio significado semântico forte (tipicamente banner ou um cabeçalho seccional), e sobrepor-lhe role="rowgroup" cria um conflito que o validador W3C sinaliza.

Isto é importante por várias razões. Primeiro, as tecnologias assistivas dependem de atribuições de funções corretas para transmitir a estrutura de uma página. Quando um elemento <header> recebe role="rowgroup", os leitores de ecrã recebem sinais contraditórios sobre o que o elemento representa, o que pode confundir os utilizadores. Segundo, a especificação HTML restringe que funções ARIA podem ser aplicadas a determinados elementos — o elemento <header> não permite rowgroup como uma substituição de função válida.

Para corrigir este problema, você tem duas opções principais:

  1. Substitua o elemento <header> por um <div> — como <div> não tem função ARIA implícita, aceita livremente role="rowgroup".
  2. Use elementos nativos de tabela HTML — substitua a estrutura de tabela ARIA personalizada por <table>, <thead>, <tbody>, <tr>, <th>, e <td>, que fornecem a semântica correta sem requerer funções ARIA.

Exemplos

❌ Incorreto: role="rowgroup" num elemento <header>

<div role="table" aria-label="Quarterly Sales">
  <header role="rowgroup">
    <div role="row">
      <span role="columnheader">Quarter</span>
      <span role="columnheader">Revenue</span>
    </div>
  </header>
  <div role="rowgroup">
    <div role="row">
      <span role="cell">Q1</span>
      <span role="cell">$1.2M</span>
    </div>
  </div>
</div>

O validador reporta Valor inválido “rowgroup” para o atributo “role” no elemento “header” porque <header> não pode aceitar a função rowgroup.

✅ Opção de correção 1: Use um <div> em vez de <header>

<div role="table" aria-label="Quarterly Sales">
  <div role="rowgroup">
    <div role="row">
      <span role="columnheader">Quarter</span>
      <span role="columnheader">Revenue</span>
    </div>
  </div>
  <div role="rowgroup">
    <div role="row">
      <span role="cell">Q1</span>
      <span role="cell">$1.2M</span>
    </div>
  </div>
</div>

Um <div> é semanticamente neutro, portanto role="rowgroup" é perfeitamente válido nele.

✅ Opção de correção 2: Use elementos nativos de tabela HTML

<table>
  <caption>Quarterly Sales</caption>
  <thead>
    <tr>
      <th>Quarter</th>
      <th>Revenue</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Q1</td>
      <td>$1.2M</td>
    </tr>
  </tbody>
</table>

Elementos nativos de tabela como <thead> e <tbody> carregam implicitamente a função rowgroup, portanto não são necessários atributos ARIA. Esta abordagem é geralmente preferida porque fornece o melhor suporte de acessibilidade de forma nativa e resulta numa marcação mais limpa e sustentável. Use apenas funções de tabela ARIA quando não puder usar tabelas HTML nativas (por exemplo, ao construir um layout de grelha personalizado que requer CSS não-tabular).

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.