Out of curiosity, considering the example below, why does having the margin on the #container div cause a vertical scrollbar to appear in the browser? The container is much smaller in height than the body height which is set to 100%.
I have set the padding and margins to 0 for all elements except the #container. Note that I have deliberately omitted absolute positioning on the #container div. In this case how is the browser calculating the height of the body and how is the margin affecting it?
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
* { padding:0; margin:0;}
html, body { height:100%; }
#container
{
padding:10px;
margin:50px;
border:1px solid black;
width: 200px;
height: 100px;
}
</style>
</head>
<body>
<div id='container'>
</div>
</body>
</html>
Example also on JSFiddle
If you paint the backgrounds of
htmlandbody(giving each its own color), you’ll quickly notice thatbodyis being shifted down along with#container, and#containeritself isn’t offset from the top ofbodyat all. This is a side effect of margin collapse, which I cover in detail here (although that answer describes a slightly different setup).It’s this behavior that’s causing the scrollbar to appear, since you’ve declared
bodyto have 100% the height ofhtml. Note that the actual height ofbodyis unaffected, as margins are never included in height calculations.