这里返回值“正常”是我的问题: 当我打电话 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