heinetz: absolute Position eines DIV-Containers ermitteln

Hallo Forum,

ich versuche eben die abolute Position eines DIV-Containers zu
ermitteln, die sich aus Verschachtlung innehalb anderer DIVs,
die per CSS mit margins und paddings zu ermitteln. Das Problem
ist mal wieder der IE ;(

... denn für Mozilla lässt sich mit DIV-Container.offsetTop die
richtige Position (angenommen 960px) exakt ermitteln. Beim IE
steht in der Eigenschaft leider 0 (px), weil der IE hier der
Abstand zum nächsten übergeordneten Element ist meint. Dessen
absolute Position würde ich dann mit DIV-Container.offsetParent.
offsetTop erhalten.

So weit so gut. Mit folgender Routine müssten sich demnach alle
Eltern und deren Abstände einfach summieren lassen:

obj_top = obj.offsetTop;
while (obj=obj.offsetParent) obj_top+=obj.offsetTop;

Aber der scheint sich dabei irgendwie zu verrechnen. Liegt das
an negativen margins oder ist der Ansatz grundsätzlich zweifelhaft ?

gute Nacht,
heinetz

  1. Hi,

    obj_top = obj.offsetTop;
    while (obj=obj.offsetParent) obj_top+=obj.offsetTop;

    Aber der [IE] scheint sich dabei irgendwie zu verrechnen. Liegt das
    an negativen margins

    Nein.
    Meiner Erfahrung nach verrechnet sich der IE aber dann, wenn nicht alle(?) Elemente in der Kette die hasLayout-Eigenschaft haben.

    MfG ChrisB

    --
    "The Internet: Technological marvel of marvels - but if you don't know *what* you're lookin' for on the Internet, it is nothing but a time-sucking vortex from hell."
  2. Aber der scheint sich dabei irgendwie zu verrechnen. Liegt das
    an negativen margins oder ist der Ansatz grundsätzlich zweifelhaft ?

    "Irgendwie verrechnet", kann auch darauf hindeuten, dass du im Quirkmodus statt im Standardmode arbeitest, aber das ist nur eine Vermutung.

    Struppi.

  3. Hi,

    benutze für IE:

    var rect = element.getBoundingClientRect();

    rect.top;
    rect.left;

    wobei es die offsetParent Schleife natürlich auch tun sollte.

    Allerdings ist diese Methode in allen Browsern ungenau, wenn man elemente mit margins und bordern hat.

    Dazu kommt immer noch der scrollOffset einiger Elemente.

    Opera hat den z.B. _manchmal_ schon in offsetTop drin, und für TR und inline elemente hat er einen ganz falschen Wert.

    Mozilla berechnet den Border nicht mit, außer für TD/TH/TABLE. Und wenn man Elemente hat, deren overflow Eigenschaft != "visible" sind und kein offsetParent darstellen, wird deren border auch nicht mitberechnet. Ganz komisch alles.

    Und wenn man border beim Body hat hängt es wiederum davon ab, ob das letzte "offsetChild" absolute war oder nicht. Aber auch nur im Mozilla.

    Auch lustig ist, wenn man ein Table mit position:relative und z.B. margin:100px hat. Dann wird der margin auch nicht mitberechnet.

    gruß!

    1. Auch lustig ist, wenn man ein Table mit position:relative und z.B. margin:100px hat. Dann wird der margin auch nicht mitberechnet.

      Naja, die eigentliche Position des Elementes wird ja vom margin nicht verändert (nicht nur bei Tabellen und bei position relative). Da ist die Frage welches Boxmodell angwandt wird.

      Struppi.