Felix Riesterer: / (CSS) IE8 rundet Fließkomma-Pixelwerte?!?

Liebe Spezialisten,

Mir ist heute aufgefallen, dass mein "Bilderticker"-Script im IE8 nicht "ticken" wollte, sprich es kam keine Bewgung zustande. Fehlermeldungen erschienen auch keine, denn das Script wurde weiterhin (offensichtlich fehlerlos) ausgeführt.

Meine Nachforschungen haben ergeben, dass die als marginLeft zugewiesenen Werte vom IE8 gerundet werden. Wenn die Ticker-Geschwindigkeit auf "0.5" steht, werden als margin-left immer um einen halben Pixel verminderte Werte zugewiesen. Das sieht dann so aus:

margin-left: 0px
margin-left: -0.5px
margin-left: -1px
margin-left: -1.5px
margin-left: -2px
margin-left: -2.5px
usw.

Da mein Script den momentan zugewiesenen Wert für margin-left ausliest, um daraus den neuen Wert zu errechnen, wechselt es ständig von 0px auf -0.5px, da der IE8 aus den -0.5px wieder 0px macht - und deswegen blieb mein Ticker im IE8 stehen.

Eine Lösung des Problems war, den numerischen Wert in einer Variablen abzuspeichern, um als Berechnungsgrundlage nicht den aktuellen Wert von margin-left zu nehmen, sondern den abgespeicherten Wert. O_o

Wer hat ähnliche Erfahrungen mit dem IE8 gemacht?

Wer weiß, ob das Runden von Fließkomma-Pixelwerten standardkonform ist?

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  1. Hi,

    Wer weiß, ob das Runden von Fließkomma-Pixelwerten standardkonform ist?

    Ich denke, die beiden treffendsten Stellen in CSS 2.1 sind folgende,

    4.3.2 Lengths:
    In cases where the used length cannot be supported, user agents must approximate it in the actual value.

    6.1.4 Actual values:
    A used value is in principle the value used for rendering, but a user agent may not be able to make use of the value in a given environment. For example, a user agent may only be able to render borders with integer pixel widths and may therefore have to approximate the computed width, [...] The actual value is the used value after any approximations have been applied.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. In diesem Fall würd ich das auch so erwarten. Man stelle sich vor, das Script soll abfragen wo ein Element ist und bekommt dann Nachkommastellen als Position raus. Das wäre schlichtweg falsch, denn ein Element kann nur ganzzahlige Pixelpositionen haben.

    2. Lieber ChrisB,

      vielen Dank für die Klarstellungen! Jetzt weiß ich, dass sich der IE8 in diesem Fall durchaus standardkonform verhält... und der FF nicht.

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
      1. Hi,

        vielen Dank für die Klarstellungen! Jetzt weiß ich, dass sich der IE8 in diesem Fall durchaus standardkonform verhält... und der FF nicht.

        Ich bin mir noch gar nicht *ganz* sicher ...

        Die CSS-Spezifikation besagt zwar, dass der actual value ggf. gerundet bzw. dem Ausgabemedium angepasst werden soll - aber wo genau steht, dass element.style.eigenschaft den actual value zurückgeben soll, und nicht den zugewiesenen Wert, das habe ich noch nicht gefunden.

        Mich hat der FireFox mit seinem Verhalten allerdings auch mal geärgert - ich wollte ein der Zeilenhöhe angepasstes Hintergrundbild für einen Texteffekt verwenden. Leider liefert der FireFox nicht nur Pixelwerte mit Nachkommazahlen bei der Abfrage über computedStyle, sondern wendet diese auch intern an, so dass durch Rundung die Zeilenhöhe ab einer bestimmten Anzahl Zeilen einen Pixel höher wurde, was den Effekt versaut hat.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
  2. Moin Moin!

    Fließkomma

    <pedantic>Die korrekte Übersetung von "floating point number" ist "Gleitkommazahl".</pedantic>

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".