CSS Spec: block-level box, block container box and block box

前端 未结 2 861
伪装坚强ぢ
伪装坚强ぢ 2020-12-05 08:49

I am reading CSS Spec 2.1 and find the concepts hard to distinguish:

Except for table boxes, which are described in a later chapter, and replaced elem

相关标签:
2条回答
  • 2020-12-05 09:36

    Remember that HTML is a tree so each node can act as both a parent (of children) and child (of a parent)

    Bearing this in mind, things start to make sense, Block-level box refers to box act as chlid

    Block-level boxes are boxes that participate in a block formatting context.

    On the other hand, block container box refer to a parent who can contain others

    A block container box either contains only block-level boxes or establishes an inline formatting context and thus contains only inline-level boxes

    Just like a node can either be a child and a parent, an HTML node can either act as a parent(block container box) or child (block-level box) or BOTH

    For example, if children in a node are not allowed (replaced element), it can never be a parent, it can only be a child (Block-level boxes) at most, not a parent (block container box)

    And there is no reason to prevent a non-block parent contain a block parent. An inline-block itself is not a block, but it can contain block-level box

    The point is a spec is easier to understand from a parent-child view

    0 讨论(0)
  • 2020-12-05 09:38

    Your interpretation is correct.

    Here are some additional details:

    • The reason a table box is not a block container is because it establishes a table layout, not a block layout. Content goes into the cell elements rather than the table element, which is why it is the cell boxes that are block containers rather than the table box itself.

    • A replaced element doesn't contain any other content and therefore cannot be a block container.

    • The only difference between a block box and an inline-block is that the former is block-level while the latter is inline-level. Hence the display values display: block and display: inline-block respectively. As both are block containers, there is no difference in how their contents are formatted.

    Note that replaced elements and table boxes can be either inline-level or block-level. Inline tables and inline replaced elements are simply excluded from the section you quote because that section only pertains to block-level boxes; you'll find references to them elsewhere in section 9, or in sections 10 and 17 respectively.

    Also, even though a block container box can only either contain block-level boxes or inline-level boxes, you can still mix both in the same block container box; internally it simply segregates the block-level and inline-level boxes via anonymous block boxes.

    0 讨论(0)
提交回复
热议问题