Seltsam border-width Verhalten in Chrom - Floating-point border-width?
Bestimmte fluid-designs, insbesondere jene mit %-Breite iFrames, scheinen verursachen einige seltsame Rundung Fehler in Chrome (ich habe version 21).
Diese Geige veranschaulicht das problem. Legen Sie die Grenze zu einem integer-pixel-Wert und die Werte erhalten Sie zurück, wenn Sie Fragen, für Sie sind floating-point-zahlen etwas kleiner als der erwartete Wert.
Versuchen die exakt gleiche code in CodePen nicht die gleichen Ergebnisse liefern, vermutlich, weil der iFrame und andere Stile, um es nicht auf die gleiche Weise.
(Ich habe auch gesehen, dass dieses Verhalten für die grundlegenden Attribute width und height, obwohl ich war nicht in der Lage zu replizieren, dass ein Teil des Problems in jsFiddle.)
Scheint dies nicht ein problem in Firefox oder im IE8.
Alle Ideen, was genau verursacht dieses seltsame Verhalten und wie kann ich es umgehen um an die echten Werte?
Den plot verdickt. In einem Versuch, shim, um das problem fand ich, dass die Werte über 10px, die anscheinend nicht Thema der Frage.
Ebenfalls, basierend auf dem @GionaF Kommentar, es scheint ordnungsgemäß zu funktionieren, in Chrome 22.
- Tatsächlich, ich bekomme 3px (chrome 22)
- Beh. Dank für das schauen an es @GionaF. Leider habe ich nicht die option zur Aktualisierung im moment...
- Vor kurzem hatte ich ein Problem mit Chrome: der Versuch, die position der extremen Breite block (49px) bei der 50% der Breite, ich war immer ein bisschen anders, Positionen +/- 1 pixel auf geraden und ungeraden breiten Bildschirm. Ich löste dieses hinzufügen 1px-padding, um sicherzustellen, dass der block mit ist auch. Hoffe dieser Tipp hilft Euch.
- wir haben ein Sprichwort: wenn der Mörder wartet ein wenig, bevor Sie ermordet seine Opfer, er würde allein sterben 🙂 ich habe Google Chrome 26.0.1410.64 und das problem wird nicht angezeigt
- Funktioniert in meiner version von Chrome(22)
- dies funktioniert gut für mich auf Chrome Version 26.0.1410.64 m.
- können Sie hinzufügen, einen screenshot zu vergleichen?, Ich bin mit dem gleichen Ergebnisse, das jsfiddle mit vielen Konfigurationen (OS, Browser und Versionen).
- Vor einigen Monaten habe ich ein ähnliches Problem mit Chrome 21: in meinem Fall war es ein Container von 765px Breite, die ich hatte, um zu definieren, mit EM. Die daraus entstehenden 16px Basis-Schriftgröße, die Breite definiert, bei der EM war genau 47.8125 em. Alles hat gut funktioniert, jeder browser (auch älteren Chrome-Versionen) dargestellt, 765px außer Chrome 21, die gerendert 765.066650390625 px. Das problem dieses Runden war, dass die eingeschlossenen Container, für die auch definiert in em-Einheiten vererbt etwas größeren breiten. Am Ende wird die ganze Flüssigkeit layout brach. Am Ende hatte ich die Verwendung von px-Einheiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu reproduzieren das problem habe ich zum ändern der zoom-Stufe von Chrome. Ändern der zoom-level wieder zu 100% behoben werden. Es scheint ein Fehler zu sein, der berechnete Rahmenbreite ist immer kleiner als die definierte Grenze der Breite vergrößern oder verkleinern!
Ihrem 10px border hat einen Wert von 10, wenn der zoom-level ist 110%, aber auf 125%, es hat das gleiche problem wie Ihr 3px Grenze.
edit: firefox hat das gleiche Verhalten!
Kann ich nicht reproduzieren dieses Verhaltens in Chrome aktuell, aber dieses Verhalten am ehesten mit dem zu tun hat Subpixel-Rendering. Im wesentlichen Webkit Berechnungen unter Verwendung der integer-Mathematik zu vermeiden, floating-point-Ungenauigkeit.
Scheint es, dass derzeit
border
verwenden, die nicht mit subpixel-rendering, die möglicherweise erklären, warum das Problem nicht sichtbar in neuen Chrome-Versionen.Tut-Einstellung box-sizing auf border-box für alle Elemente überhaupt helfen? Dies wird sich ändern die Weise, die das box-Modell berechnet wird, wo die Grenze und padding wirken sich nicht auf die Breite.
War ich auch das Problem mit der Grenze
input
s und andere Elemente. Nach einer Stunde Zeit verbracht, ich fand unerwarteten Grund, um dieses problem verursachen. Bootstrap-css verwendetnormalize css
und der folgende code wurde verursacht ein solches Problem:Um dieses Problem zu lösen, habe ich das überschreiben der css-Code in meiner style.css:
Den
hr
Regel ist wirklich nicht im Zusammenhang mitinput
s, aber es funktioniert. Das ist wirklich ein unerwartetes Verhalten Auftritt, probieren Sie es aus und funktioniert.Hatte ich nur ein weiteres Beispiel dieses mit Chrom (Chrom 76), verursacht durch eine
transform: translate()
..box-triangle
hat eine::after
element der Gestaltung einer Dreiländereck, die absolut positioniert auf der Oberseite der.box-triangle
(direkt nach dem Auffüllen).Wenn ich ein übersetzen mit % auf
.container
und der sich ergebende Prozentsatz ist nicht eine ganze Zahl, dann.box-triangle
Grenze zeigen leicht unter seiner::after
element.Lösungen : Mit einer px übersetzen anstatt in %, oder machen Sie sicher, dass der Anteil der container-dimension eine ganze Zahl
Bearbeiten : genau das gleiche passieren, wenn die Transformation direkt angewendet auf
.box-triangle
(siehe letztes Beispiel im snippet)CSS:
HTML: