Warum geben die Methoden position () und offset () von jQuery eine Bruchzahl in Chrome zurück?

8

Ich habe ein einfaches div-Tag, das absolut in einem HTML-Dokument positioniert ist. In Chrome setze ich die CSS-Regel "right" auf einen festen Wert in Pixel und die "left" -Regel auf "auto" und ermittle dann unmittelbar danach die linke Position mit jquery's position () -Methode Der zurückgegebene Wert ist etwas dieser Art: 122.6363525390625 . Dasselbe gilt für die Methode offset () .

Firefox dagegen hat dieses Problem nicht.

Können Sie mir sagen, warum das passiert und ob es einen Weg gibt, das zu verhindern? Vielen Dank im Voraus!

    
Andrei Oniga 22.06.2012, 06:19
quelle

2 Antworten

10

Weil, wenn Sie prozentuale Breiten verwenden, das ist, was die Mathematik ausarbeitet. Stellen Sie sich vor, Sie haben dieses Layout:

%Vor%

Die Breite des inneren Elements berechnet sich zu 55,5 Pixel, keine natürliche Zahl. Abhängig von den genauen CSS-Attributen kann dies leicht zu einigen Dezimalstellen führen.

Chrome verwendet Subpixel-Rendering , weshalb Sie dieses Verhalten sehen.

Schließlich: Ich bin mir nicht sicher, warum das ein Problem verursachen würde, aber wenn Sie auf eine natürliche Zahl runden möchten, können Sie Math.round(x) verwenden.

    
Jon 23.06.2012, 11:58
quelle
-2

In Chrome werden die Werte abgeschnitten, sodass 120, 120.5 und 120.6 alle die gleiche Breite aufweisen. Sie müssen sich also keine Gedanken über den Dezimalwert machen. Es gibt nichts wie 0,5 Pixel. Pixel sind ganze Einheiten. Wenn Sie dieses Problem von Funktionen haben, die den Dezimalwert zurückgeben, warum nicht parseInt verwenden? Sie sollten dieses Ding nicht dem Browser überlassen, um sich darum zu kümmern, sonst könnte Ihre Seite brechen.

    
Ashwin Singh 23.06.2012 10:50
quelle

Tags und Links