O que é o navegador e você pode fornecer um trecho do seu código (html / css)?
Patrick Desjardins
bem, eu estou usando ff3, como eu sei que, ou seja, supostamente suporta regras, mas por enquanto eu estou olhando para corrigir em ff3. Eu tentei espaçamento e preenchimento até agora sem sorte. productlistingitem é a tabela principal <table class = fronteira "productListingItem" = "0" cellpadding = "10" cellspacing = "0"> <tr> <tr> <td class = "dragItem">
Marin
1
Talvez seja porque border-spacingé um atributo relacionado tablee não tr. Tente table.classname {border-spacing:5em}. Note: IE8 suporta a propriedade espaçamento entre bordas se um! DOCTYPE for especificado.
Você precisa usar preenchimento em seus tdelementos. Algo assim deve fazer o truque. Obviamente, você pode obter o mesmo resultado usando um preenchimento superior em vez de um preenchimento inferior.
No código CSS abaixo, o sinal de maior que significa que o preenchimento é aplicado apenas a tdelementos que são filhos diretos para trelementos da classe spaceUnder. Isso tornará possível usar tabelas aninhadas. (Células C e D no código de exemplo.) Não tenho muita certeza sobre o suporte ao navegador para o seletor filho direto (pense no IE 6), mas não deve quebrar o código em nenhum navegador moderno.
/* Apply padding to td elements that are direct children of the tr elements with class spaceUnder. */
tr.spaceUnder>td {padding-bottom:1em;}
Exceto que isso não resolve o problema quando suas linhas têm uma cor de fundo e você realmente deseja WHITESPACE entre suas linhas.
Simon East
6
@ Simon: Espaço em branco geralmente se refere ao espaço vazio, e não especificamente à cor branca. Se você deseja colorir o espaço entre as linhas, pode tentar com a propriedade CSS <code> border-bottom </code> nos elementos td. Isso provavelmente só será renderizado corretamente com uma borda de 1px. Outra solução, mas não tão elegante, seria usar uma linha vazia.
Jan Aagaard
18
@ Jan: Sim, exatamente o que quero dizer ... É muito difícil colocar um espaço vazio transparente entre as linhas. Sua solução ajuda em alguns casos, mas não resolve esse problema. Inserir uma linha vazia da tabela pode funcionar, mas é fácil. Um bottom-borderconjunto para transparente também pode funcionar, mas não tenho certeza de como é compatível com vários navegadores.
Sim, esse método seria ideal, exceto que o IE 7 não suporta. Para suporte ao navegador, consulte: quirksmode.org/css/tables.html
Simon East
7
Além disso, ele controla o espaçamento entre todas as linhas da tabela; você não pode definir o espaçamento entre linhas para linhas individuais (que é o que o OP pode estar desejando obter).
Simon East
1
Isso é inconsistente entre o Chrome e o Firefox. Se você tiver um theade tbody, ele renderizará um duplo border-spacingentre eles, no Chrome (mas um único no Firefox).
Camilo Martin
91
Essa é a resposta real, definida especificamente border-spacing: 0 1empara obter o espaçamento entre apenas as linhas.
igneosaur
1
@igneosaur Eu tentei fazer o que você disse, mas ainda adicionou espaçamento entre todas as linhas e não apenas as duas primeiras. Você pode fornecer um jsfiddle funcionando?
user3281466
184
Você tem tabela com álbuns de identificação com quaisquer dados ... Eu omiti os trs e tds
Isto funcionou bem para mim. o primeiro argumento do espaçamento entre bordas é o espaçamento horizontal entre as células e o segundo é o espaçamento vertical.
Nem sempre tem que por fantasia CSS se boa HTML idade pode fazer o trabalho :)
é possível aplicar apenas para o tr dentro "tbody"?
Jaison
129
Como tenho uma imagem de fundo atrás da mesa, fingir com estofamento branco não funcionaria. Optei por colocar uma linha vazia entre cada linha de conteúdo:
<trclass="spacer"><td></td></tr>
use css para dar às linhas espaçadoras uma certa altura e fundo transparente.
Provavelmente é mais flexível, eu acho. Você nem sempre pode controlar quando antecipadamente precisará de espaço (páginas geradas dinamicamente).
Stefan Kendall
10
Isso me lembra os anos 90, quando o suporte ao CSS era quase inexistente e as tabelas eram usadas para a maioria dos layouts. Ainda estou dando +1, no entanto, porque as outras "respostas" não são melhores em termos de espaço na verdade entre as linhas da tabela.
labirinto
@ labyrinth Não mudou muita coisa desde os anos 90. Em relação ao HTML, tudo se tornou muito mais poderoso e muito mais confuso.
A propriedade CSS de espaçamento entre bordas especifica a distância entre as bordas das células adjacentes (apenas para o modelo de bordas separadas). Isso é equivalente ao atributo cellpacing no HTML de apresentação, mas um segundo valor opcional pode ser usado para definir o espaçamento horizontal e vertical diferente.
Essa última parte é frequentemente supervisionada. Exemplo:
.your-table {
border-collapse: separate;/* allow spacing between cell borders */
border-spacing:05px;/* NOTE: syntax is <horizontal value> <vertical value> */
ATUALIZAR
Agora entendo que o OP deseja que linhas específicas e separadas tenham espaçamento aumentado. Adicionei uma configuração com tbodyelementos que fazem isso sem arruinar a semântica. No entanto, não tenho certeza se ele é compatível com todos os navegadores. Eu fiz isso no Chrome.
O exemplo abaixo é para mostrar como você pode fazer parecer que a tabela existe de linhas separadas, doçura total do CSS. Também deu à primeira linha mais espaçamento com a tbodyconfiguração. Sinta-se livre para usar!
Aviso de suporte: IE8 +, Chrome, Firefox, Safari, Opera 4+
Se eu quisesse um espaço vertical entre duas linhas em particular, adicionei uma linha espaçadora <tr> <td colspan = "2" style = "padding-bottom: 1em;"> </td> </tr>
Paul Taylor
Isso funcionaria, mas é semanticamente incorreto (como em sua linha de separador não é uma linha real com dados como as outras linhas. Isso pode ser irritante para pessoas que usam leitores de tela ou outros dispositivos assistentes, bem como para fins de indexação e . gosta pode não fazer uma diferença enorme, mas é bom para mantê-lo de volta em sua cabeça quando desenvolvimento de um website :)
Justus Romijn
Isso é verdade, se ele estiver realmente usando uma tabela para representar uma tabela. Se ele está apenas usando uma tabela como uma maneira de exibir dados de maneira tabular, eu diria que faz mais sentido inserir uma linha para representar uma lacuna entre dois itens, em vez de apenas adicionar espaçamento aos elementos td acima ou abaixo da linha, porque o que o usuário deseja fazer é adicionar espaço entre duas linhas, não aumentar o tamanho dos elementos dentro de uma linha.
Para o IE, tr sem um corpo não seria reconhecido. adicione tag td fictício também.
Nap
O problema é que, no HTML5, o validador W3C emitirá um erro dizendo "Uma linha da tabela possui 0 colunas de largura, que é menor que a contagem de colunas estabelecida pela primeira linha".
David Grayson
Bom, eu adicionei outro <tr>, <td> e <p> e defini a visibilidade da tag p como oculta. Funciona também. :-)
Jeppe
47
Você não pode alterar a margem de uma célula da tabela. Mas você pode alterar o preenchimento. Altere o preenchimento do TD, que aumentará a célula e empurre o texto para o lado com o aumento do preenchimento. Se você tiver linhas de borda, no entanto, ainda não será exatamente o que deseja.
<table><tr><td>Some text - 1</td><td>Some text - 1</td></tr><tr><td>Some text - 2</td><td>Some text - 2</td></tr><tr><td>Some text - 3</td><td>Some text - 3</td></tr></table>
Verifique se a cor do plano de fundo está definida no td em vez da linha. Isso deve funcionar na maioria dos navegadores ... (Chrome, ou seja, teste testado)
Isso cria problemas vertical-alinhamento estranhas, pelo menos no Firefox
cjohansson
20
Você precisa colocar border-collapse: separate;na mesa; a maioria das folhas de estilo padrão do navegador começa em border-collapse: collapse;, o que diminui o espaçamento das bordas.
Além disso, o espaçamento entre bordas: continua no TD, não no TR.
fronteira-espaçamento é também para a tabela não td
Silversky
4
Obrigado. Agradeci a você na correção de comentários anteriormente, mas um editor muito zeloso que queria mudar meu estilo e quebrou o código no processo também removeu meus agradecimentos. Agora estou colocando aqui onde não pode ser editado.
Isso é assustador. O que isso realmente está fazendo é definir a displaypropriedade blockpara a linha. Isso permite que a linha tenha uma margem. Margem vertical " Aplica-se a: todos os elementos, exceto aqueles com tipos de exibição de tabela diferentes de legenda, tabela e tabela embutida ". Como table-rownão há nenhuma dessas exceções, não conta. Provavelmente, você poderia obter o mesmo efeito. tr {display:block;}Mas eu seria cauteloso ao usar qualquer um desses métodos em uma tabela complicada. Provavelmente não resultará no que você espera.
sholsinger
Isso é assustador, mas funcionou. Não no ie7, mas o espaçamento entre células diretamente na tabela funciona no ie7.
Liko 11/01
linhas flutuantes não é uma boa solução. especialmente se sua página for maior que o dobro da largura da linha. adicionar o atributo largura para ambas as marcas
AndreaCi
11
Para criar uma ilusão de espaçamento entre linhas, aplique a cor de fundo na linha e, em seguida, crie uma borda grossa com a cor branca para criar um "espaço" :)
Você pode fazer isso via CSS, o que eu diria que é mais "correto" (além do fato de ser mais elegante, mover o estilo da marcação para o CSS economiza largura de banda).
Camilo Martin
2
Não economiza largura de banda. Na verdade, eu uso mais. Supondo que você não esteja adicionando uma folha de estilo apenas para isso, adicione um seletor e possivelmente um ID ou nome a esta tabela. Isso é mais bytes, não menos.
Majinnaibu 29/05
9
Eu me deparei com isso enquanto lutava com um problema semelhante. Eu achei a resposta de Varun Natraaj bastante útil, mas eu usaria uma borda transparente.
Funciona para a maioria dos navegadores mais recentes em 2015. Solução simples. Não funciona para transparência, mas, diferentemente da resposta de Thoronwen, não posso ser transparente para renderizar com qualquer tamanho.
Sei que essa é uma resposta para um thread antigo e pode não ser a solução solicitada, mas, embora todas as soluções sugeridas não tenham feito o que eu precisava, essa solução funcionou para mim.
Eu tinha 2 células de tabela, uma com cor de fundo e outra com cor de borda. As soluções acima removem a borda, de modo que a célula à direita parece estar flutuando no ar. A solução que fez o truque era para substituir o table, tre tdcom divs e classes correspondentes: Tabela seria div id="table_replacer", tr seria div class="tr_replacer"e td seria div class="td_replacer"(mudança fechando tags para divs bem, obviamente)
Para obter a solução para o meu problema, o css é:
#table_replacer{display:table;}.tr_replacer {border:1px solid #123456;margin-bottom: 5px;}/*DO NOT USE display:table-row! It will destroy the border and the margin*/.td_replacer{display:table-cell;}
Imho, esta solução é equivalente a usar a tabela regular, tr, td padrão e estilo tr {display: block;} que eu tentei. Problema: a tabela parece diferente, pois os elementos td não são renderizados na largura da tabela, mas flutuam para a esquerda dentro do tr. Significa que os elementos td de todas as linhas não estão mais alinhados verticalmente.
Andreas Stankewitz 23/03/19
0
Você pode preencher os elementos <td /> com elementos <div /> e aplicar qualquer margem às divs que desejar. Para um espaço visual entre as linhas, você pode usar uma imagem de plano de fundo repetida no elemento <tr />. (Essa foi a solução que acabei de usar hoje e parece funcionar no IE6 e no FireFox 3, embora não tenha testado mais.)
Além disso, se você é avesso a modificar o código do servidor para colocar <div /> s dentro dos <td /> s, pode usar o jQuery (ou algo semelhante) para agrupar dinamicamente o conteúdo <td /> em um <div / >, permitindo aplicar o CSS conforme desejado.
Aqui está uma solução simples e elegante, com algumas ressalvas:
Na verdade, você não pode tornar as lacunas transparentes; precisa dar uma cor específica.
Você não pode arredondar os cantos das bordas acima e abaixo das lacunas
Você precisa conhecer o preenchimento e as bordas das células da tabela
Com isso em mente, tente o seguinte:
td {padding:5px8px;border:2px solid blue;background:#E0E0E0}/* lets say the cells all have this padding and border, and the gaps should be white */
tr.gapbefore td {overflow:visible}
tr.gapbefore td::before,
tr.gapbefore th::before
{
content:"";
display:block;
position:relative;
z-index:1;
width:auto;
height:0;
padding:0;
margin:-5px-10px5px;/* 5px = cell top padding, 10px = (cell side padding)+(cell side border width)+(table side border width) */
border-top:16px solid white;/* the size & color of the gap you want */
border-bottom:2px solid blue;/* this replaces the cell's top border, so should be the same as that. DOUBLE IT if using border-collapse:separate */}
Na verdade, o que você está fazendo é colocar um ::beforebloco retangular na parte superior de todas as células da linha que você deseja preceder por uma lacuna. Esses blocos se destacam um pouco das células para sobrepor as bordas existentes, ocultando-as. Esses blocos são apenas uma borda superior e inferior agrupadas: a borda superior forma a lacuna e a borda inferior recria a aparência da borda superior original das células.
Observe que, se você tiver uma borda ao redor da própria tabela e das células, precisará aumentar ainda mais a margem horizontal dos seus 'blocos'. Portanto, para uma borda de tabela de 4 px, você deve usar:
margin:-5px-12px5px;/* 14px = original 10px + 2px for 'uncollapsed' part of table border */
E se sua tabela usar em border-collapse:separatevez de border-collapse:collapse, será necessário (a) usar a largura completa da borda da tabela:
margin:-5px-14px5px;/* 14px = original 10px + 4px full width of table border */
... e também (b) substitua a largura dupla da borda que agora precisa aparecer abaixo da lacuna:
border-bottom:4px solid blue;/* i.e. 4px = cell top border + previous row's bottom border */
A técnica é facilmente adaptada a uma versão .gapafter, se você preferir, ou à criação de intervalos verticais (coluna) em vez de intervalos de linhas.
Isso realmente funciona? Eu tenho div.el { display: table-row; margin: 10px; }, e margem não faz nada. Eu sei que é um pouco diferente do que uma tabela real, mas não deve ser ...
border-spacing
é um atributo relacionadotable
e nãotr
. Tentetable.classname {border-spacing:5em}
.Note
: IE8 suporta a propriedade espaçamento entre bordas se um! DOCTYPE for especificado.Respostas:
Você precisa usar preenchimento em seus
td
elementos. Algo assim deve fazer o truque. Obviamente, você pode obter o mesmo resultado usando um preenchimento superior em vez de um preenchimento inferior.No código CSS abaixo, o sinal de maior que significa que o preenchimento é aplicado apenas a
td
elementos que são filhos diretos paratr
elementos da classespaceUnder
. Isso tornará possível usar tabelas aninhadas. (Células C e D no código de exemplo.) Não tenho muita certeza sobre o suporte ao navegador para o seletor filho direto (pense no IE 6), mas não deve quebrar o código em nenhum navegador moderno.Isso deve render algo como isto:
fonte
bottom-border
conjunto para transparente também pode funcionar, mas não tenho certeza de como é compatível com vários navegadores.Na tabela pai, tente definir
Além de uma declaração de fronteira, e veja se isso alcança o efeito desejado. Cuidado, porém, que o IE não suporta o modelo de "bordas separadas".
fonte
thead
etbody
, ele renderizará um duploborder-spacing
entre eles, no Chrome (mas um único no Firefox).border-spacing: 0 1em
para obter o espaçamento entre apenas as linhas.Você tem tabela com álbuns de identificação com quaisquer dados ... Eu omiti os trs e tds
No css:
fonte
cellspacing
atributo de <table> nãoComo tenho uma imagem de fundo atrás da mesa, fingir com estofamento branco não funcionaria. Optei por colocar uma linha vazia entre cada linha de conteúdo:
use css para dar às linhas espaçadoras uma certa altura e fundo transparente.
fonte
Na Rede de Desenvolvedores Mozilla :
Essa última parte é frequentemente supervisionada. Exemplo:
ATUALIZAR
Agora entendo que o OP deseja que linhas específicas e separadas tenham espaçamento aumentado. Adicionei uma configuração com
tbody
elementos que fazem isso sem arruinar a semântica. No entanto, não tenho certeza se ele é compatível com todos os navegadores. Eu fiz isso no Chrome.O exemplo abaixo é para mostrar como você pode fazer parecer que a tabela existe de linhas separadas, doçura total do CSS. Também deu à primeira linha mais espaçamento com a
tbody
configuração. Sinta-se livre para usar!Aviso de suporte: IE8 +, Chrome, Firefox, Safari, Opera 4+
fonte
Você pode tentar adicionar a linha separadora:
html:
css:
fonte
Você não pode alterar a margem de uma célula da tabela. Mas você pode alterar o preenchimento. Altere o preenchimento do TD, que aumentará a célula e empurre o texto para o lado com o aumento do preenchimento. Se você tiver linhas de borda, no entanto, ainda não será exatamente o que deseja.
fonte
border-bottom
epadding-bottom
meios que a borda irá estar abaixo do enchimento.Dê uma olhada no atributo border-collapse: separado (padrão) e na propriedade espaçamento da borda .
Primeiro, você deve separá- los com o recolhimento de borda e , em seguida, definir o espaço entre colunas e linhas com espaçamento de borda .
Ambas as propriedades CSS são realmente bem suportadas em todos os navegadores, veja aqui .
fonte
Ok, você pode fazer
Verifique se a cor do plano de fundo está definida no td em vez da linha. Isso deve funcionar na maioria dos navegadores ... (Chrome, ou seja, teste testado)
fonte
Você precisa colocar
border-collapse: separate;
na mesa; a maioria das folhas de estilo padrão do navegador começa emborder-collapse: collapse;
, o que diminui o espaçamento das bordas.Além disso, o espaçamento entre bordas: continua no
TD
, não noTR
.Tentar:
fonte
Você pode usar a altura da linha na tabela:
fonte
fonte
Uma resposta tarde demais :)
Se você aplicar float a
tr
elementos, poderá espaçar entre duas linhas commargin
atributo.fonte
display
propriedadeblock
para a linha. Isso permite que a linha tenha uma margem. Margem vertical " Aplica-se a: todos os elementos, exceto aqueles com tipos de exibição de tabela diferentes de legenda, tabela e tabela embutida ". Comotable-row
não há nenhuma dessas exceções, não conta. Provavelmente, você poderia obter o mesmo efeito.tr {display:block;}
Mas eu seria cauteloso ao usar qualquer um desses métodos em uma tabela complicada. Provavelmente não resultará no que você espera.Para criar uma ilusão de espaçamento entre linhas, aplique a cor de fundo na linha e, em seguida, crie uma borda grossa com a cor branca para criar um "espaço" :)
fonte
A maneira correta de fornecer espaçamento para as tabelas é usar o preenchimento e espaçamento entre células, por exemplo
fonte
Eu me deparei com isso enquanto lutava com um problema semelhante. Eu achei a resposta de Varun Natraaj bastante útil, mas eu usaria uma borda transparente.
Bordas transparentes ainda têm largura.
fonte
Funciona para a maioria dos navegadores mais recentes em 2015. Solução simples. Não funciona para transparência, mas, diferentemente da resposta de Thoronwen, não posso ser transparente para renderizar com qualquer tamanho.
fonte
Basta colocar
div
dentrotd
e definir os seguintes estilos dediv
:fonte
Sei que essa é uma resposta para um thread antigo e pode não ser a solução solicitada, mas, embora todas as soluções sugeridas não tenham feito o que eu precisava, essa solução funcionou para mim.
Eu tinha 2 células de tabela, uma com cor de fundo e outra com cor de borda. As soluções acima removem a borda, de modo que a célula à direita parece estar flutuando no ar. A solução que fez o truque era para substituir o
table
,tr
etd
com divs e classes correspondentes: Tabela seriadiv id="table_replacer"
, tr seriadiv class="tr_replacer"
e td seriadiv class="td_replacer"
(mudança fechando tags para divs bem, obviamente)Para obter a solução para o meu problema, o css é:
Espero que isso ajude alguém.
fonte
Você pode preencher os elementos <td /> com elementos <div /> e aplicar qualquer margem às divs que desejar. Para um espaço visual entre as linhas, você pode usar uma imagem de plano de fundo repetida no elemento <tr />. (Essa foi a solução que acabei de usar hoje e parece funcionar no IE6 e no FireFox 3, embora não tenha testado mais.)
Além disso, se você é avesso a modificar o código do servidor para colocar <div /> s dentro dos <td /> s, pode usar o jQuery (ou algo semelhante) para agrupar dinamicamente o conteúdo <td /> em um <div / >, permitindo aplicar o CSS conforme desejado.
fonte
Ou simplesmente adicione um espaço em branco com a altura da margem entre as linhas que você deseja adicionar o espaçamento
fonte
Aqui está uma solução simples e elegante, com algumas ressalvas:
Com isso em mente, tente o seguinte:
Na verdade, o que você está fazendo é colocar um
::before
bloco retangular na parte superior de todas as células da linha que você deseja preceder por uma lacuna. Esses blocos se destacam um pouco das células para sobrepor as bordas existentes, ocultando-as. Esses blocos são apenas uma borda superior e inferior agrupadas: a borda superior forma a lacuna e a borda inferior recria a aparência da borda superior original das células.Observe que, se você tiver uma borda ao redor da própria tabela e das células, precisará aumentar ainda mais a margem horizontal dos seus 'blocos'. Portanto, para uma borda de tabela de 4 px, você deve usar:
E se sua tabela usar em
border-collapse:separate
vez deborder-collapse:collapse
, será necessário (a) usar a largura completa da borda da tabela:... e também (b) substitua a largura dupla da borda que agora precisa aparecer abaixo da lacuna:
A técnica é facilmente adaptada a uma versão .gapafter, se você preferir, ou à criação de intervalos verticais (coluna) em vez de intervalos de linhas.
Aqui está um código de código em que você pode vê-lo em ação: https://codepen.io/anon/pen/agqPpW
fonte
Aqui isso funciona sem problemas:
Suponho que você possa elaborar um layout mais refinado especificando qual td, se necessário.
fonte
fazendo isso mostrado acima ...
remove o alinhamento vertical da coluna, portanto, tenha cuidado ao usá-lo
fonte
Você tentou:
Como alternativa, cada td também pode ser ajustado:
ou
fonte
div.el { display: table-row; margin: 10px; }
, e margem não faz nada. Eu sei que é um pouco diferente do que uma tabela real, mas não deve ser ...