2010-07-07 51 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提供更准确的答案。