2014-09-30 26 views
3

在這種jsfiddle我改變左CSS追加「PX」來了:鉻錯誤?更改左CSS改變offsetWidth

function changeLeft(leftVal) { 
    var left = parseFloat(leftVal); 
    //tooltip.style.left=left; 
    tooltip.style.left=left + "px"; 
    log("left: " + left + ", width: " + tooltip.offsetWidth); 
} 

下述值:

changeLeft(0.1); 
changeLeft(0.2); 
changeLeft(0.3); 
changeLeft(0.4); 
changeLeft(0.5); 
changeLeft(0.6); 
changeLeft(0.7); 
changeLeft(0.8); 
changeLeft(0.9); 

你會發現在輸出以下日誌:

left: 0.1, width: 155 
left: 0.2, width: 155 
left: 0.3, width: 155 
left: 0.4, width: 155 
left: 0.5, width: 154 
left: 0.6, width: 154 
left: 0.7, width: 154 
left: 0.8, width: 154 
left: 0.9, width: 154 

因此,正如你可以看到某個點後Chrome開始改變offsetWidth。截至目前,我正在使用最新的Chrome「37.0.2062.124 m」。請注意,如果我省略「px」,那麼它一直工作。你的意見是什麼,這是一個錯誤?

回答

1

我只是試過了,即使刪除了「px」,輸出日誌也是一樣的;工具提示的寬度在0和0.5之間爲155。

對於其它所有尺寸,直到工具提示框到達右側,寬度爲154

這絕對不是一個鉻具體的事情,同樣的行爲在野生動物園展出的;我認爲,如果有的話,這是一個CSS或JavaScript'錯誤',基於浮動解析的方式。

編輯:大小在Firefox上保持不變。

+0

您使用的是最新版Chrome嗎? – SBel 2014-09-30 15:47:39

+0

在Firefox的最新版本(截至目前爲32.0.3)中,值始終爲154。 – SBel 2014-09-30 15:52:06

+0

我使用最新版本的chrome(版本37.0.2062.124)和safari(版本7.1(9537.85.10.17.1))。我絕對不會使用最新版本的Firefox。 – pandorym 2014-09-30 16:01:05

0

更新,8月6日

此行爲是故意的。來自Chrome團隊:

這是故意的,因爲我們將元素捕捉到像素網格。偏移量*屬性返回快照值,因此取決於渲染的大小以及擴展位置。

element.getBoundingClientRect()。寬度另一方面將始終返回「true」,unsnapped,size。

https://code.google.com/p/chromium/issues/detail?id=512307#c5

在您的例子,該元件154.4375px寬。將它的左邊位置設置爲.1px使其佔據155個像素的一半以上,因此它捕捉到155的偏移量。

Chome和Safari的行爲與Firefox和IE的行爲不同,但我可以理解兩種方法。

原貼,7月21日

我相信這是一個錯誤。我也通過我的應用程序中的工具提示來體驗它。我把它報告給Chrome和Safari團隊:

手指交叉。

我以你的演示爲例,希望你不介意。