Floated elements are removed from the regular flow. Therefore, the parent container can't calculate the height of the content. To fix this, we need to clear the floats, which essentially means it will be put back into the flow.
Nicholas Gallagher has made a neat little clearfix trick. Basically, you simply add the class to the parent element, and all containing floats will be cleared.
http://nicolasgallagher.com/micro-clearfix-hack/
/**
* For modern browsers
* 1. The space content is one way to avoid an Opera bug when the
* contenteditable attribute is included anywhere else in the document.
* Otherwise it causes space to appear at the top and bottom of elements
* that are clearfixed.
* 2. The use of `table` rather than `block` is only necessary if using
* `:before` to contain the top-margins of child elements.
*/
.cf:before,
.cf:after {
content: " "; /* 1 */
display: table; /* 2 */
}
.cf:after {
clear: both;
}
/**
* For IE 6/7 only
* Include this rule to trigger hasLayout and contain floats.
*/
.cf {
*zoom: 1;
}