Ralf: Seitenhöhe ermitteln

Hallo liebe Forengemeinde!

Ich weiss - das Thema ist schon häufig genug durchgekaut worden, aber trotz gründlicher Recherche hier im Forum und auch auf anderen Seiten (z.B. quirksmode.org) habe ich immer noch das Problem, einen IFRAME exakt so hoch zu bestimmen, dass die darin enthaltene Seite ohne Scrollbalken und vollständig angezeigt wird. Und natürlich soll diese Höhe nicht höher sein als erforderlich.

Im speziellen Fall liegen die Seiten im IFRAME ohne DOCTYPE vor, so dass vom quirks mode auszugehen ist (IE, FF und Opera weisen sämtlich für document.compatMode den Wert "BackCompat" aus).

Für den IE ist die Sache nun sehr einfach, denn document.body.scrollHeight weist immer die tatsächlich benötigte Höhe inkl. margin des BODY Elements aus.

Und genau letztere ist im FF und Opera das Problem, weil ich sie nicht kenne. Dort bekomme ich die Höhe in document.documentElement.offsetHeight - aber exkl. margin.

Wie ermittle ich die tatsächliche margin des BODY Elements, wenn sie nicht per Attribut festgelegt ist? Oder gibt es vielleicht bessere Methoden, um mein Ziel zu erreichen?

Ich habe einen gewissen Einfluss auf den Inhalt der anzuzeigenden Seiten, möchte diese aber eigentlich nicht verändern. Ich könnte z.B. die margin des BODY Elements auf 0 setzen und ein leeres DIV Element anhängen und dann wäre dessen offsetTop exakt die benötigte Höhe in allen Browsern. Diese Lösung möchte ich aber gern vermeiden.

Jemand eine Idee?

Ralf

  1. Jemand eine Idee?

    Wenn ich das richtig verstanden habe, schlägt hier der Boxmodell bug des IE durch und gegen den kannst du nichts machen. Konkret, liegt hier also der IE falsch. Das einfachste wäre der Standardmode, da der IE dann wenigsten in dem Punkt Konform geht.

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. Wenn ich das richtig verstanden habe,

      Hast du nicht, wenn du natürlich auch mit dem Boxmodell bug Recht hast.

      Durch diesen ist es möglich, den Platzbedarf der Seite im IE über document.body.scrollHeight zu ermitteln - unabhängig von der margin.

      Aber wie bekomme ich das in FF und Opera hin? Und zwar absolut exakt auf den Pixel genau. Die Höhe des BODY steht in document.documentElement.offsetHeight - aber wo steht die margin?

      Ralf

      1. hi,

        Aber wie bekomme ich das in FF und Opera hin? Und zwar absolut exakt auf den Pixel genau. Die Höhe des BODY steht in document.documentElement.offsetHeight - aber wo steht die margin?

        Im Zweifelsfalle - "in" computedStyle.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Im Zweifelsfalle - "in" computedStyle.

          Vielen Dank für den Hinweis. Über die Suche habe ich sehr brauchbare Hinweise dafür gefunden.

          Allerdings war meine Annahme falsch, dass die margin nicht in den Werten entahlten ist ...

          Ralf

  2. Für den IE ist die Sache nun sehr einfach, denn document.body.scrollHeight weist immer die tatsächlich benötigte Höhe inkl. margin des BODY Elements aus.

    Und das liegt wohl daran, dass der IE mit margin=0 beim BODY arbeitet und den "Rand" als padding ausbildet.

    Und genau letztere ist im FF und Opera das Problem, weil ich sie nicht kenne. Dort bekomme ich die Höhe in document.documentElement.offsetHeight - aber exkl. margin.

    Ich kenne die Werte natürlich aus Versuchen. 10px beim FF und 6px beim Opera. Ich suche aber nach einer Methode, um die reale margin zu ermitteln (weil sie z.B. in % angegeben ist).