Eu tenho uma mesa assim:
<table>
<tfoot>
<tr><td>footer</td></tr>
</tfoot>
<tbody>
<tr><td>Body 1</td></tr>
<tr><td>Body 1</td></tr>
<tr><td>Body 1</td></tr>
</tbody>
<tbody>
<tr><td>Body 2</td></tr>
<tr><td>Body 2</td></tr>
<tr><td>Body 2</td></tr>
</tbody>
<tbody>
<tr><td>Body 3</td></tr>
<tr><td>Body 3</td></tr>
<tr><td>Body 3</td></tr>
</tbody>
</table>
Eu gostaria de colocar algum espaçamento entre cada elemento tbody, mas o preenchimento e a margem não têm efeito. Alguma ideia?
Respostas:
Experimente isso, se você não se importa de não ter fronteiras.
fonte
transparent
como a cor da borda. O que @SteveAlmond disse.transparent
fornecerá a cor de fundo do elemento, essencialmente indistinguível do corpo do elemento. Você precisaria colorir explicitamente a borda da cor que deseja que apareça (para torná-la supostamente invisível)Algo assim funcionará, dependendo dos requisitos de suporte do seu navegador:
fonte
display: table-row;
?As pessoas sempre terão opiniões controversas sobre o uso de elementos de tabela vazios para fazer o layout de uma página (conforme evidenciado pelo voto negativo desta resposta). Eu reconheço isso, mas às vezes é mais fácil usá-los dessa forma quando você está trabalhando de forma " rápida e suja ".
Eu usei linhas vazias em projetos anteriores para grupos de linhas de tabela de espaço. Atribuí às linhas espaçadoras uma classe css própria e defini uma altura para essa classe que atuou como uma margem superior e inferior para esse grupo de linhas da tabela.
Se você não tem bordas nas células da sua tabela,você também pode definir uma altura para a sua célula típica ou linha em sua folha de estilo que espace uniformemente todas as linhas de sua tabela.fonte
Eu estava com problemas para espaçar corretamente vários
<tbody>
com::before
pseudo, na presença de<tr>
contendo<td>
com rowspan em alguns navegadores.Basicamente, se você tiver uma
<tbody>
estrutura assim:E você segue quem aconselha a escrever css em
::before
pseudoelementos como este:Isso afetará o intervalo de linhas , fazendo com que a tabela "perca" em um segundo
<tr>
quantos<td>
-rowspan estão presentes no primeiro.Portanto, se alguém encontrar esse tipo de problema, a solução é denominar o
::before
pseudo desta forma:Aqui está um violino
fonte
Aqui está outra possibilidade que depende de: primeiro filho, que não está disponível em todos os navegadores:
fonte
Basta definir
display
comoblock
e funcionará.fonte
display:block
quebra o alinhamento da coluna entre os elementos do corpo. Você não tem mais o benefício do mecanismo de layout de mesaDe todas as respostas fornecidas acima, apenas as respostas de djenson47 mantêm a separação de apresentação e conteúdo . A desvantagem do método do modelo de borda recolhida é que você não pode mais usar os atributos de borda da tabela ou de espaçamento entre células para separar as células individuais. Você pode argumentar que isso é bom e que existem algumas soluções alternativas, mas pode ser uma dor. Portanto, acho que o método do primeiro filho é o mais elegante.
Como alternativa, você também pode definir a propriedade de estouro da classe TBODY para qualquer coisa diferente de "visível". Este método permite que você retenha um modelo de bordas separadas também:
fonte
Como o preenchimento pode ser aplicado aos DTs, você pode fazer um truque com o sinal +. Então será possível dar um preenchimento superior aos TD's do primeiro TR de um corpo:
Eu adicionei o "tbody + tbody" para que o primeiro tbody não tenha um preenchimento superior. No entanto, não é obrigatório.
Pelo que eu sei, não há desvantagens :), embora não teste os navegadores mais antigos.
fonte
Você pode usar
border-spacing
em uma tabela com grupos de linhas de tabela para adicionar um espaço entre esses grupos. Porém, não acho que haja uma maneira de especificar quais grupos são espaçados e quais não são.CSS
fonte
NOVA RESPOSTA
Você pode usar quantas
<tbody>
tags quiser. Eu não sabia que o W3C estava ok até agora. Não quer dizer que minha solução abaixo não funcione (funciona), mas para fazer o que você está tentando fazer, atribua suas<tbody>
classes de tags e, em seguida, referencie suas<td>
tags individuais por meio de CSS, assim:e seu HTML assim:
Experimente esse cara :)
RESPOSTA ANTIGA
faça o que fizer, NÃO insira linhas em branco ...
você não deve ter mais de 1 elemento tbody em sua tabela. o que você pode fazer é definir o atributo class ou id em seus
<tr>
elementos e fornecer<td>
preenchimento de tags correspondentes :Você pode até atribuir
<tr>
uma classe adicional à parte superior e inferior , de modo que eles só façam o preenchimento superior ou inferior, respectivamente:e em seu HTML, sua
<tr>
tag seria assim:Espero que isto ajude!
fonte
A resposta djensen47 funciona muito bem para navegadores mais recentes, no entanto, como foi apontado, o IE7 não funciona no.
Minha solução para esse problema de suporte aos navegadores mais antigos era envolver o conteúdo de cada célula dentro de um div. Em seguida, adicione um margin-top ao div.
CSS
A configuração de altura mantém as células com pelo menos 30 px de altura para evitar que qualquer coloração de célula usada dentro do div seja reduzida ao redor do texto. A margem superior cria o espaço desejado tornando toda a linha mais alta.
fonte
Deparei com isso enquanto tentava resolver sozinho. Tive sucesso colocando uma
<br>
tag logo antes da</tbody>
tag de fechamento . É uma correção puramente visual, mas parece funcionar na maioria dos navegadores que testei.Deve ser acessível também.
fonte