怎么" document.createElement"适用于"显示"属性

时间:2016-11-06 02:37:28

标签: javascript html css dom browser

我发现了一个有趣的现象,它在Chrome中的表现与Chrome不同。

F12 打开浏览器devTool并输入。

var span=document.createElement("span");
document.defaultView.getComputedStyle(span).display;

它返回"阻止"在Firefox中和Chrome中的""。 我第一次遇到这个案子是在Firefox中,结果是"阻止"!但是,当document.body.appendChid(span)时,没关系。

我在MDN中搜索但最后没有收获任何收获。我猜document.defaultView.getComputedStyle受浏览器渲染引擎的影响。"显示"在元素由呈现引擎呈现给DOM树之后设置属性。然后gecko(Firefox)给它一个默认值为" block"而webkit(Chrome)则设置了它""。

任何人都可以提供更详细的解释吗?

1 个答案:

答案 0 :(得分:3)

那是因为规范没有指定DOM之外的元素是否有计算样式。

Firefox认为他们这样做。它们受文档中样式表的影响。



console.log(getComputedStyle(document.createElement('span')).display);
// "flex" on Firefox

span { display: flex; }




Chrome认为他们没有,所以返回空字符串。您需要将它们附加到文档才能使用getComputedStyle

这在www-style中讨论过:computedStyle of cloneNode

您获得的是display: block而不是inline,因为CSS Display指示了

  

根元素的显示类型始终为blockified

在文档外部创建span元素时,它没有父元素,因此它是根。然后inline变为block

同样,如果您的样式表中有span { display: inline-block },那么您也会获得block。使用span { display: inline-flex },您将获得flexspan { display: inline-table }获得table,依此类推。