Eu já vi essa pergunta e pesquisei um pouco no Google , mas nada até agora funcionou. Eu acho que agora é 2010 (essas perguntas / respostas são antigas e, sem resposta) e temos CSS3! Existe alguma maneira de obter uma div para preencher a largura e a altura de uma célula de tabela inteira usando CSS?
Não sei qual será a largura e / ou a altura da célula antes do tempo, e definir a largura e a altura da div para 100% não funciona.
Além disso, o motivo pelo qual eu preciso da div é porque preciso posicionar absolutamente alguns elementos fora da célula e position: relative
não se aplica a td
s, portanto, preciso de uma div de wrapper.
Respostas:
O código a seguir funciona no IE 8, no modo de compatibilidade IE 7 do IE 8 e no Chrome (não testado em outro lugar):
Você disse em sua pergunta original que a criação
width
eheight
a100%
fez não trabalho, porém, o que me faz suspeitar que há alguma outra regra substituindo-lo. Você verificou o estilo calculado no Chrome ou no Firebug para ver se as regras de largura / altura estavam realmente sendo aplicadas?Editar
Como sou tola! O
div
tamanho estava no texto, não notd
. Você pode corrigir isso no Chrome criando odiv
display:inline-block
, mas ele não funciona no IE. Isso está se mostrando mais complicado ...fonte
div height = 100% na célula da tabela funcionará apenas quando a tabela tiver o próprio atributo height.
UPD no FireFox, você também deve definir o
height=100%
valor para oTD
elemento paifonte
td
altura de contenção100%
, ela deverá funcionar no FF. Essa é a resposta correta.Eu tive que definir uma altura falsa para a
<tr>
altura e: herdar para<td>s
tr tem
height: 1px
(é ignorado de qualquer maneira)Em seguida, defina o td
height: inherit
Em seguida, defina a div como
height: 100%
Isso funcionou para mim no IE edge e no Chrome:
fonte
td { height: 1px }
do Chrome.Se o seu motivo para desejar uma div de 100% dentro de uma célula da tabela pudesse ser capaz de ter uma cor de plano de fundo estendida até a altura total, mas ainda ter espaço entre as células, você poderia dar a
<td>
si mesma a cor de plano de fundo e usar o CSS propriedade de espaçamento entre bordas para criar a margem entre as células.Se você realmente precisa de uma div de 100% de altura, no entanto, como os outros aqui mencionaram, é necessário atribuir uma altura fixa ao
<table>
Javascript.fonte
border-spacing:5px
o elemento "table" ed, mas eu concordo que o uso de um DIV dentro das células é muito mais elegante e melhor em geral.border-collapse: separate
na tabela, caso contrário não terá nenhum efeito. +1border-collapse: separate
é o padrão, mas sim, essa é uma boa dica.Então, como todo mundo está postando sua solução e nenhuma foi boa para mim, aqui está a minha (testada no Chrome e Firefox).
Fiddle: https://jsfiddle.net/nh6g5fzv/
fonte
Como todos os outros navegadores (incluindo IE 7, 8 e 9) manipulam
position:relative
corretamente uma célula da tabela e apenas o Firefox erra, sua melhor aposta é usar um calço de JavaScript. Você não precisa alterar seu DOM para um navegador com falha. As pessoas usam calços o tempo todo quando o IE comete algo errado e todos os outros navegadores fazem o certo.Aqui está um trecho com todo o código anotado. O JavaScript, HTML e CSS usam práticas de design da web responsivas no meu exemplo, mas você não precisa se não quiser. (Responsivo significa que ele se adapta à largura do seu navegador.)
http://jsfiddle.net/mrbinky3000/MfWuV/33/
Aqui está o código em si, mas não faz sentido sem o contexto, então visite o URL do jsfiddle acima. (O snippet completo também possui muitos comentários no CSS e no Javascript.)
fonte
top:0; left: 0;
.Proponho uma solução usando
o experimentalFlexbox para simular um layout de tabela que permitirá que o elemento de conteúdo de uma célula preencha verticalmente sua célula pai:Demo
fonte
depois de vários dias pesquisando, descobri uma possível correção para esse problema.
Língua espanhola: O truco é estabelecido na Tabla, o TR e o TD uma altura: 100%. Ele é compatível com FireFox e Chrome. O Internet Explorer ignora isso, por que exibe a etiqueta TD como bloco. Dessa forma, o Explorer tem a altura máxima.
Explicação em inglês: dentro dos comentários do código
fonte
se
<table> <tr> <td> <div>
todos tiverem sidoheight: 100%;
definidos, a div preencherá a altura dinâmica da célula em todos os navegadores.fonte
Ok, ninguém mencionou isso, então eu pensei em postar esse truque:
estouro: auto nessa div contêiner dentro da célula faz o truque para mim. Sem ele, o div não usa toda a altura.
fonte
Se a célula da tabela tiver o tamanho desejado, adicione esta classe css e atribua-a à sua div:
Se você deseja que a célula da tabela preencha também o pai, atribua a classe à célula da tabela também. Espero que ajude.
fonte
um pouco atrasado para a festa, mas aqui está a minha solução:
fonte
Como não tenho reputação suficiente para postar um comentário, quero adicionar uma solução completa entre navegadores que combine as abordagens @Madeorsk e @ Saadat com algumas pequenas modificações! (Testado no Chrome, Firefox, Safari, IE e Edge em 10/10/2020)
No entanto, se você é como eu, também deseja controlar o alinhamento vertical e, nesses casos, eu gosto de usar o flexbox:
fonte
Eu acho que a melhor solução seria usar JavaScript.
Mas não tenho certeza de que você precise fazer isso para resolver seu problema de posicionamento de elementos na parte
<td>
externa da célula. Para isso, você poderia fazer algo assim:Não em linha, é claro, mas com classes e identificações.
fonte
Para fazer a altura: 100% funcionar para a div interna, você deve definir uma altura para o pai td. Para o meu caso particular, funcionou usando a altura: 100%. Isso fez a altura interna da div esticar, enquanto os outros elementos da tabela não permitiram que o td ficasse muito grande. Obviamente, você pode usar outros valores além de 100%
Se você quiser também fazer com que a célula da tabela tenha uma altura fixa para que não fique maior com base no conteúdo (para fazer a div interna rolar ou ocultar o estouro), é quando você não tem escolha, mas faz alguns truques js. O pai td precisará ter a altura especificada em uma unidade não relativa (não%). E você provavelmente não terá escolha a não ser calcular essa altura usando js. Também seria necessário o layout da tabela: estilo fixo definido para o elemento da tabela
fonte
Encontro problemas semelhantes com frequência e sempre uso apenas
table-layout: fixed;
notable
elemento eheight: 100%;
na div interna.fonte
No final, não encontrei nada que funcionasse em todos os meus navegadores e em todos os modos de renderização de documentos / documentos, exceto pelo uso do jQuery. Então aqui está o que eu criei.
Ele ainda leva em consideração o número de linhas.
Testado no IE11 (modo Edge), FF42, Chrome44 +. Não testado com tabelas aninhadas.
fonte
você pode fazer assim:
fonte
Se o elemento posicionado e seu elemento pai não tiver largura e altura, defina
em seu elemento pai,
fonte
Provavelmente isso não é recomendado.
Eu descobri uma solução alternativa que funciona se a sua div não contém texto e tem um plano de fundo uniforme.
fornece à div a altura e a largura desejadas, mas com a grande desvantagem de ter um marcador de item de lista. Como a div tem uma cor de fundo homogênea, me livrei da bala com esses estilos:
fonte
Não tenho certeza do que você quer fazer, mas você pode tentar este:
<td width="661" valign="top"><div>Content for New Div Tag Goes Here</div></td>
fonte
O seguinte deve funcionar. Você precisa definir uma altura para a célula pai. https://jsfiddle.net/nrvd3vgd/
fonte
Tente o seguinte:
fonte
Tente colocar display: bloco de tabela dentro de uma célula
fonte
Não assisto aqui um antigo truque de CSS para < div > dentro de < td >. Por isso, lembro: basta definir um valor mínimo para a largura , mas o que você precisa para a largura mínima . Por exemplo:
A largura do td , nesse caso, depende de você.
fonte
Esta é a minha solução para estender 100% de altura e 100% de largura em um html
<td>
se você excluir a primeira linha do seu código, poderá corrigi-lo ...
porque esse doctype não permite em alguns arquivos usar 100% por cento dentro dele
<td>
, mas se você excluir esta linha, o corpo falhará ao expandir o plano de fundo para 100% de altura e 100% de largura, então descobriDOCTYPE
que isso resolve o problemaesse DOCTYPE permite que você estenda o plano de fundo do seu corpo como 100% de altura e 100% de largura, e leve toda a 100% de altura e 100% de largura para o
<td>
fonte