弹性项目是块级元素吗?

时间:2019-04-03 01:38:05

标签: css css3 flexbox

弹性项目是弹性级别的元素,但这是块级别的元素吗?


根据Chapter 4 of CSS Flexible Box Layout Module Level 1,弹性项目被视为处于弹性级别,而不是块级别。

  

弹性项目为其内容建立独立的格式设置上下文。 但是,弹性商品本身是弹性级别的   框,而不是块级框:它们参与容器的flex格式上下文,而不是块格式上下文。


但是,如果您稍后阅读第4章,则会写到flex项目的显示值将被“ blockified”。

已块化表示元素是块级吗?如果是这样,则上述“弹性项目为弹性级别”是错误的。

  

弹性项目的显示值已被阻止:如果生成弹性容器的元素的入流子项的指定显示为内联级别值,则将其计算为-等效水平。 (有关此类显示值转换的详细信息,请参见CSS2.1§9.7[CSS21]和CSS Display [CSS3-DISPLAY]。)


“已屏蔽”在这里是什么意思?另外,弹性项目是否处于弹性级别?还是被阻止的块级别?

如果将其解释为规范,则将得出一个矛盾的结论,即“弹性项目是弹性级别,不是块级别,而是通过块化变为块级别”。

1 个答案:

答案 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不见了,因为它已已被阻止