Причина, по которой вы видите поведение, которое вы описываете, заключается в том, что именно эти инструкции вы даете DIV.
Давайте разберемся:
<div style="border: solid 1px navy; float: left;">
Это основано на поведении по умолчанию для всего, кроме границы, и, плавая его, вы говорите прямоугольнику прикрепить себя к левому полю (его родителя, который здесь считается телом) независимо от того, что еще принадлежит там. Ширина DIV по умолчанию составляет 100% от ширины родительского объекта (все еще тег body). Положение по умолчанию должно быть следующим элементом блока в потоке - поскольку других элементов блока нет, он выравнивается по вертикали с верхним полем.
Затем вы попросили другого DIV сделать это:
<div style="background-color: blue; float:left;">
Что по сути то же самое. Здесь вы не дали ни DIV новую ширину, ни какие-либо дополнительные инструкции о том, где в макете они должны теперь идти, поэтому он прикрепляется к левому полю, а его верхнее поле находит ближайший элемент блока, к которому можно прикрепить (все еще тело ).
Чтобы выстроить их в ряд, сделайте следующее:
<style type="text/css">
.leftBox, .rightBox
{
width: 48%; /*leave some room for varying browser definitions */
border: 1px solid navy;
float: left;
display: inline; /* follow the semantic flow of the page and don't break the line */
clear: left; /* don't allow any other elements between you and the left margin */
}
.rightBox
{
border: none;
background-color: blue;
clear: right;
}
</style>
<div class="leftBox">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
</ul>
</div>
<div class="rightBox">
<p>
some other text</p>
</div>