位置绝对是否使该元素成为包含块?

eve*_*ill 2 html css css-position

在css2.1规范,w3.org中,有一个例子解释了如何形成包含块的方式.

<P id="p2">This is text 
    <EM id="em1"> 
        in the
        <STRONG id="strong1">second</STRONG> 
        paragraph.
    </EM>
</P>
Run Code Online (Sandbox Code Playgroud)

当位置em为静态时,strong包含块的p位置由建立,但当位置em为绝对时,strong包含块的位置由建立em.

我查看有关包含块的章节,但无法确定绝对位置是否会形成新的包含块.有什么东西我不见了吗?

Bol*_*ock 6

我们确定这#strong1是一个非定位的内联框.因此,从规范来看,

[...]如果元素的位置是"相对"或"静态",则包含块由最近的块容器祖先盒的内容边缘形成.

如果#em1没有绝对定位,它仍然是一个内联框.最接近的块容器祖先框#strong1#p2,因此#p2是其包含块.

#em1绝对定位时,它会变成一个块框,如第9.7节所示.这使它成为最近的块容器祖先盒子#strong1,因此#em1成为它的包含块.块框被定义为块级块容器盒.

那么绝对定位会导致元素为相对定位或不定位的盒子建立一个包含块吗?是的,但只有当绝对定位导致元素的框成为这些框的最近的块容器祖先时.


请注意,这是一个相当简化的情况,因为唯一的框#em1是内联框(包括两个匿名内联周围#strong1).除了并非所有块级框都是块容器(表是块级框的常见示例,而不是块容器框),即使绝对定位确实导致元素生成块框,因为我们'再这里谈论一个行内框,它很可能是内联框的块容器是一个匿名块框之内的绝对定位的元素,如果该元素恰好包含两个块级和行内盒的组合.这个复杂的情况在9.2.1.1节中详述.

但并发症并不止于此.我说"它可能很好"的原因是因为CSS2.1中没有定义匿名块框是否能够建立包含块.