Sięgnąwszy do literatury muszę jednak zmodyfikować swoją odpowiedź, pozycjonowanie wygląda mniej więcej tak:
relative - jest to w praktyce znacznik wykorzystywany do definiowania bloku pozycjonującego.
Cytat: "Element może być pozycjonowany relatywnie względem położenia, kóreby zajmował, gdyby miał ustaloną pozycję static. Innymi słowy pozycjonowanie (top, left) ustawione na (50, -30) umieściłoby dany element 50px pod i 30px w lewo względem domyślnego, określonego przez przeglądarkę położenia)
static - cyt: "Element wyświetlany zgodnie z noramlym układem strony. Właściwości: bottom, left, right, top nie spowodują przemieszczenia elementu."
Jest on wartością domyślną
absolute - "Element może być dokładnie pozycjonowany w obrębie kontekstu, w ktorym się znajduje. Pozycjonowanie top, leftustawione na (0,0) spowoduje, ze lelement zostanie umieszczony w lewym górnym rogu sekcji body lub elementu rodzica, którego właściwość position została ustawiona na wartość inną niż static
Absolutnie pozycjonowane elementy nie zajmują żadnego miejsca w normalnym układzie strony."
fixed - "Ustawienie pozwala, podobnie jak przy wartości absolute, na pozycjonowanie danego elementu, jednak w momencie przewijania strony element nie będzie poruszać się z resztą zawartości na stronie, lecz pozostanie na swoim miejscu"
Wynika stąd, że:
- trzeba zdefiniować sobie relative, żeby nie mieć domyślnie static
- każdy absolute jest blokiem pozycjonującym o ile nie pozycjonuje czegoś, co ma przypisaną wartość static albo nie ma przypisanej żadnej wartości, co wynika z tekstu lektury
- wartość absolute odtyczy każdego elementu innego niż static w obrębie jego własnego bloku obejmującego (na zasadzie, bliższa koszula ciału)
Jeśli chodzi o Twój problem, ja bym zrobił tak:
uznał body albo div za relative
reszte - wszystkie divy i tabelę - zakodował jako absolute i powinno działać :)
Powodzenia!
Cytaty z: Utopia html - projektowanie w CSS bez uzycia table, Helion