Использование вашего решения ...
Просто не очищайте плавающий элемент div, вы говорите, что он должен плавать , но тоже нужно очистить.Вроде сбивает с толку!
<style>
#container{ width:200px; background:gray;}
#div1 { float:left; background:red;}
#div2 { float:left; background:green; }
</style>
<div id="container">
<div id="div1">div one floats to the left</div>
<br style="clear:left" />
<div id="div2">div two floats to the left</div>
<br style="clear:left" />
</div>
Если вы не поставите 1-й <br />
, то есть 6/7 попытается поместить 2-й дел в оставшееся небольшое пространство.Если вы очистите div, он поместит его на новую строку, но примет ту же длину, что и справа от первого div.
На мой взгляд, ваше решение достаточно хорошее и достаточно простоеВы можете пойти с этим.В противном случае есть 2 варианта:
Альтернатива 1
Встроенные блоки работают ... если вы используете неблокированный элемент для начала (не знаю точно, почему).
<style>
#container{ width:200px; background:gray;}
#div1 { background:red; display:inline-block; line-height:30px;}
#div2 { background:green; display:inline-block;width:auto; }
</style>
<div id="container">
<span id="div1">div1</span>
<span id="div2">div2 doesnt float blablabla</span>
</div>
Альтернатива 2
Использовать таблицы (не очень хорошо, но все же, это работает!)
<style>
#container{ width:200px; background:gray;}
#div1 { background:red;}
#div2 { background:green; }
</style>
<div id="container">
<table><tr><td id="div1">div one floats to the left</td></tr></table>
<table><tr><td id="div2">div two floats to the left</td></tr></table>
</div>