Darstellung von Elementen mit reellen Breiten
Gerrit
- browser
Hallo,
bei meiner Programmierung ist mir neulich ein folgenschwerer Fehler im IE aufgefallen.
Nehmt ein Div mit einer Breite von 20.6px.
Dieses Div kann natürlich von den Browsern auf ihrer Darstellungsfläche nicht mit Nachkommastellen dargestellt werden - also wird gerundet: aus 20.6px wird 21px.
Bleibt es bei einem Div, ist das auch ok. Aber schon das 2. Element, welches per float neben das erste gestellt wird, bewirkt folgendes:
Safari, Firefox und Co machen es richtig:
Das erste Element wird mit einer Breite von 21px dargestellt und das 2. mit einer Breite von 20px!!! (20.6 * 2 = 41.2px oder gerundet eben 41px Gesamtbreite)
IE macht alles falsch:
Hier kriegt das 2. Element auch eine gerundete Breite von 21px und ich komme für beide auf insgesamt 42px :-(
Na ja, und je mehr Element ich nebeneinander anordne, desto größer wird natürlich der Fehler...
Kennt Ihr den Fehler? Kann man das irgendwo schon nachlesen? Ist das Posting hier richtig? Wie kann ich möglichst vielen Leuten davon mitteilen?
Vielen Dank für Eure Antworten.
Beste Grüße
Gerrit
Kennt Ihr den Fehler? Kann man das irgendwo schon nachlesen? Ist das Posting hier richtig? Wie kann ich möglichst vielen Leuten davon mitteilen?
pixel ist eine absolute einheit, die in ganzen zahlen oder reelle zahlen [1] angegeben werden soll - spezifikation sind zwar auch nachkommastellen möglich (Syntax and basic data types)
width wird explizit als "value" (reelle zahl) angegeben - allerdings ist ein weiteres verhalten (wie zb genau gerundet wird) nicht definiert - aus dem grund liegt afaik keiner der browser falsch oder richtig - bei pixel sollte empfehlenswerterweise eine ganzzahl angegeben werden, da pixel nunmal aus ganzen werten bestehen - es gibt schlichtweg keine halben, 60%igen oder 1/37 pixel
[1] in der empfehlung steht wörtlich "real numbers" wobei wahrscheinlich eher rationale zahlen gemeint sind - ansonsten würde man zb pi oder die wurzel aus 2 auch als wert angeben können
Hallo Suit,
pixel ist eine absolute einheit, die in ganzen zahlen oder reelle zahlen [1] angegeben werden soll - spezifikation sind zwar auch nachkommastellen möglich (Syntax and basic data types)width wird explizit als "value" (reelle zahl) angegeben - allerdings ist ein weiteres verhalten (wie zb genau gerundet wird) nicht definiert - aus dem grund liegt afaik keiner der browser falsch oder richtig - bei pixel sollte empfehlenswerterweise eine ganzzahl angegeben werden, da pixel nunmal aus ganzen werten bestehen - es gibt schlichtweg keine halben, 60%igen oder 1/37 pixel
[1] in der empfehlung steht wörtlich "real numbers" wobei wahrscheinlich eher rationale zahlen gemeint sind - ansonsten würde man zb pi oder die wurzel aus 2 auch als wert angeben können
Ah, mein großer Fehler. Ich meinte natürlich nicht reelle Zahlen, sondern rationale Zahlen - also Brüche. Aber egal, vielen Dank für Deine Antwort!!
Dennoch möchte ich darauf hinweisen, daß der Firefox sehr wohl mit rationalen Pixelangaben in bspw. style.width korrekt umgeht und auch anzeigt.
Und natürlich, daß der IE eine Technik zum Darstellen nutzt, die professionelle Animationen killen können. Es sei denn, man programmiert um dieses Problem herum...
Gruß Gerrit
Dennoch möchte ich darauf hinweisen, daß der Firefox sehr wohl mit rationalen Pixelangaben in bspw. style.width korrekt umgeht und auch anzeigt.
wie gesagt: soweit ich das aus den spezifikationen entnehmen kann, gibt es keinen korrekten umgang mit "unrunden" angaben
Und natürlich, daß der IE eine Technik zum Darstellen nutzt, die professionelle Animationen killen können. Es sei denn, man programmiert um dieses Problem herum...
es ist ein unterschied ob ich 5,6 + 5,6 = 11,2 (rund 11) rechne oder 5,6 (rund 6) + 5,6 (rund 6) = 12 rechne
und dieses verhalten ist eben nicht definiert