Kiedy nieokreślona wartość pikseli jest używana do obramowania elementu, przeglądarka po prostu obcina wartość, aby stać się liczbą całkowitą. Dlaczego tak jest?Przeglądarki obcinają wartości graniczne do liczb całkowitych
Jestem świadomy, że ta granica nie będzie w rzeczywistości obejmować części piksela, ale te typy wartości są czasami używane w połączeniu z innymi, tworząc pełne piksele. Na przykład, lewa i prawa krawędź o szerokości 1,6 piksela powinna spowodować zwiększenie całkowitej szerokości elementu o 3 piksele. Działa to ponieważ the full value is stored in memory and used for calculations.
Jednak wydaje się, że nie jest tak w przypadku renderowania obramowania, mimo że szerokość, dopełnienie i margines zachowują się poprawnie.
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>
Podczas badania, kod produkowane takie same wyniki (pomijając precyzją) konsekwentnie. Większość głównych przeglądarek (Chrome, Firefox, Opera) zachowywało się tak samo. Wyjątkami były Safari 5.1 (które zapewniało dopełnienie i margines podobny do granicy, ale jest to prawdopodobnie tylko ze względu na wersję) i Internet Explorera (który poprawnie obliczył szerokość-szerokości-szerokości).
Szerokość, dopełnienie i margines zostały zapamiętane jako wartości dziesiętne, a dopełnienie odpowiednio wpłynęło na wysokość, ale granica nie była. Zostało skrócone do liczby całkowitej. Dlaczego jest to tylko granica szerokości sprawy? Czy istnieje sposób na zapamiętanie wartości obramowania w pełniejszej formie, aby można było uzyskać wysokość elementu za pomocą JavaScript?
Dlaczego po prostu nie wykonać obliczeń? – PHPglue
@PHPglue Wartość graniczna znajduje się w dołączonym pliku css, który jest czasami nadpisywany. Aby wykonać obliczenie, musiałbym wiedzieć, jaka jest wartość graniczna. Problem polega na tym, że zwraca 1px, kiedy powinien powrócić około 1,6px (w odniesieniu do przykładu). – Anonymous
Nie należy używać liczb dziesiętnych dla pikseli. – PHPglue