Eu tenho uma div que contém uma imagem e algum texto (a imagem é do tamanho variável e o texto é do tamanho variável).
Existe alguma maneira de calcular a altura necessária para caber todo o conteúdo div, considerando que a largura exata é predefinida?
UPD obtendo o mesmo resultado errado ao usar $(document).ready()
document.addEventListener("DOMContentLoaded", function ()
{
var div = document.getElementById("Content");
var res = document.getElementById("Result");
res.innerHTML = div.offsetHeight; // incorrect - returns 252 while the real height is 360 (Firefox, Chrome)
});
div
{
width: 400px;
}
img
{
float: left;
margin: 0.5em;
}
<div id="Content">
<img src="https://picsum.photos/id/82/200/150" />
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Orci phasellus egestas tellus rutrum. Tempor nec feugiat nisl pretium fusce. Cras pulvinar mattis nunc sed blandit libero volutpat sed cras. Purus sit amet luctus venenatis lectus magna fringilla urna. Ut tristique et egestas quis. Mauris cursus mattis molestie a iaculis at erat pellentesque adipiscing. Iaculis eu non diam phasellus vestibulum lorem sed risus ultricies. Semper quis lectus nulla at. Augue interdum velit euismod in. Amet aliquam id diam maecenas ultricies mi eget. Scelerisque viverra mauris in aliquam sem fringilla ut morbi. Et egestas quis ipsum suspendisse. Et malesuada fames ac turpis. Fermentum iaculis eu non diam phasellus vestibulum lorem sed.
</div>
<br/>
<span id="Result"></span>
javascript
css
user626528
fonte
fonte
onload
em seguida, ficando a altura dentro do callbackRespostas:
Você tem que usar em seu
window.onload
lugar.No seu caso, você precisa aguardar a imagem e não apenas o DOM.
fonte
Para determinar com precisão a altura da div e da imagem. Isso ocorre porque a imagem provavelmente terminará o carregamento por último - se a altura do contêiner for verificada antes do carregamento da imagem, ela retornará a altura sem levar em consideração a altura da imagem.
Um ouvinte deve ser adicionado à imagem para verificar a altura após o carregamento da imagem.
Como o estilo é simples
offsetHeight
eclientHeight
deve funcionar, mas para incluir o elemento inteiro (com borda e margem), usescrollHeight
o descrito por Element.scrollHeight nos documentos da web do MDNO código resultante:
O exemplo inteiro está em um CodeSnadbox aqui:
fonte
Não sei se entendi completamente sua pergunta, mas você pode usar o javascript para calcular a altura de uma div.
fonte
document.getElementsByTagName('div').getBoundingClientRect().height
. Experimente isso e deixe-me saber se funciona.Eu sei que você está pedindo para redimensionar a div assim que a imagem carregar para torná-la mais alta, mas apenas como um comentário lateral, você sabe / já tentou o tamanho do plano de fundo: contém?
Conforme especificado pelo MDN:
O valor de retenção especifica que, independentemente do tamanho da caixa que contém, a imagem de plano de fundo deve ser dimensionada para que cada lado seja o maior possível, sem exceder o comprimento do lado correspondente do contêiner.
O valor da capa:
O valor da capa especifica que a imagem de plano de fundo deve ser dimensionada para que seja a menor possível, garantindo ao mesmo tempo que ambas as dimensões sejam maiores ou iguais ao tamanho correspondente do contêiner. Tente redimensionar o exemplo abaixo para ver isso em ação.
Quando combinado com a posição de fundo, acho que pode ser realmente útil
fonte
se você quiser usar jquery, então este é o caminho
fonte
Não dinamicamente, já que você tem a largura definida, não seria difícil calculá-lo porque não mudará em telas diferentes. Mas a única maneira é fazê-lo manualmente usando as ferramentas DEV.
Se a imagem e a fonte mudarem, você pode ter um script javascript que, depois de ativado, verá qual a altura da div. (se você precisar deste comentário abaixo)
fonte
Em js, você pode obter a altura de qualquer elemento. largura não é necessária para calcular a altura.
como div é uma tag genérica, adicione um ID para especificá-la para garantir que a tag correta seja direcionada para calcular a altura
fonte
Você pode usar a propriedade .scrollHeight .
fonte
O evento DOMContentLoaded é acionado quando o navegador carrega totalmente o HTML e a árvore DOM é criada, mas recursos externos como imagens e folhas de estilo ainda não foram carregados. Enquanto oevento window.onload é acionado quando a página inteira é carregada, incluindo estilos, imagens e outros recursos.
E você tem a altura de 252 em vez de 360 porque a altura da div sem a sua imagem é 252. Para referência, você pode executar o trecho abaixo.
fonte
100% trabalhando! uso window.onload função em vez de DOMContentLoaded
Vai dar o seu resultado!
fonte
Você deve verificar o método
element.getBoundingClientRect()
após o carregamento. Ele retornará um conjunto de propriedades como largura e altura.fonte