我正在尝试理解CSS概念Visual Formatting Model,特别是在此部分Controlling box generation

根据Anonymous Block Boxes的规范,在他们的示例中具有如下标记:

<DIV>
  Some text
  <P>More text
</DIV>


这是他们的解释:


  (假设DIV和P都具有“ display:block”),则DIV似乎同时具有内联内容和块内容。为了使定义格式更加容易,我们假设“某些文本”周围有一个匿名阻止框。
  
  换句话说:如果一个块容器框(例如上面为DIV生成的容器)内部有一个块级框(例如上面的P),则我们将其强制为内部只有块级框。


最初,从规范中暗示,我认为匿名阻止框将仅应用于文本。
但是,在一个更复杂的示例中,似乎不正确,例如以下示例:

<div>
    some <em>text</em>
    <p>More text</p>
    and more <em>text</em>
</div>


some不能视为匿名阻止框,而是整行some <em>text</em>。因为,如果仅将some视为匿名阻止框,则<em>text</em>将是另一个;因此,这2个匿名阻止框将不在同一行中。
因此,对于p阻止框and more <em>text</em>之后的另一个匿名阻止框,情况也是如此。

因此,总共有3个阻止框(其中2个是匿名阻止框):


匿名阻止框:some <em>text</em>
阻止框:<p>More text<p>
匿名阻止框:and more <em>text</em>


看起来像这样:
identifying anonymous block level boxes

最后,我可以直接总结一下吗?
对于匿名块框生成,如果一个块容器内部有一个块级框,则此算法-Box Generation将把该块容器内的任何框都视为块级框。这样一来,任何不是块级框的框都将在内部/概念上被视为匿名块框,无论如何它基本上都是块级框。

我了解这些事情对吗?或者,我现在完全错了吗?

最佳答案

Box Generation会将此块容器中的所有盒子视为块级盒子。这样一来,任何不是块级框的框都将在内部/概念上被视为匿名块框,无论如何它基本上都是块级框。


不,它将创建带有内联格式上下文的匿名阻止框,这些内嵌格式将内联起来。内联(或其他不是块级框的其他框)不会更改。他们继续参与通常使用的相同格式设置环境;此算法确保通过匿名块框建立那些格式化上下文,这些匿名块框又与父元素一起参与相同的块格式化上下文。

图示大部分是正确的,除了主要的块级框并不总是建立块格式化上下文。您可能还会混淆术语“块格式设置上下文”,“块级框”,“块容器框”和“块框”。请参阅我对这些问题的答案以进一步说明:


CSS Spec: block-level box, block container box and block box
Block Level Element vs Block Formatting Context

关于css - 识别匿名黑匣子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52981136/

10-12 00:12
查看更多