Как я понимаю, float можно применять к блок-элементам, которые нельзя вставить в UL. (ни div, ни BR вы не можете вставить в UL). На самом деле вы можете, но это недействительно.
Итак, я закрыл ваш ul контейнером div:
<div class="ul-container">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<br style="clear:both">
</div>
<b>The height of the ul-tag is ok, but the code is not valid!</b>
и css ul a css .ul-container
.ul-container {
border: 2px solid red;
}
ul li {
float:left;
background: #ccc;
margin: 5px;
}