Menu

Borda da tabela HTML: collapse, linhas e cantos arredondados

Como colocar bordas numa tabela HTML com CSS: linhas simples com border-collapse, border-spacing, só linhas horizontais, só bordas internas, cantos arredondados e por que o atributo border está obsoleto.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Como colocar borda numa tabela

Tabelas não têm bordas por padrão. Adicione com CSS: uma border em cada célula desenha a grade, e border-collapse: collapse na tabela junta cada par de bordas vizinhas numa só linha.

O atalho border recebe uma largura, um estilo e uma cor, em qualquer ordem: 1px solid #6b7280. Coloque em th, td, não só em table: uma borda na tabela desenha só a moldura externa.

border-collapse: separate vs collapse

border-collapse decide se as células compartilham bordas.

ValorResultado
separate (padrão)Cada célula tem a sua própria borda, com um espaço entre as células definido por border-spacing
collapseCélulas vizinhas compartilham uma borda; border-spacing é ignorado

Na tabela separate dá para ver as duas camadas: a moldura azul da tabela e uma caixa âmbar separada em volta de cada célula, com border-spacing entre elas. Troque 6px por 0 e as células se encostam, mas as linhas continuam duplas. Só collapse as junta.

Quando duas bordas em collapse se encontram e são diferentes, a mais larga vence. Com a mesma largura, o estilo decide (double vence solid, que vence dashed e dotted), e no empate a borda da célula vence a da linha, que vence a da tabela. Por isso a borda externa da tabela em collapse é âmbar, e não azul: as células e a tabela têm bordas de 2px solid ali, e as células vencem.

Só linhas horizontais, ou só linhas internas

A maioria das tabelas modernas não desenha todas as linhas. Dois padrões comuns:

A segunda tabela remove a borda do lado externo de cada célula da borda. border-inline-start e border-inline-end significam o início e o fim da linha, então o mesmo CSS continua correto em idiomas da direita para a esquerda, em que a primeira célula fica do outro lado.

Cantos arredondados na tabela

border-radius não faz nada numa tabela com border-collapse: collapse. Tabelas arredondadas usam o modelo separate sem espaçamento e desenham cada linha uma vez, dando às células só uma borda inferior e uma borda no fim:

As duas células de canto do cabeçalho recebem um raio próprio para que o fundo cinza acompanhe a curva. Sem ele, os cantos retos delas escapam além da borda arredondada. O raio é de 9px, os 10px da tabela menos a sua borda de 1px, para que as duas curvas se alinhem.

Cor e espessura da borda por parte

As bordas podem mudar conforme a parte da tabela. Seletores em thead, tfoot e em linhas específicas definem uma linha mais grossa abaixo do cabeçalho ou acima dos totais:

As linhas de 3px vencem as cinza de 1px onde se encontram, seguindo as regras de collapse acima. Para o resto da estrutura da tabela (thead, tfoot, th), veja tabela HTML.

O atributo border

Tutoriais antigos usam atributos na tag <table>:

<table border="1" cellspacing="0" cellpadding="6">

Os navegadores ainda respeitam border="1": ele desenha uma borda na tabela e em cada célula, no modelo separate, o que dá a aparência de linha dupla. Os três atributos estão obsoletos no HTML5. Os equivalentes em CSS são border nas células, border-spacing (ou border-collapse: collapse) na tabela e padding nas células.

Erros comuns

  • Borda só em table. Você fica com uma moldura sem linhas dentro. Adicione a borda em th, td.
  • Esquecer border-collapse: collapse, e depois ver linhas duplas.
  • border-radius com border-collapse: collapse. O raio é ignorado.
  • border-spacing com border-collapse: collapse. O espaçamento só funciona no modelo separate.
  • Bordas em <tr> no modelo separate. As linhas não desenham bordas a não ser que a tabela esteja em collapse; estilize as células.
  • Usar border="1" em código novo. Ainda funciona, mas não permite definir cor e está obsoleto.

Perguntas frequentes

Como colocar borda numa tabela no HTML?

Use CSS na tabela e nas células: table { border-collapse: collapse; } th, td { border: 1px solid #999; }. A borda nas células desenha a grade, e border-collapse: collapse junta as bordas vizinhas em linhas simples.

Por que minha tabela tem bordas duplas?

Por padrão cada célula desenha a sua própria borda com um espaço entre as células (border-collapse: separate), então células vizinhas mostram duas linhas. Defina border-collapse: collapse no <table> para juntá-las numa só.

O atributo border da tabela ainda é válido?

<table border="1"> ainda desenha bordas em todos os navegadores, mas está obsoleto no HTML5 e não dá nenhum controle sobre cor ou estilo. Use a propriedade CSS border.

Como arredondar os cantos de uma tabela?

border-radius não tem efeito numa tabela com border-collapse: collapse. Use border-collapse: separate com border-spacing: 0, coloque o raio na tabela e dê às células dos cantos um raio correspondente (border-start-start-radius e companhia) para que o fundo delas não escape pelos cantos.

Como tirar a borda de uma tabela?

Tabelas não têm borda a não ser que algo a adicione. Remova o atributo border da tag <table>, ou defina border: none em table, th, td para anular uma folha de estilo que as adiciona.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR