div element in a div  element can cause the problem of collapsing the parent div element, and the child div doesn't position as expected (i.e., relative to the parent div).Namely, this doesn't work as expected:
<div class="parent" style="margin: auto; width: 50%;">
<div class="child" style="float: left; left: 1em; top: 1em; width: 50%;">
Hi!
</div>
</div>
First problem, the parent
div collapses to zero height.  There are two solutions:1) Apply the
overflow: auto style to the parent div, but this can sometimes introduce scroll bars with the nested div moves "outside" the "normal" area of the parent div. 2) Add a "clearing" empty
div element.  This is more predictable, I've found, but introduces a semantically meaningless element.  E.g.:The extra styles besides<div class="parent" style="margin: auto; width: 50%;">
<div class="child" style="float: left; left: 1em; top: 1em; width: 50%;">
Hi!
</div>
<div class="clearing" style="clear: both; height: 1px; overflow: none;">
</div>
</div>
clear: both in the clearing div is for compatibility with old Internet Explorer 6 browsers.Second problem, the child
div is floating left, but it doesn't get nudged down and to the right by 1em each way (via setting top and left).  The solution is to set the child to have the CSS style position: relative, namely as this:<div class="parent" style="margin: auto; width: 50%;">
<div class="child" style="position: relative; float: left; left: 1em; top: 1em; width: 50%;">
Hi!
</div>
<div class="clearing" style="clear: both; height: 1px; overflow: none;">
</div>
</div>
It's also possible to set the child
div to have position: absolute (and not floated) but it will be placed absolutely relative to the window's upper-left corner.  To make it relative to the parent div, set the parent div to have position: relative as well, as follows:<div class="parent" style="position: relative;margin: auto; width: 50%;">
<div class="child" style="position: absolute; left: 1em; top: 1em; width: 50%;">
Hi!
</div>
<div class="clearing" style="clear: both; height: 1px; overflow: none;">
</div>
</div>