colspan: uma célula em várias colunas
colspan="n" deixa uma célula com a largura de n colunas. A linha em que ela está passa a ter n - 1 células a menos. Aqui o total ocupa as duas primeiras colunas:
A última linha tem duas células, mas a primeira conta como duas, então a linha continua somando três colunas como as outras.
rowspan: uma célula em várias linhas
rowspan="n" deixa uma célula com a altura de n linhas. As linhas abaixo dela deixam essa coluna de fora, porque a célula alta já a preenche:
As linhas de Bob e Cy têm só um <td>: a coluna Team já está ocupada por "Design". Nada no HTML marca isso, então leia uma tabela com rowspan de cima para baixo e vá contando quais colunas ainda estão ocupadas.
colspan e rowspan juntos: uma grade de horários
Uma célula pode se estender nas duas direções. Uma grade de horários é o caso clássico, com algumas aulas durando dois horários e algumas acontecendo em dois dias:
Conte a linha das 10:00: o cabeçalho de horário, depois Mon está ocupada por HTML da linha de cima, depois Lab preenche Tue e Wed. Às 11:00, Mon está livre de novo e Lab ainda ocupa Tue e Wed, então a linha tem uma célula de dados.
Contando as células para a tabela não ficar torta
Toda linha precisa somar o mesmo número de colunas, contando o colspan de cada célula e as colunas ocupadas por células com rowspan vindas de cima. Quando uma linha tem uma célula a mais, o navegador cria uma nova coluna para ela e a tabela fica com a borda irregular:
Na tabela errada, a segunda linha esqueceu que A ocupa a sua primeira coluna, então D cai numa terceira coluna que nenhuma outra linha tem. A correção é apagar uma célula. O mesmo erro com colspan é manter todas as células originais na linha que tem a célula larga.
Uma célula a menos é o problema oposto: a linha termina antes e deixa um buraco no final.
Cabeçalhos agrupados com colspan
Um cabeçalho pode se estender pelas colunas que ele nomeia, acima de uma linha de cabeçalhos mais específicos. Marque com scope="colgroup" para que os leitores de tela o apliquem a todas as colunas abaixo dele:
"City" ocupa as duas linhas de cabeçalho com rowspan="2", e cada mês ocupa as suas duas colunas com colspan="2". Os elementos <colgroup> definem os grupos de colunas a que scope="colgroup" se refere. Um leitor de tela na célula 31 de Rome pode então dizer "Rome, July, High, 31". Para o resto da estrutura da tabela, veja tabela HTML.
Use spans só para estrutura real
Spans deixam a tabela mais difícil de ler com leitor de tela e mais difícil de ordenar, filtrar ou copiar para uma planilha. Use onde os dados realmente estão agrupados (um total, um cabeçalho acima de subcolunas, uma aula de duas horas). Se uma tabela precisa de muitos spans, duas tabelas mais simples costumam ser mais claras.
Erros comuns
- Deixar as células ocupadas no lugar. Uma célula com
colspan="2"substitui duas células; apague uma das originais. - Esquecer as linhas abaixo de um
rowspan. Cada uma delas precisa de uma célula a menos. - Escrever
colspanno<tr>. Só funciona em<td>e<th>. - Spans para layout visual, como uma faixa de banner numa tabela de layout de página. Use CSS grid para layout.
colspan="100%"para dizer "a largura toda". O navegador lê só os dígitos iniciais, então essa célula ocupa 100 colunas e adiciona colunas vazias à tabela. O valor é um número inteiro de colunas.
Perguntas frequentes
O que o colspan faz no HTML?
colspan faz um <td> ou <th> se estender por várias colunas: <td colspan="3"> ocupa o lugar de três células na sua linha. Essa linha então precisa de duas células a menos que as outras.
O que o rowspan faz no HTML?
rowspan faz uma célula se estender para baixo por várias linhas: <td rowspan="2"> preenche a sua linha e a de baixo. A próxima linha precisa deixar essa coluna de fora, porque a célula de cima já a ocupa.
Uma célula pode usar colspan e rowspan juntos?
Sim. <td colspan="2" rowspan="2"> ocupa um bloco de duas colunas por duas linhas. Cada linha que ela atravessa precisa de duas células próprias a menos.
Por que minha tabela tem uma célula a mais sobrando?
Uma linha tem mais células que as outras quando os spans são contados. Normalmente uma linha abaixo de um rowspan ainda lista uma célula para a coluna ocupada, ou uma linha com colspan manteve todas as células originais. Remova o <td> a mais.
Qual é o valor máximo de colspan?
Os navegadores limitam colspan a 1000 e rowspan a 65534. Em colspan, um valor 0 ou que não começa com um dígito é tratado como 1.