這裏返回值「正常」是我的問題: 當我打電話 document.defaultView.getComputedStyle(節點,「」).getPropertyValue(「行高」)的Safari「行高」的風格
safari在未指定行高時返回字符串「normal」,而firefox始終以像素爲單位返回值。
這對我來說是很大的問題,especilly因爲我沒有找到一個可靠的公式得到的數值(我覺得這應該是1EM和1.3,但沒有確切之間)。
有沒有解決方案?
這裏返回值「正常」是我的問題: 當我打電話 document.defaultView.getComputedStyle(節點,「」).getPropertyValue(「行高」)的Safari「行高」的風格
safari在未指定行高時返回字符串「normal」,而firefox始終以像素爲單位返回值。
這對我來說是很大的問題,especilly因爲我沒有找到一個可靠的公式得到的數值(我覺得這應該是1EM和1.3,但沒有確切之間)。
有沒有解決方案?
沒有,有沒有辦法解決。瀏覽器之間的默認值總是會有所不同,因爲默認值應該是什麼標準。
用戶可以設置自己的樣式表來覆蓋標準,所以你甚至可以從同一個瀏覽器的兩種不同情況下得到不同的結果。
根據[MDN(https://developer.mozilla.org/en-US/docs/CSS/used_value),「尺寸(例如寬度,行高)都在像素」。看來WebKit開發者並不同意。 :) – 2012-11-04 06:18:55
@AndresRiofrio'line-height'是一種特殊情況。你可以像'2em','20px'這樣的長度單位來設置一個值,但是也可以用像'2'這樣的無單位值來表示,它的行爲幾乎與2em相同,但不完全相同。 – 2015-09-09 09:19:27
那麼我發現的部分解決方案:
function getLineHeight(node){
var clh=document.defaultView.getComputedStyle(node, "").getPropertyValue("line-height");
var copy;
if (clh=="normal"){
copy=node.cloneNode(false);
copy.style.padding=0+"px";
copy.style.border="none";
copy.innerHTML="x <br> x <br> x <br> x <br> x <br> x <br> x <br> x <br> x <br> x";
node.parentNode.insertBefore(copy, node);
clh=copy.offsetHeight/10;
node.parentNode.removeChild(copy);
delete copy;
}
else clh=parseFloat(clh);
return clh;
}
對於那些想知道爲什麼所有這些「BR」中的「innerHTML的」井的offsetHeight返回整數值,因此,使用一個10線節點和將所述結果由10提供更準確的答案。
確定該頁面不是以怪癖模式顯示? – Hello71 2010-07-07 02:25:26