昨天介紹了基本的五種position屬性值,
裡面屢屢提到一些陌生的名詞,什麼是containing block?
今日就來介紹它吧!
這是 CSS 2.2所提出在排版中一個非常核心的原則,關係到盒模型(box model)中元素是如何定位與排列的。
- 9.1.2 Containing blocks
In CSS 2.2, many box positions and sizes are calculated with respect to the edges of a rectangular box called a containing block.
In general, generated boxes act as containing blocks for descendant boxes; we say that a box "establishes" the containing block for its descendants.
The phrase "a box's containing block" means "the containing block in which the box lives," not the one it generates.
Each box is given a position with respect to its containing block, but it is not confined by this containing block; it may overflow.
上述規範我可以得知containing block其性質,
box的位置和大小受到containing block的影響,是相對於其containing block來計算的而得。
當在 HTML 裡建立一個元素,它的box會成為裡面子元素的containing block。也可以說,子元素的位置是參照(或是相對)父元素的這個 box 來決定的。
延伸來說,當一個元素往上尋找沒有找到可以參照對比的父元素時,也就是root元素就會參照整個頁面(HTML裡的html),
在正常流向情況下,root元素是body元素(<body>)的containing block,也被稱為 initial containing block。(CSS 2.2 - 10.1)另外,body元素也是它所有子元素的containing block。
box的containing block是指它“所處”的containing block;另一個角度來說,此box“產生”(或者說“建立”)的containing block是它子代的containing block。
即使位置是依據參照containing block計算而來,但實際呈現時,若元素超出此containing block的邊界(例如:使用 position: absolute),這種情況稱為溢出(overflow)。
CSS 2.2 Specification- 9.1.2 containing block
CSS 2.2 Specification- 10.1 Definition of "containing block"
Layout and the containing block