Ben2: Bedeutung von document.documentElement

Hallo,

ein anderes Stichwort und eine weitere Frage zu Grundsätzlichem - vielleicht mag mich auch hier jemand von Euch aufklären. Es geht um die genaue Bedeutung von

document.documentElement

insbesondere im Unterschied von

document.documentElement.offsetWidth

und

document.body.offsetWidth

Welche Werte werden hier jeweils ermittelt, wo liegen die spezifischen Unterschiede und wie sieht es hier jeweils mit der Browserunterstützung aus - insbesondere unter Anwendung der Doctype-Varianten "transitional" und "stict" ?

Mit freundlichen Grüßen

Ben 2

  1. document.documentElement
    ist die Referenz auf das Rootelement des Documentes, in HTML ist dies:
    <html>
    in XML dann das auf ganz anders heißen.
    document.body
    ist ein Kindelement des Rootelementes
    Hinsichtlich der Breite können die Werte für den Body und für das Rootelement deutlich voneinander Anweichen. Gründe hierfür liegen in den Angaben für Padding und Margin für das html- bzw. body-Element. Desweiteren kannst Du per CSS die Breite des Bodies auch setzen, z.B.:
    body{width:50%;}

    Mit freundlichen Grüßen

    Ben 2

    Wieviel Namen willst Du Dir noch geben, ich benenne mich doch auch nicht nach der Anzahl meiner Beiträge.
    Gruß
    Avalon

    1. Mit "document.body.offsetWidth" kann ich die verfügbare Bildschimbreite ermittelt, dieses funktioniert leider nicht mehr (?) im IE6 mit DOCTYPE "strict" - hier soll (muss) ich statt dessen

      document.documentElement.offsetWidth verwenden.

      Wie kann ich dann über alle Browser- und DOCTYPE-Varianten hinweg einheitlich ermitteln, wie breit der verfügbare (dh. für das HTML-Dokument nutzbare) Teil des Bildschims ist ...

      Wieviel Namen willst Du Dir noch geben, ich benenne mich doch auch nicht nach der Anzahl meiner Beiträge.

      Das ist für mich natürlich kein ausreichender Grund, es nicht zu tun

      :-)

      Gruß

      Ben 2

      1. Wieviel Namen willst Du Dir noch geben, ich benenne mich doch auch nicht nach der Anzahl meiner Beiträge.

        Zumal sich da gerade einer BEN nennt - der ich gar nicht bin !!!!

        1. Wen meinst Du?
          Ben1, dessen Posting mit:

          Funktionieren tut beides, aber das ist ja öfter so. Wie verhält es sich diesbezüglich in den aktuellen Browsern (IE 5+ und IE6, Firefox etc.) und hier jeweils unter Anwendung der Doctype Varianten "transitional" und "stict" ?

          oder Ben2, dessen Posting mit:

          Welche Werte werden hier jeweils ermittelt, wo liegen die spezifischen Unterschiede und wie sieht es hier jeweils mit der Browserunterstützung aus - insbesondere unter Anwendung der Doctype-Varianten "transitional" und "stict" ?

          endet?
          Du wirst zugeben, daß die Zitate auf die gleiche Autorenschaft schließen lassen.

          Gruß
          Avalon

          1. Wen meinst Du?
            Du wirst zugeben, daß die Zitate auf die gleiche Autorenschaft schließen lassen.

            Wer bestreitet das ausser Dir ............ :-/

      2. Mit "document.body.offsetWidth" kann ich die verfügbare Bildschimbreite ermittelt, dieses funktioniert leider nicht mehr (?) im IE6 mit DOCTYPE "strict" - hier soll (muss) ich statt dessen

        Das konntest Du noch nie, hätte Dir aber spätestens beim sorgfälltigen Lesen meiner erste Antwort oben auffallen müssen.

        document.documentElement.offsetWidth

        So wurde es schon immer gemacht (Ausnahme Netscape da geht auch window.outerWidth).

        Die Breite des bodies kannst Du auch erst ermitteln, sobald es einen body gibt, also noch nicht im head eines Dokumentes. Aber wie gesagt, die Breite des Bodies stimmt selten mit der Breite des Dokumentes überein.

        Gruß
        Avalon

        1. Hab gerade Deinen Beitrag nochmal sorgfälltig gelesen:

          Mit "document.body.offsetWidth" kann ich die verfügbare Bildschimbreite ermittelt,

          Das ist ja hahnebüchender Unsinn, den Du da von Dir gibst. Was um alles in der Welt hat die Bildschirmbreite mit der Breite Deines Dokumentes oder mit Deiner Fensterbreite zu tun?

          Gruß
          Avalon

      3. Mit "document.body.offsetWidth" kann ich die verfügbare Bildschimbreite ermittelt, dieses funktioniert leider nicht mehr (?) im IE6 mit DOCTYPE "strict" - hier soll (muss) ich statt dessen

        document.documentElement.offsetWidth verwenden.

        Wie kann ich dann über alle Browser- und DOCTYPE-Varianten hinweg einheitlich ermitteln, wie breit der verfügbare (dh. für das HTML-Dokument nutzbare) Teil des Bildschims ist ...

        Nicht Bildschrimbreite, du meinst die Browserfensterbreite.

        Die kannst du so ermitteln:

        ////////////////////////////////////////////////////////////
        function getWinSize(win)
        {
            if(!win) win = window;
            var s = new Object();
            if(typeof win.innerWidth != 'undefined')
            {
                s.width = win.innerWidth;
                s.height = win.innerHeight;
            }
            else
            {
                 var obj = getBody(win);
                 s.width = parseInt(obj.clientWidth);
                 s.height = parseInt(obj.clientHeight);
            }
            return s;
        }
        function getBody(w)
        {
            return (w.document.compatMode && w.document.compatMode == "CSS1Compat") ?
            w.document.documentElement : w.document.body || null;
        }

        Struppi.

        1. Hy Struppi,

          herzlichen Dank für Deine direkte unkomplizierte Hilfe - Du hast mir 2003 in einem langen Posting mitten in der Nacht, als ich noch Gunnar hieß - Du erinnerst Dich ;\ - in einer vergleichbaren Frage geholfen.

          Von Dir stammt übrigens auch der Tipp mit "document.documentElement" im Zusammenhang mit dem Internet Explorer 6 und Doctype "strict".

          Das eigentliche Problem hinter der Frage ist:

          wie kriege ich eine mit CSS definierte Box mit Hilfe von Javascript dynamisch immer auf die ganze --- Browserfensterbreite ---.

          Unter Doctype "transitional" funktionierte in allen Browsern:

          ebene = document.getElementById("box");
          ebene.style.width = document.body.scrollLeft+document.body.clientWidth+"px";

          Im IE 6 und Firefox funktioniert dieses nicht mehr !

          Im IE 6 hilft "document.documentElement" als Ersatz für document.body - aber Firefox verweigert sich total.

          Den Doctype-Switch zwischen IE 5 und 6 über eine if-Abfrage und den compatMode zu handhaben - wie von Dir dargestellt - leuchtet mir ein.

          Was mache ich aber mit Firefox in diesem Punkt ?
          Magst Du mir abermals entscheidend weiterhelfen ?

          Mfg Ben 1 und 2