Alguns documentos não podem ter a altura do documento (para posicionar algo absolutamente na parte inferior). Além disso, um fundo de preenchimento parece não fazer nada nessas páginas, mas sim nas páginas em que a altura retornará. Caso (s) em questão:
http://fandango.com
http://paperbackswap.com
No Fandango, o
jQuery $(document).height();
retorna o valor correto
document.height
retorna 0
document.body.scrollHeight
retorna 0
Na troca de brochura:
TypeError do jQuery $(document).height();
: $(document)
is null
document.height
retorna um valor incorreto
document.body.scrollHeight
retorna um valor incorreto
Nota: Eu tenho permissões no nível do navegador, se houver algum truque lá.
javascript
Nic
fonte
fonte
Respostas:
Os tamanhos dos documentos são um pesadelo para a compatibilidade do navegador, porque, embora todos os navegadores exponham as propriedades clientHeight e scrollHeight, nem todos concordam como os valores são calculados.
Costumava haver uma fórmula complexa de práticas recomendadas sobre como você testou a altura / largura corretas. Isso envolvia o uso das propriedades document.documentElement, se disponíveis, ou o retorno às propriedades do documento e assim por diante.
A maneira mais simples de obter a altura correta é obter todos os valores de altura encontrados no documento ou documentElement e usar o mais alto. Isto é basicamente o que o jQuery faz:
Um teste rápido com o bookmarklet Firebug + jQuery retorna a altura correta para ambas as páginas citadas, assim como o exemplo de código.
Observe que testar a altura do documento antes que ele esteja pronto sempre resultará em 0. Além disso, se você carregar mais itens ou o usuário redimensionar a janela, poderá ser necessário testá-lo novamente. Use
onload
ou um evento pronto para documento , se você precisar disso no momento do carregamento, caso contrário, teste sempre que precisar do número.fonte
Esta é uma pergunta muito antiga e, portanto, tem muitas respostas desatualizadas. A partir de 2020, todos os principais navegadores aderiram ao padrão .
Resposta para 2020:
Editar: o item acima não leva em consideração as margens da
<body>
tag. Se seu corpo tiver margens, use:fonte
document.documentElement.getBoundingClientRect()
funciona melhor.<h1>
elemento no início da<body>
margem padrão, ele empurrará o<body>
elemento para baixo sem uma maneira de detectá-lo.document.documentElement.scrollHeight
(nãodocument.body,scrollHeight
) é a maneira mais precisa de fazer as coisas. Isso funciona tanto com as margens do corpo quanto com as coisas dentro do corpo, empurrando-o para baixo.Você pode até usar isso:
ou de uma maneira mais jQuery (já que você disse que o jQuery não mente) :)
fonte
Cálculo da altura do documento completo:
Para ser mais genérico e encontrar a altura de qualquer documento, você pode encontrar o nó DOM mais alto na página atual com uma recursão simples:
Você pode testá-lo em seus sites de exemplo ( http://fandango.com/ ou http://paperbackswap.com/ ) colando esse script no DevTools Console.
NOTA: está trabalhando com
Iframes
.Aproveitar!
fonte
O "método jQuery" para determinar o tamanho do documento - consulte tudo, obtenha o valor mais alto e espere o melhor - funciona na maioria dos casos, mas não em todos eles .
Se você realmente precisa de resultados à prova de balas para o tamanho do documento, sugiro que você use meu jQuery.documentSize plugin . Ao contrário dos outros métodos, ele testa e avalia o comportamento do navegador quando é carregado e, com base no resultado, consulta a propriedade correta a partir daí.
O impacto desse teste único no desempenho é mínimo , e o plug-in retorna os resultados corretos mesmo nos cenários mais estranhos - não porque eu digo isso, mas porque um conjunto de testes massivo e gerado automaticamente verifica o que realmente acontece.
Como o plug-in é escrito em Javascript baunilha, você também pode usá-lo sem o jQuery .
fonte
Eu menti, jQuery retorna o valor correto para ambas as páginas $ (document) .height (); ... por que eu duvidei disso?
fonte
A resposta adequada para 2017 é:
document.documentElement.getBoundingClientRect().height
Ao contrário
document.body.scrollHeight
deste método, é responsável pelas margens do corpo. Também fornece valor de altura fracionada, que pode ser útil em alguns casosfonte
document.body.scrollHeight
lista toda a altura rolável, que é a pergunta original.html { height: 100% }
CSS. Portanto, a API retorna corretamente a altura calculada real . Tente remover esse estilo e também adicionar margensbody
e você verá qual é o problema com o usodocument.body.scrollHeight
.<h1>
elemento no início da<body>
margem padrão, ele empurrará o<body>
elemento para baixo sem uma maneira de detectá-lo.document.documentElement.scrollHeight
(nãodocument.body,scrollHeight
) é a maneira mais precisa de fazer as coisas.documentElement.scrollHeight
fornece um valor errado neste caso.documentElement.getBoundingClientRect().height
dá o correto. veja isso: jsfiddle.net/fLpqjsxdgetBoundingClientRect().height
. Ele é desviado, enquanto 3 (três) outros métodos não são desviados. Incluindo o que você menciona como inferior a ele. E você insiste em fazer isso sugerindo remover 100% da altura html desta página e adicionando margens a ela. Qual é o objetivo? Apenas aceite que issogetBoundingClientRect().height
também não é à prova de balas.Para obter a largura de um navegador / dispositivo cruzado, use:
fonte
Para qualquer pessoa que tenha problemas para rolar uma página sob demanda, usando a detecção de recursos, criei esse hack para detectar qual recurso usar em um pergaminho animado.
O problema foi ao mesmo tempo
document.body.scrollTop
edocument.documentElement
sempre retornadotrue
em todos os navegadores.No entanto, você só pode realmente rolar um documento com um ou outro.
d.body.scrollTop
para o Safari edocument.documentElement
para todos os outros, de acordo com o w3schools (veja exemplos)element.scrollTop
funciona em todos os navegadores, não no nível do documento.fonte
use código de golpe para calcular a altura + rolagem
fonte
Este código de navegador cruzado abaixo avalia todas as alturas possíveis dos elementos body e html e retorna o máximo encontrado:
Um exemplo de trabalho:
fonte
Não sei como determinar a altura agora, mas você pode usar isso para colocar algo na parte inferior:
fonte
Adicionar referências corretamente
No meu caso, eu estava usando uma página ASCX e a página aspx que contém o controle ascx não está usando as referências corretamente. Acabei de colar o seguinte código e funcionou:
fonte