2010-07-07 38 views
0

這裏返回值「正常」是我的問題: 當我打電話 document.defaultView.getComputedStyle(節點,「」).getPropertyValue(「行高」)的Safari「行高」的風格

safari在未指定行高時返回字符串「normal」,而firefox始終以像素爲單位返回值。

這對我來說是很大的問題,especilly因爲我沒有找到一個可靠的公式得到的數值(我覺得這應該是1EM和1.3,但沒有確切之間)。

有沒有解決方案?

+0

確定該頁面不是以怪癖模式顯示? – Hello71 2010-07-07 02:25:26

回答

0

沒有,有沒有辦法解決。瀏覽器之間的默認值總是會有所不同,因爲默認值應該是什麼標準。

用戶可以設置自己的樣式表來覆蓋標準,所以你甚至可以從同一個瀏覽器的兩種不同情況下得到不同的結果。

+0

根據[MDN(https://developer.mozilla.org/en-US/docs/CSS/used_value),「尺寸(例如寬度,行高)都在像素」。看來WebKit開發者並不同意。 :) – 2012-11-04 06:18:55

+0

@AndresRiofrio'line-height'是一種特殊情況。你可以像'2em','20px'這樣的長度單位來設置一個值,但是也可以用像'2'這樣的無單位值來表示,它的行爲幾乎與2em相同,但不完全相同。 – 2015-09-09 09:19:27

1

那麼我發現的部分解決方案:

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提供更準確的答案。