En positionnement absolu, ton élément sort du flux pour être positionné par rapport à son conteneur parent, l'élément body dans ton cas.
En fait, le positionnement en absolu est une mauvaise habitude puisqu'elle reprend la logique de positionnement par tableau qui est à banir maintenant.
Dans la pratique, les éléments de type block s'affichant les uns en dessous des autres : lorsque tu affiches deux paragraphes (de type block donc), le second se place sous le premier et pas à la suite.
En utilisant cette propriété, tu peux parfaitement positionner des éléments sans avoir recours au positionnement absolu, lequel je rappelle sort l'élément du flux de lecture.
Exemple concret : tu utilises une balise div appelée menu pour y mettre surement un menu, menu qui sera en fait une liste non ordonnées, donc une balise ul encadrant des balises li.
ul est un élément de type block, tu n'as donc pas besoin de passer par un conteneur div et tu peux écrire <ul id="menu"> et affecter des propriétés à cet élément.
Le risque avec le positionnement absolu est de multiplier à outrance les balise div qui n'ont sémantiquement aucun sens.
En gros, tu remplaces tes balises td de tablleau par des conteneurs. Et si c'est ce qui est enseigné, c'est fort regrettable.
Essaie pour visualiser ton problème de mettre des espaces insécables dans toutes tes balises div et accessoirement, affecte une couleur de fond différente pour chacun histoire de bien comprendre ce qui se passe.
A l'occasion, sous FF, tu peux utiliser l'add-on web developer dispo sur le site de Mozilla.