В этом случае div playArea не будет автоматически расширяться по ширине / высоте, чтобы соответствовать элементам внутри, и, поскольку высота не определена, он обрабатывается как не занимающий места (это означает, что тег
будет появляются в том же месте, что и div).
Если вы не знаете размеры div playArea перед рукой или они могут измениться, было бы лучше расположить ваши элементы, используя float, clear и margin, чтобы получить тот же самый макет, который вы получили в настоящее время.
Если вы еще этого не сделали, установите плагин Firebug для Firefox - это сделает вашу жизнь в CSS бесконечно проще, так как вы можете редактировать CSS и видеть изменения на лету. Не забудьте протестировать и в других браузерах.
Редактировать: Вот пример с поплавками (сделал это в спешке, поэтому может быть не идеальным)
<div id="playArea" style="float: left;">
<div id="widget2" class="widget" style="background-color: green; float: left; margin-left: 63px; margin-top: 35px; width: 80px; height: 42px;">World</div>
<div id="widget1" class="widget" style="background-color: red; float: left; margin-left: 152px; margin-top: -1px; width: 313px; height: 269px;">Hello</div>
<div style="background-color: blue; float: left; clear: left; margin-left: 534px; margin-top: 26px; width: 183px; height: 251px;">Bye</div>
</div>
<p style="clear: both; float: left;">Test P Element</p>