Javascript “狩猎返回值”;“正常”;至于;“行高”;风格

Javascript “狩猎返回值”;“正常”;至于;“行高”;风格,javascript,safari,css,Javascript,Safari,Css,我的问题是: 当我打电话时 document.defaultView.getComputedStyle(节点“”).getPropertyValue(“行高”) safari在没有指定行高时返回字符串“normal”,而firefox总是以像素为单位返回值 这给我带来了一个大问题,特别是因为我没有找到一个可靠的公式来获得数值(我发现它应该在1em和1.3之间,但没有精确的数值) 有解决办法吗?没有,没有解决办法。不同浏览器的默认设置总是不同的,因为默认设置没有标准 用户可以设置自己的样式表来覆盖

我的问题是: 当我打电话时 document.defaultView.getComputedStyle(节点“”).getPropertyValue(“行高”)

safari在没有指定行高时返回字符串“normal”,而firefox总是以像素为单位返回值

这给我带来了一个大问题,特别是因为我没有找到一个可靠的公式来获得数值(我发现它应该在1em和1.3之间,但没有精确的数值)


有解决办法吗?

没有,没有解决办法。不同浏览器的默认设置总是不同的,因为默认设置没有标准


用户可以设置自己的样式表来覆盖标准,因此您甚至可以从同一浏览器的两个不同实例中获得不同的结果。

我找到了一个部分解决方案:

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;
    } 
函数getLineHeight(节点){
var clh=document.defaultView.getComputedStyle(节点“”).getPropertyValue(“行高”);
var拷贝;
如果(clh=“正常”){
copy=node.cloneNode(false);
copy.style.padding=0+“px”;
copy.style.border=“无”;
copy.innerHTML=“x
x
x
x
x
x
x
x
x
x”; node.parentNode.insertBefore(复制,节点); clh=copy.offsetHeight/10; node.parentNode.removeChild(复制); 删除副本; } else clh=解析浮点(clh); 返回clh; }

对于那些想知道为什么“innerHTML”中的所有“br”都会返回整数值的人来说,使用10行节点并将结果除以10会给出更准确的答案。

你确定页面没有以怪癖模式显示吗?根据“尺寸(例如,宽度、线条高度)都以像素为单位。”似乎WebKit开发人员不同意:@AndresRiofrio
行高
是一个特例。您可以使用长度单位设置值,如
2em
20px
等,也可以使用无单位值,如
2
,其行为几乎与
2em
相同,但并不完全相同。