levu: currentStyle im IE: auto?!?! ich hätte gerne 123 px!!

Hallo,

ich habe folgende Funktion:

function getCurrentStyle(e, css){  
 var ret = "";  
 if(document.defaultView && document.defaultView.getComputedStyle){  
  ret = document.defaultView.getComputedStyle(e, "").getPropertyValue(css);  
 } else if(e.currentStyle){  
  css = css.replace(/\-(\w)/g, function (strMatch, p1){ return p1.toUpperCase(); });  
  ret = e.currentStyle[css];  
 }  
 return ret;  
}

und einen div, in dem ganz normal n bissel text, ne liste... drin ist. Wenn ich jetzt dessen Höhe im IE 7 abfrage, bekomme ich auto zurück. In anderen Browsern aber z.B. 123px. Wie kann ich genau diese Zahl im IE auch abfragen? Das ist genau das Ziel des Codes. Dass die Höhe automatisch bestimmt wird, ist mir selber klar :S

mfg, Flo

--
sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
  1. und einen div, in dem ganz normal n bissel text, ne liste... drin ist. Wenn ich jetzt dessen Höhe im IE 7 abfrage, bekomme ich auto zurück. In anderen Browsern aber z.B. 123px.

    Warum verwendest du nicht offsetHeight?
    Das funktioniert in noch mehr Browsern.

    Struppi.

    1. Hallo,

      Warum verwendest du nicht offsetHeight?
      Das funktioniert in noch mehr Browsern.

      Danke! Auf sowas bin ich gar nicht gekommen. Muss mal ausprobieren. ist das aber nicht von document.all ?

      mfg, Flo

      --
      sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
      1. Warum verwendest du nicht offsetHeight?
        Das funktioniert in noch mehr Browsern.
        Danke! Auf sowas bin ich gar nicht gekommen. Muss mal ausprobieren. ist das aber nicht von document.all ?

        Da steht es zwar bei selfhtml, es können aber eigentlich alle Browser.

        Struppi.

        1. Hallo,

          OK, soweit klar, bloß jetzt bekomme ich 1em und würde gerne sowas wie 12px oder so haben. geht das irgendwie?

          mfg, Flo

          --
          sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
          1. OK, soweit klar, bloß jetzt bekomme ich 1em und würde gerne sowas wie 12px oder so haben. geht das irgendwie?

            Das bekommst du sicher nicht, offsetHeight ist die Höhe in Pixel - ohne Einheit.

            Struppi.

            1. Hallo,

              Das bekommst du sicher nicht, offsetHeight ist die Höhe in Pixel - ohne Einheit.

              Sorry, ich meine für den margin & padding, die ich dazurechnen muss.

              mfg, Flo

              --
              sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
              1. Das bekommst du sicher nicht, offsetHeight ist die Höhe in Pixel - ohne Einheit.
                Sorry, ich meine für den margin & padding, die ich dazurechnen muss.

                Das ist schwierig, diese Werte lassen sich nicht ohne weiteres ermitteln. Da diser Wert nicht dem Element zugerechnet wird.

                Struppi.

                1. Hallo,

                  hmm. und was ist mit top, left, bottom und right? da bekomme ich beim IE "1em" und bein FF "12px" o.ä. ?

                  mfg, Flo

                  --
                  sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
                  1. hmm. und was ist mit top, left, bottom und right? da bekomme ich beim IE "1em" und bein FF "12px" o.ä. ?

                    Es wurde enorm helfen, wenn du deine Fragen so formulierst, dass man als Aussenstehender versteht wo von du sprichst.

                    Struppi.

                    1. Hallo,

                      ich habe bei einem Element einen top-wert (css) von 1 em und im IE bekomme ich mittels der getCurrentStyle "1em" und bei FF "12px". Ist da das gleiche Problem wie bei margin & padding? oder gits bei den positionsangaben irgendwie einen Trick? Firebug zeigt immerhin auch die Position in px an... Auch wenn ich Firebug-Lite im IE benutze, aber ich habe nicht die zeit, das ganze Firebug-Skript zu lesen...

                      mfg, Flo

                      --
                      sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
                      1. ich habe bei einem Element einen top-wert (css) von 1 em und im IE bekomme ich mittels der getCurrentStyle "1em" und bei FF "12px". Ist da das gleiche Problem wie bei margin & padding? oder gits bei den positionsangaben irgendwie einen Trick?

                        Ja, in dem du die Offset Werte benutzt.
                        padding ist kein Problem, da die padding Werte darin enthalten sind. siehe: https://developer.mozilla.org/en/Determining_the_dimensions_of_elements

                        Struppi.

                      2. Yerf!

                        ich habe bei einem Element einen top-wert (css) von 1 em und im IE bekomme ich mittels der getCurrentStyle "1em" und bei FF "12px". Ist da das gleiche Problem wie bei margin & padding?

                        Ja. Das eigentliche Problem ist, das getComputedStyle und currentStyle nicht gleichwertig sind. CurrentStyle liefert als Ergebnis immer die Angabe, wie sie im CSS direkt gemacht wurde inklusive der gleichen Einheit. GetComputedStyle liefert dagegen (wie der name schon andeutet) den vom Browser errechneten Wert den er für die Darstellung verwendet. Deshalb ist dieser Wert dann auch in Pixel, da der Browser mit dieser Einheit am besten umgehen kann.

                        Eine andere Lösung als OffsetHeight/-Width und den verzicht auf Nicht-Pixel-Einheiten im CSS hab ich auch noch nicht gefunden...

                        Gruß,

                        Harlequin

                        --
                        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
                        1. Das eigentliche Problem ist, das getComputedStyle und currentStyle nicht gleichwertig sind.

                          Genau, und aus dem Grund ist eine browserübergreifende Funktion, die wahlweise getComputedStyle und currentStyle benutzt, eigentlich auch blanker Unsinn (auch wenn ich hier so eine Funktion des öfteren gepostet habe). Es gibt unzählige Fälle, in denen diese Gleichsetzung schiefläuft. Das ist ein ähnliches Ding wie addEventListener und attachEvent. Ähnlich, aber im Detail ganz anders.

                          Mathias

                          1. Hallo,

                            Danke auch allen, jetzt weiß ich auch, wo das problem liegt. Ich habe es jetzt alles in px, wo ich das nicht anders abfragen kann. Danke!!

                            mfg, Flo

                            --
                            sh:) fo:| ch:? rl:( br:^ n4:| ie:{ mo:| va:} de:> zu:} fl:{ ss:) ls:< js:|
              2. Sorry, ich meine für den margin & padding, die ich dazurechnen muss.

                Da wirst du letztendlich keine einfache Lösung für finden. 1em könntest du natürlich irgendwie selbst in Pixel umrechnen, was aber mit viel Aufwand verbunden ist, und letztlich nicht unbedingt zuverlässig ist. Versuche solche Probleme möglichst zu umgehen.

                Mathias