2012-06-22 16 views
8

Bir HTML belgesinde kesinlikle konumlandırılmış basit div etiketim var. Chrome'da "sağ" CSS kuralını piksel cinsinden sabit bir değere ve "sol" kuralı "otomatik" olarak ayarladıktan sonra hemen ardından jquery'nin konumunu() yöntemini kullanarak sol konumunu belirle Bu tür bir şey: 122.6363525390625. Aynı şey, offset() yöntemi için de geçerlidir.jQuery'nin position() ve offset() yöntemleri neden Chrome'da kesirli sayı döndürüyor?

Firefox diğer yandan, bu sorun yok.

Bunun neden olduğunu ve bunun önlenmesinin bir yolu var mı? Şimdiden teşekkürler!

+0

Bu davranışı göstermek için küçük bir örnek hazırlayabilir misiniz? Burada yeniden üretemedim: http://jsfiddle.net/Wjvak/ – Simon

+0

Yerel yöntemi deneyin: getComputedStyle (yourElem) .getPropertyValue ('left') '. Kayan sayı döndürdüğünde, Chrome'un size verdiği değer budur ve sayıyı tamsayıya manuel olarak dönüştürmeniz gerekir. –

cevap

10

Yüzde genişliklerini kullandığınızda, bu matematik çalıştığı şeydir. Eğer bu düzeni olduğunu düşünün:

<div style="width: 111px"> 
    <div style="width: 50%"></div> 
</div> 

iç elementin genişliği 55.5 piksel değil, doğal bir numaraya hesaplar. Tam CSS özelliklerine bağlı olarak, bu, birkaç ondalık ondalık basamağa kolayca gidebilir.

Krom uses subpixel rendering, bu yüzden bu davranışı görüyorsunuz.

Son olarak: Neden bunun bir soruna neden olacağından emin değilim, ancak tabii ki bir doğal sayıya geçmek istiyorsanız Math.round(x)'u kullanabilirsiniz.

-2

Chrome'da değerler kesilir, yani 120, 120.5 ve 120.6 hepsi aynı genişliğini gösterir, dolayısıyla ondalık değeri kullanarak bunun için endişelenmeniz gerekmez. .5 piksel gibi bir şey yok. Piksel tüm birimlerdir. Ondalık değer döndüren bu işlev sorununa sahipseniz, neden parseInt kullanılmıyor? Bu şeyi gözetlemek için tarayıcıya bırakmamalısınız, aksi takdirde sayfanız bozulabilir.

İlgili konular