Why top margin of html element is ignored after floated element?
You've correctly identified the problem. The floated <div>
is no longer used to calculate the top margin, and therefor the 2 <div>
's just butt against each other. A simple way to solve this is just to wrap the 2nd <div>
. This will allow the wrapper to (invisibly) butt up against the first <div>
, and allow you to specify white space for it.
The trick to getting the wrapper to work right is to have the white space be internal white space. In other words, the wrapper uses padding instead of margin. This means whatever is going on outside the wrapper (like other floating elements) won't really matter.
<div style="float: left; border: solid red 1px">foo</div>
<div class="wrapper" style="clear: both; padding-top: 90px;">
<div style="border: solid red 1px">This div should not touch the other div.</div>
</div>
you could simply add a div between them
<div style="float: left; border: solid red 1px">foo</div>
<div style="clear:both;"></div>
<div style="margin-top: 90px; border: solid red 1px">This div should not touch the other div.</div>
and that should take care of it.
Lots of WordPress themes (and not only) employ this technique