I'm pretty accustomed to clearing my floats by using <br style="clear:both"/>
but stuff keeps on changing and I am not sure if this is the best practice.
There is a CSS hack (from positioneverything) available that lets you achieve the same result without the clearing div. But... they claim the hack is a little out of date and instead you perhaps should look at this hack. But.. after reading through 700 pages of comments :) it seems there may be some places the latter hack does not work.
I would like to avoid any javascript hacks cause I would like my clearing to work regardless of javascript being enabled.
What is the current best practice for clearing divs in a browser independent way?
Clearing floats The CSS clear controls the behavior of the floating element by preventing the overlapping of consecutive elements over the floating element. The value of the property clear specifies the side on which the floating element is not supposed to float.
The clear CSS property sets whether an element must be moved below (cleared) floating elements that precede it. The clear property applies to floating and non-floating elements.
Left and Right can be used to only clear the float from one direction respectively. None is the default, which is typically unnecessary unless removing a clear value from a cascade.
Update: In 2014, you should use a clearfix technique that utilized pseudo-elements, like the one mentioned by @RodrigoManguinho. This is the modern way of clearing floats. For an even more up to date method, see Nicholas Gallagher's micro clearfix:
/** * 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; }
Original Answer:
I really don't like using extra non-semantic markup, so I stay away from using a clearing element. Instead of just apply overflow: hidden;
to the parent of the float(s) to clear them. Works cross browser, no problem. I believe overflow: auto;
also works.
Obviously, it won't work if you want to use a different overflow property, but because of the IE6 expanding box bug, I rarely have a reason to purposely overflow my containers.
See more info on using overflow
instead of clear
to avoid adding extra markup.
I've found that most often (myself included), this method is used in the html:
<div class="clear"></div>
With this in the stylesheet:
.clear {clear: both;}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With