【发布时间】:2020-11-30 16:01:59
【问题描述】:
我正在阅读CSS Spec 2.1,发现这些概念很难区分:
除了后面章节中描述的表格盒和替换元素外,块级盒也是块容器盒。块容器盒要么只包含块级盒,要么建立一个内联格式化上下文,因此只包含内联级盒。并非所有的块容器盒都是块级盒:非替换的内联块和非替换的表格单元格是块容器,但不是块级盒。也是块容器的块级盒子称为块盒子。
我可以将上面的描述解释如下吗?:
【问题讨论】:
标签: css
我正在阅读CSS Spec 2.1,发现这些概念很难区分:
除了后面章节中描述的表格盒和替换元素外,块级盒也是块容器盒。块容器盒要么只包含块级盒,要么建立一个内联格式化上下文,因此只包含内联级盒。并非所有的块容器盒都是块级盒:非替换的内联块和非替换的表格单元格是块容器,但不是块级盒。也是块容器的块级盒子称为块盒子。
我可以将上面的描述解释如下吗?:
【问题讨论】:
标签: css
你的解释是正确的。
这里有一些额外的细节:
表格框之所以不是块容器,是因为它建立的是表格布局,而不是块布局。内容进入单元格元素而不是表格元素,这就是为什么 cell 框是块容器而不是表格框本身。
被替换的元素不包含任何其他内容,因此不能是块容器。
块盒和内联块之间的唯一区别是前者是块级,而后者是内联级。因此分别显示值display: block 和display: inline-block。由于两者都是块容器,因此它们的内容格式没有区别。
请注意,替换元素和表格框可以是内联级或块级。内联表和内联替换元素只是从您引用的部分中排除,因为该部分仅与块级框有关;您可以在第 9 节的其他地方或分别在 10 和 17 部分找到对它们的引用。
此外,即使一个块容器盒只能包含块级盒或内联级盒,您仍然可以将两者混合在同一个块容器盒中;在内部,它只是通过anonymous block boxes 分隔块级和内联级框。
【讨论】:
请记住,HTML 是一棵树,因此每个节点都可以作为(子)的父节点和(父节点的)子节点
考虑到这一点,事情开始变得有意义,块级盒子指的是盒子充当chlid
块级框是参与块格式化的框 上下文。
另一方面,block container box指的是一个parent可以容纳其他人
块容器盒子要么只包含块级盒子,要么 建立一个内联格式化上下文,因此只包含 内联框
就像一个节点可以要么既是子节点又是父节点,HTML 节点既可以充当父节点(块容器框)也可以充当子节点(块级框)或两者兼有
例如,如果一个节点中的子节点是不允许的(被替换元素),它就永远不可能是父节点,最多只能是子节点(块级框),不能是父节点(块容器框)
并且没有理由阻止非块父级包含块父级。 inline-block 本身不是块,但它可以包含块级框
重点是从父子视图更容易理解规范
【讨论】: