Immer wenn ein nicht ganzzahliger Pixelwert für den Rand eines Elements verwendet wird, schneidet der Browser den Wert einfach ab, um eine Ganzzahl zu werden. Warum ist das der Fall?Browser kürzen Randwerte auf Ganzzahlen
Ich bin mir bewusst, dass die Grenze nicht tatsächlich Teil eines Pixels aufnehmen wird, aber diese Arten von Werten werden manchmal in Kombination mit anderen verwendet, um volle Pixel zu bilden. Zum Beispiel sollte der linke und der rechte Rand mit einer Breite von 1,6 px die Gesamtbreite des Elements um 3 px erhöhen. Dies funktioniert, weil the full value is stored in memory and used for calculations.
Dies scheint jedoch nicht der Fall zu sein, wenn der Rahmen gerendert wird, obwohl sich Breite, Auffüllung und Rand alle korrekt verhalten.
var div = document.getElementsByTagName('div'),
len = div.length,
style;
for (var i = 0; i < len; i++) {
style = getComputedStyle(div[i]);
div[i].innerHTML = div[i].className + ': ' + style.getPropertyValue(div[i].className) + '<br>height: ' + style.getPropertyValue('height');
}
div {
width: 300px;
border: 1px solid black;
padding: 50px 0;
text-align: center;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
div.width {
width: 300.6px;
}
div.padding-top {
padding-top: 50.6px;
}
div.margin-top {
margin-top: 0.6px;
}
div.border-top-width {
border-top-width: 1.6px;
}
<div class="width"></div>
<div class="padding-top"></div>
<div class="margin-top"></div>
<div class="border-top-width"></div>
Beim Test erzeugte Code die gleichen Ergebnisse (genaue Präzision ungeachtet) konsistent. Die meisten gängigen Browser (Chrome, Firefox, Opera) verhielten sich ähnlich. Die Ausnahmen waren Safari 5.1 (das Padding und Rand ähnlich wie Rand gerendert hat, aber dies liegt wahrscheinlich nur an der Version) und Internet Explorer (der die Grenze oben rechts richtig berechnet hat).
Breite, Auffüllung und Rand wurden alle als Dezimalwerte gespeichert und erlaubten, dass das Auffüllen die Höhe entsprechend beeinflusste, die Grenze jedoch nicht. Es wurde zu einer Ganzzahl abgeschnitten. Warum ist das konkret nur die Fallbreite? Wäre es möglich, den Grenzwert in einem vollständigeren Formular zu speichern, damit die Höhe des Elements mithilfe von JavaScript abgerufen werden kann?
Warum nicht einfach eine Berechnung durchführen? – PHPglue
@PHPglue Der Rahmenwert befindet sich in einer eingeschlossenen CSS-Datei, die gelegentlich überschrieben wird. Um eine Berechnung durchzuführen, müsste ich wissen, was der Grenzwert ist. Das Problem ist, dass es 1px zurückgibt, wenn es ungefähr 1.6px (in Bezug auf das Beispiel) zurückgeben sollte. – Anonymous
Verwenden Sie keine Dezimalstellen für Pixel. – PHPglue