2014-02-28 18 views
5

我在菜單中使用基於em的保證金來實現同質化(在標記,類,ID等方面)。據我所知,這些項目的邊際應該是相同的。但是,有些渲染爲1px,有些渲染爲2px。這可能有一些模式(例如,每個第二項呈現爲2px),但不是我可以辨別的。與時間不一致的餘量

我觀察到在兩個Firefox和鉻此問題,在Linux和OS X.

我猜測這是由於這些邊緣是根據一個十進制數(1.6px的計算值chrome devtools),但爲什麼不一致地呈現相同的十進制數?

下面有一個codepen示例,我還包括一個展示該問題的屏幕截圖的放大圖。

http://codepen.io/anon/pen/KoAbl

+0

可能是字體呈現不同:http://codepen.io/anon/pen/fDBpt – Arbel

+0

@Arbel我不知道我跟着你。我不明白爲什麼字體會以不同的方式渲染,但即使是這樣,我也不會看到這將如何影響1.6px在某些元素上被舍入的問題,並且會在其他元素上舍入。 – ebenpack

+0

看看我在http://codepen.io/anon/pen/fDBpt中提供的codepen,左邊框在填充邊緣完美對齊,但在視覺上,字母S和左邊框之間有1px的空間,但在左邊框和字母F之間沒有空格。 – Arbel

回答

3

我只是猜測,這只是一種猜測,但如果它舍入爲最接近的整像素(1.6 => 2)的東西,但隨後解釋了所有在下一個填充中舍入。由於上次填充0.4像素過多,因此下一次將爲1.6 - 0.4 = 1.2像素,這會變爲1像素。

下一個將是1.6 + 0.2,它是1.8,並舍入爲2.接下來將是1.6-0.2 = 1.4,向下取整爲1.接下來將是1.6 + 0.4 = 2,並且由此模式再次重演。

這將意味着填充是2px,1px,2px,1px,2px(重複)2px,1px,2px,1px,2px,這在我看來與您實際上具有相同的填充。

+0

我想你可能是對的。我希望我能找到關於這個主題的一些文件。我看到的其他一些SO問題表明,FF將四捨五入到最接近的整數,Chrome只是截斷,但這些可能是指舊版本。我也發現這種模式(或可能缺乏)是特別奇怪的:1,3,5,6,8,10,11,15,16,18,20,22,23,25,27 ...... – ebenpack

1

我不能告訴你EM的究竟是如何計算的。但我可以告訴你它可能是由於字體大小的四捨五入。您將字體大小更改爲10px或20px,並且不一致性消失。將其更改爲15px,並且問題恢復。

看到這個職位: CSS: Em rounding error