Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CSSOM是仅在html页面具有外部工作表链接时创建的,还是在具有内联样式或内部css时创建的?_Html_Css_Dom - Fatal编程技术网

CSSOM是仅在html页面具有外部工作表链接时创建的,还是在具有内联样式或内部css时创建的?

CSSOM是仅在html页面具有外部工作表链接时创建的,还是在具有内联样式或内部css时创建的?,html,css,dom,Html,Css,Dom,我已经讨论了关键的渲染路径及其在加快页面加载方面的重要性。据我所知,DOM树和基于CSSOM的树的构造发生在页面呈现之前。html解析器也会在遇到标记时自上而下移动。 最重要的一点是,脚本执行完成两件事: 块解析器(假定未使用异步或延迟) 先暂停CSSOM树的构建 因此,为了基于CSSOM的树构造,DOM树构造和java脚本执行的整个过程被暂停 我们还知道,css样式可以通过以下三种方式完成- 将外部css作为下的链接 内部css定义在 在需要设置样式的地方,为每个元素标记使用样式属性定义内联c

我已经讨论了关键的渲染路径及其在加快页面加载方面的重要性。据我所知,DOM树和基于CSSOM的树的构造发生在页面呈现之前。html解析器也会在遇到标记时自上而下移动。 最重要的一点是,脚本执行完成两件事:

  • 块解析器(假定未使用异步或延迟)
  • 先暂停CSSOM树的构建
  • 因此,为了基于CSSOM的树构造,DOM树构造和java脚本执行的整个过程被暂停

    我们还知道,css样式可以通过以下三种方式完成-

  • 将外部css作为下的链接
  • 内部css定义在
  • 在需要设置样式的地方,为每个元素标记使用样式属性定义内联css
  • 问题是,对于外部css和内部css,我们可以确保它位于head标记内,因此,在解析器命中脚本标记之前,它很可能已经穿过了样式部分,因此当脚本执行必须暂停以进行CSSOM构造时,它可以顺利进行。即使在样式中也包含了标签,我们也可以先包含标签(对于外部表单)或标签(对于内部css),然后使用该标签

    但是如果使用内联样式呢?因为在这种情况下,如果解析器遇到标记,脚本执行可能不会暂停任何CSSOM构造,因为与元素内联的样式将在解析器穿过标记后出现在页面中。因此,通常会等待先构建CSSOM树的脚本将继续执行,因为它断定不涉及样式

    所以我问-

  • 关于基于CSSOM的树构造,它是否仅在包含外部样式表时发生,还是在使用内部或内联css时发生

  • 即使使用内联样式,是否也会构造CSSOM树?如果是,则是否需要在最底部使用脚本标记,以便在脚本执行之前浏览器已解析所有内联样式

  • 需要的时候就会发生。所以在渲染之前和脚本运行之前

  • 是的,不一定。该脚本在DOM文档和框树上运行,但它们恰好在脚本运行时运行。当脚本运行时,文档和框树始终是一致的,即使HTML只是部分解析。如果该状态足以使脚本成功完成其工作,则不需要在解析过程结束时运行它

  • 需要的时候就会发生。所以在渲染之前和脚本运行之前

  • 是的,不一定。该脚本在DOM文档和框树上运行,但它们恰好在脚本运行时运行。当脚本运行时,文档和框树始终是一致的,即使HTML只是部分解析。如果该状态足以使脚本成功完成其工作,则不需要在解析过程结束时运行它


  • 我认为这里有两个CSS概念的融合。CSSOM和盒子树。CSSOM是一个用于操作样式表的API。作为一个API,它不是“构造的”,并且主要与内联样式无关。渲染之前需要构建的是长方体树。这需要并使用DOM文档中的所有节点,以及与之相关的所有样式,无论其来源是什么。@Alohci-通过构造CSSOM,我指的是基于CSSOM构造树。您可以将其称为API,例如java脚本中的代码使用它来修改任何节点的样式。在你们的回答中,你们提到它的创建和源代码无关,我要问的是,若它的内联样式和解析器遇到了脚本标记,它,按照规则书,除非完全构建了基于CSSOM的树,否则将停止执行,但是当解析器还没有到达相应的元素标记时,它如何确定页面下有更多的样式呢?它(我假设你指的是浏览器)不知道。当脚本运行时,它会对DOM文档和框树进行操作,如果需要,还会对解析过程中的任何布局进行操作。CSSOM和盒子树。CSSOM是一个用于操作样式表的API。作为一个API,它不是“构造的”,并且主要与内联样式无关。渲染之前需要构建的是长方体树。这需要并使用DOM文档中的所有节点,以及与之相关的所有样式,无论其来源是什么。@Alohci-通过构造CSSOM,我指的是基于CSSOM构造树。您可以将其称为API,例如java脚本中的代码使用它来修改任何节点的样式。在你们的回答中,你们提到它的创建和源代码无关,我要问的是,若它的内联样式和解析器遇到了脚本标记,它,按照规则书,除非完全构建了基于CSSOM的树,否则将停止执行,但是当解析器还没有到达相应的元素标记时,它如何确定页面下有更多的样式呢?它(我假设你指的是浏览器)不知道。当脚本运行时,它会对DOM文档和框树进行操作,如果需要的话,还会对解析过程中的任何布局进行操作。我不这么认为,因为没有必要在执行任何脚本时,DOM树和CSSOM树总是提前出现,即使HTML被部分解析。请参考-developers.google.com/web/basictures/performance/…这里明确指出,在文档中放置脚本也是重要的