Como você obtém a altura renderizada de um elemento?
Digamos que você tenha um <div>
elemento com algum conteúdo interno. Este conteúdo interno vai esticar a altura do <div>
. Como você obtém a altura "renderizada" quando você não definiu explicitamente a altura. Obviamente, eu tentei:
var h = document.getElementById('someDiv').style.height;
Existe um truque para fazer isso? Eu estou usando jQuery, se isso ajuda.
javascript
jquery
css
height
BuddyJoe
fonte
fonte
Respostas:
Deveria ser apenas
com jQuery. Isso recupera a altura do primeiro item no conjunto agrupado como um número.
Tentando usar
só funciona se você tiver definido a propriedade em primeiro lugar. Não é muito útil!
fonte
Experimente um dos seguintes:
clientHeight
inclui a altura e o preenchimento vertical.offsetHeight
inclui altura, preenchimento vertical e bordas verticais.scrollHeight
inclui a altura do documento contido (seria maior do que apenas a altura no caso de rolagem), preenchimento vertical e bordas verticais.fonte
.clientWidth/.clientHeight
NÃO inclua a largura da rolagem se a rolagem for mostrada. Se você quiser largura de rolagem para ser incluído, pode usarelement.getBoundingClientRect().width
em vezNÃO PERGUNTA, pois havia vários links usando
elem.style.height
na parte superior dessas respostas ...ALTURA INTERNA:
https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHeight
ALTURA EXTERIOR:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetHeight
Ou uma das minhas referências favoritas: http://youmightnotneedjquery.com/
fonte
Você pode usar
.outerHeight()
para esse fim.Ele fornecerá a altura renderizada completa do elemento. Além disso, você não precisa definir nenhum
css-height
elemento. Por precaução, você pode manter sua altura automaticamente para que possa ser renderizada conforme a altura do conteúdo.Para uma visão clara dessas funções, você pode acessar o site do jQuery ou uma publicação detalhada aqui .
limpará a diferença entre
.height()
/innerHeight()
/outerHeight()
fonte
Eu uso isso para obter a altura de um elemento (retorna float) :
Também funciona quando você usa o DOM virtual . Eu uso no Vue assim:
fonte
então simplesmente:
style.height
fonte
Definitivamente usar
ou
Estou postando isso como uma resposta adicional, porque há algumas coisas importantes que acabei de aprender.
Eu quase caí na armadilha agora de usar offsetHeight. Isso é o que aconteceu :
Aqui está apenas uma parte:
Sim, ele olha para ambos rolagem e deslocamento. Se isso falhar, parece ainda mais, levando em consideração os problemas de compatibilidade do navegador e do css. Em outras palavras, MATERIAL NÃO ME IMPORTO - ou quero.
Mas eu não preciso. Obrigado jQuery!
Moral da história: se o jQuery tem um método para algo, provavelmente por um bom motivo, provavelmente relacionado à compatibilidade.
Se você não leu a lista de métodos do jQuery recentemente, sugiro que você dê uma olhada.
fonte
fonte
elem.getBoundingClientRect().height
Eu criei um código simples que nem precisa do JQuery e provavelmente vai ajudar algumas pessoas. Ele obtém a altura total de 'ID1' depois de carregado e usa-o em 'ID2'
Em seguida, basta definir o corpo para carregá-lo
fonte
Hm, podemos obter a geometria do elemento ...
E esse JS simples?
fonte
var geometry; geometry={};
pode simplesmente servar geometry={};
Eu acho que a melhor maneira de fazer isso em 2020 é usar js simples e
getBoundingClientRect().height;
Aqui está um exemplo
Além
height
disso, também temos acesso a várias outras coisas sobre odiv
.fonte
Então esta é a resposta?
"Se você precisar calcular algo, mas não mostrar, defina o elemento como
visibility:hidden
eposition:absolute
adicione-o à árvore DOM, obtenha o offsetHeight e remova-o. (É o que a biblioteca de protótipos faz atrás das linhas da última vez que verifiquei)."Eu tenho o mesmo problema em vários elementos. Não há jQuery ou Prototype para ser usado no site, mas sou a favor de pedir emprestada a técnica, se funcionar. Como exemplo de algumas coisas que não funcionaram, seguidas pelo que aconteceu, tenho o seguinte código:
que basicamente tenta de tudo para obter um resultado zero. ClientHeight sem efeito. Com os elementos problemáticos, normalmente recebo NaN na Base e zero nas alturas Offset e Scroll. Tentei a solução Add DOM e o clientRects para ver se funciona aqui.
Em 29 de junho de 2011, atualizei o código para tentar adicionar ao DOM e ao clientHeight com melhores resultados do que eu esperava.
1) clientHeight também foi 0.
2) Dom realmente me deu uma altura que foi ótima.
3) ClientRects retorna um resultado quase idêntico à técnica DOM.
Como os elementos adicionados são fluidos por natureza, quando são adicionados a um elemento DOM Temp vazio, eles são renderizados de acordo com a largura desse contêiner. Isso fica estranho, porque é 30px mais curto do que acaba.
Adicionei alguns instantâneos para ilustrar como a altura é calculada de maneira diferente.
As diferenças de altura são óbvias. Eu certamente poderia adicionar posicionamento absoluto e oculto, mas tenho certeza de que isso não terá efeito. Continuei convencido de que isso não funcionaria!
(Discordo mais) A altura sai (é renderizada) menor que a verdadeira altura renderizada. Isso poderia ser resolvido configurando a largura do elemento DOM Temp para corresponder ao pai existente e poderia ser feito com bastante precisão na teoria. Também não sei o que resultaria de removê-los e adicioná-los novamente ao local existente. Como eles chegaram através de uma técnica innerHTML, estarei procurando usar essa abordagem diferente.
* NO ENTANTO * Nada disso foi necessário. Na verdade, funcionou como anunciado e retornou a altura correta !!!
Quando consegui tornar os menus visíveis novamente, o DOM retornou a altura correta de acordo com o layout do fluido na parte superior da página (279px). O código acima também usa getClientRects que retornam 280px.
Isso é ilustrado no instantâneo a seguir (tirado do Chrome depois de funcionar).
Agora não tenho idéia do por que esse truque de protótipo funciona, mas parece que sim. Como alternativa, getClientRects também funciona.
Suspeito que a causa de todo esse problema com esses elementos em particular tenha sido o uso do innerHTML em vez do appendChild, mas isso é pura especulação neste momento.
fonte
offsetHeight
, usualmente.Se você precisar calcular algo, mas não mostrar, defina o elemento como
visibility:hidden
eposition:absolute
, adicione-o à árvore DOM, obtenha ooffsetHeight
e remova-o. (Isso é o que a biblioteca de protótipos faz nos bastidores da última vez que verifiquei).fonte
Às vezes, offsetHeight retornará zero porque o elemento que você criou ainda não foi renderizado no Dom. Eu escrevi esta função para tais circunstâncias:
fonte
Se você já usa o jQuery, sua melhor aposta é
.outerHeight()
ou.height()
, como já foi afirmado.Sem o jQuery, você pode verificar o tamanho da caixa em uso e adicionar vários preenchimentos + bordas + clientHeight, ou pode usar getComputedStyle :
var h = getComputedStyle (document.getElementById ('someDiv')). height;
h
agora será uma sequência como "53.825px".E não consigo encontrar a referência, mas acho que ouvi
getComputedStyle()
pode ser caro, então provavelmente não é algo que você queira chamar em cadawindow.onscroll
evento (mas também não é o jQueryheight()
).fonte
getComputedStyle
, useparseInt(h, 10)
para obter um número inteiro para cálculos.Com o MooTools :
$('someDiv').getSize().y
fonte
Se entendi sua pergunta corretamente, talvez algo assim ajude:
fonte
Você definiu a altura no css especificamente? Se você não tiver, precisa usar em
offsetHeight;
vez deheight
fonte