18

Here the total height of all <div>'s are 900 pixels, but the jQuery function returns the height of the body as 577 pixels. (If I remove the body CSS, it's working).

Is there a solution for this problem?

$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>
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Shiva Srikanth Thummidi
  • 2,898
  • 4
  • 27
  • 36

5 Answers5

42

Simply use

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

and / or

$(window).height()

instead of $('body').height();

Mark Walters
  • 12,060
  • 6
  • 33
  • 48
OderWat
  • 5,379
  • 3
  • 29
  • 31
  • this is also nice one Mr.OderWat, but i am getting 8px extra than that of actual size.(by using $(document).height() ). – Shiva Srikanth Thummidi May 01 '09 at 06:00
  • 3
    Those 8 pixels "more" are correct. They are the margins of the document. You may either use: body { height:100%; margin:0 } or you substract the offset using $(document).height()-$("body").offset().top – OderWat May 02 '09 at 14:48
  • 3
    $("body").offset().top works for equal margins on body but if the bottom margin is set specifically, it won't work. Also, I tried $("body").css("margin-bottom") but that returns with the units and it may not always be in pixels. Are there any other ways to find out the "more"? – Jiho Han Sep 28 '10 at 18:47
28

Set

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

instead of height: 100%.

The result jQuery returns is correct, because you've set the height of the body to 100%, and that's probably the height of the viewport. These three DIVs were causing an overflow, because there weren't enough space for them in the BODY element. To see what I mean, set a border to the BODY tag and check where the border ends.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Rafael
  • 18,349
  • 5
  • 58
  • 67
2

$(document).height() seems to do the trick and gives the total height including the area which is only visible through scrolling.

Mark
  • 3,389
  • 2
  • 28
  • 52
0

We were trying to avoid using the IE specific

$window[0].document.body.clientHeight 

And found that the following jQuery will not consistently yield the same value but eventually does at some point in our page load scenario which worked for us and maintained cross-browser support:

$(document).height()
Adi Inbar
  • 12,097
  • 13
  • 56
  • 69
0

I believe that the body height being returned is the visible height. If you need the total page height, you could wrap your div tags in a containing div and get the height of that.

Fenton
  • 241,084
  • 71
  • 387
  • 401