2009-04-30 20 views
16

Aquí la altura total de todos los <div> es de 900 píxeles, pero la función jQuery devuelve la altura del cuerpo como 577 píxeles. (Si elimino el CSS del cuerpo, está funcionando).Cómo obtener la altura de un elemento del cuerpo

¿Existe una solución para este problema?

$j(function() { 
    alert($j("body").height()); 
}) 

html, body { 
    height:100%; 
} 

<div style="height:200px">header</div> 
<div style="height:500px">content</div> 
<div style="height:200px">footer</div> 

Respuesta

26

Conjunto

html { height: 100%; } 
body { min-height: 100%; } 

en lugar de height: 100%.

El resultado que jQuery devuelve es correcto, porque ha establecido la altura del cuerpo al 100%, y esa es probablemente la altura de la ventana gráfica. Estos tres DIV estaban causando un desbordamiento, porque no había suficiente espacio para ellos en el elemento BODY. Para ver lo que quiero decir, establezca un borde en la etiqueta BODY y verifique dónde termina el borde.

+2

+1 eso es exactamente lo que estaba pensando – jonsidnell

+0

agradables D. Rafael explicación gracias! –

+0

de nada, john – Rafael

0

Creo que la altura del cuerpo que se devuelve es la altura visible. Si necesita la altura total de la página, puede ajustar sus etiquetas div en un div que contiene y obtener el alto de eso.

36

Sólo tiene que utilizar

$(document).height() // - $('body').offset().top 

y/o

$(window).height() 

en lugar de $('body').height();

+0

esto también es bueno un Mr.OderWat, pero estoy obteniendo 8px extra que el tamaño real. (Usando $ (document) .height()). –

+3

Esos 8 píxeles "más" son correctos. Ellos son los márgenes del documento. Puede usar: cuerpo {altura: 100%; margin: 0} o resta la compensación utilizando $ (documento) .height() - $ ("cuerpo"). offset(). arriba – OderWat

+3

$ ("cuerpo"). offset(). arriba funciona para obtener los mismos márgenes en el cuerpo pero si el margen inferior está configurado específicamente, no funcionará. Además, probé $ ("body"). Css ("margin-bottom") pero eso retorna con las unidades y puede que no siempre esté en píxeles. ¿Hay alguna otra forma de descubrir el "más"? –

2

$ (document) .height() parece hacer el truco y le da la altura total incluyendo el área que solo es visible mediante desplazamiento.

0

Estábamos tratando de evitar el uso de la IE específica

$window[0].document.body.clientHeight 

y encontró que el siguiente jQuery no va a ceder siempre el mismo valor, pero finalmente lo hace en algún momento de nuestro escenario de carga de la página, que trabajó para nosotros y mantiene soporte multi-navegador:

$(document).height() 
+0

Debe aplicar sangría por 4 espacios para crear un bloque de código, usted fue uno menos de cada uno. –

Cuestiones relacionadas