弹性项目是弹性级别的元素,但这是块级别的元素吗?
根据Chapter 4 of CSS Flexible Box Layout Module Level 1,弹性项目被视为处于弹性级别,而不是块级别。
弹性项目为其内容建立独立的格式设置上下文。 但是,弹性商品本身是弹性级别的 框,而不是块级框:它们参与容器的flex格式上下文,而不是块格式上下文。
但是,如果您稍后阅读第4章,则会写到flex项目的显示值将被“ blockified”。
已块化表示元素是块级吗?如果是这样,则上述“弹性项目为弹性级别”是错误的。
弹性项目的显示值已被阻止:如果生成弹性容器的元素的入流子项的指定显示为内联级别值,则将其计算为-等效水平。 (有关此类显示值转换的详细信息,请参见CSS2.1§9.7[CSS21]和CSS Display [CSS3-DISPLAY]。)
“已屏蔽”在这里是什么意思?另外,弹性项目是否处于弹性级别?还是被阻止的块级别?
如果将其解释为规范,则将得出一个矛盾的结论,即“弹性项目是弹性级别,不是块级别,而是通过块化变为块级别”。
答案 0 :(得分:1)
这两个规范当然是正确的,但是您忘记了第二部分中的关键字 display 。每个元素都有一个显示值,对于弹性项目,此值为block
,这意味着,例如,如果您指定inline-block
,它将被计算为block
。如果指定inline-grid
,它将被计算为grid
,依此类推。
如果生成弹性容器的元素的流入子项的指定显示为内联级别值,则计算为其等效的块级 < / p>
因此弹性项目是具有display: block;
值的弹性级别的框,但它们不是块级的框。
相关:Usage of display property of flex box items
为简化起见,假设您有两个世界,外部世界和内部世界。如果我们从外部世界看一个伸缩项目,它是一个伸缩级别的框,它参与了容器的伸缩格式上下文。从内部世界看,它是一个block元素,这意味着flex项内的一个元素会将flex项视为一个block元素。
如果将inline-[flex/table/grid/block]
设置为flex项目,则从内部将其视为[flex/table/grid/block]
容器。 inline
不见了,因为它已已被阻止。