摘要:視覺(jué)格式化模型瀏覽器在解析渲染我們所寫(xiě)的內(nèi)容,順序渲染普通文檔流。渲染結(jié)果如下圖這兒有一個(gè)知識(shí)點(diǎn)文檔流按我的理解就是在瀏覽器渲染顯示的一個(gè)模式,這個(gè)模式的特點(diǎn)自上而下,從左到右排列規(guī)則。如果不特殊指定,瀏覽器會(huì)默認(rèn)當(dāng)前的渲染是按文檔流模式。
CSS視覺(jué)格式化模型
瀏覽器在解析渲染我們所寫(xiě)的html內(nèi)容,順序渲染(普通文檔流)。
1234
渲染結(jié)果如下圖
這兒有一個(gè)知識(shí)點(diǎn):
1、文檔流:按我的理解就是html在瀏覽器渲染顯示的一個(gè)模式,這個(gè)模式的特點(diǎn):自上而下,從左到右(排列規(guī)則)。如果不特殊指定,瀏覽器會(huì)默認(rèn)當(dāng)前的HTML渲染是按文檔流模式。
2、浮動(dòng):平時(shí)我們所知的脫離文檔流的一種方式,把html元素的布局更改,浮動(dòng)在視圖層上
3、絕對(duì)定位:脫離文檔流的另外一種方式,也是渲染在視圖層上
這兒又有個(gè)知識(shí)點(diǎn):css盒模型
盒模型是css渲染的時(shí)候抽象于html標(biāo)簽在畫(huà)布所占有區(qū)域,由CSS引擎根據(jù)文檔中的內(nèi)容所創(chuàng)建。
盒模型的關(guān)鍵屬性:內(nèi)容(content)、內(nèi)邊距(padding)、邊框(border)、外邊距(margin)。
盒模型是有兩種標(biāo)準(zhǔn)的,一個(gè)是標(biāo)準(zhǔn)模型,一個(gè)是IE模型。
從圖中很直觀能看出來(lái),兩種模型的寬度和高度的計(jì)算規(guī)則不一樣。
在css中,兩個(gè)模型的定義方式為:
/* 標(biāo)準(zhǔn)模型 */ box-sizing:content-box; /*IE模型*/ box-sizing:border-box;
視覺(jué)格式化模型會(huì)根據(jù)CSS盒子模型將文檔中的元素轉(zhuǎn)換為一個(gè)個(gè)盒子。
每個(gè)盒子的布局由以下因素決定:
盒子的尺寸:精確指定、由約束條件指定或沒(méi)有指定 盒子的類型:行內(nèi)盒子(inline)、行內(nèi)級(jí)盒子(inline-level)、原子行內(nèi)級(jí)盒子(atomic inline-level)、塊盒子(block) 定位方案(positioning scheme):普通流定位、浮動(dòng)定位或絕對(duì)定位 文檔樹(shù)中的其它元素:即當(dāng)前盒子的子元素或兄弟元素 視口尺寸與位置 所包含的圖片的尺寸 其他的某些外部因素
該模型會(huì)根據(jù)盒子的包含塊(containing block)的邊界來(lái)渲染盒子。通常,盒子會(huì)創(chuàng)建一個(gè)包含其后代元素的包含塊,但是盒子并不由包含塊所限制,當(dāng)盒子的布局跑到包含塊的外面時(shí)稱為溢出(overflow)
在這兒把我們用到的術(shù)語(yǔ)做一個(gè)解釋說(shuō)明:
塊:block,一個(gè)抽象的概念,一個(gè)塊在文檔流上占據(jù)一個(gè)獨(dú)立的區(qū)域,塊與塊之間在垂直方向上按照順序依次堆疊。 包含塊:containing block,包含其他盒子的塊稱為包含塊。 盒子:box,一個(gè)抽象的概念,由CSS引擎根據(jù)文檔中的內(nèi)容所創(chuàng)建,主要用于文檔元素的定位、布局和格式化等用途。盒子與元素并不是一一對(duì)應(yīng)的,有時(shí)多個(gè)元素會(huì)合并生成一個(gè)盒子,有時(shí)一個(gè)元素會(huì)生成多個(gè)盒子(如匿名盒子)。 塊級(jí)元素:block-level element,元素的 display 為 block、list-item、table 時(shí),該元素將成為塊級(jí)元素。元素是否是塊級(jí)元素僅是元素本身的屬性,并不直接用于格式化上下文的創(chuàng)建或布局。 塊級(jí)盒子:block-level box,由塊級(jí)元素生成。一個(gè)塊級(jí)元素至少會(huì)生成一個(gè)塊級(jí)盒子,但也有可能生成多個(gè)(例如列表項(xiàng)元素)。我們查詢資料會(huì)看到:塊格式化上下文(Block Formatting Context,BFC),就是當(dāng)前的區(qū)域。 塊盒子:block box,如果一個(gè)塊級(jí)盒子同時(shí)也是一個(gè)塊容器盒子(見(jiàn)下),則稱其為塊盒子。除具名塊盒子之外,還有一類塊盒子是匿名的,稱為匿名塊盒子(Anonymous block box),匿名盒子無(wú)法被CSS選擇符選中。 塊容器盒子:block container box或block containing box,塊容器盒子側(cè)重于當(dāng)前盒子作為“容器”的這一角色,它不參與當(dāng)前塊的布局和定位,它所描述的僅僅是當(dāng)前盒子與其后代之間的關(guān)系。換句話說(shuō),塊容器盒子主要用于確定其子元素的定位、布局等。 注意:盒子分為“塊盒子”和“塊級(jí)盒子”兩種,但元素只有“塊級(jí)元素”,而沒(méi)有“塊元素”。下面的“行內(nèi)級(jí)元素”也是一樣。 行內(nèi)級(jí)元素:inline-level element,display 為 inline、inline-block、inline-table 的元素稱為行內(nèi)級(jí)元素。與塊級(jí)元素一樣,元素是否是行內(nèi)級(jí)元素僅是元素本身的屬性,并不直接用于格式化上下文的創(chuàng)建或布局。 行內(nèi)級(jí)盒子:inline-level box,由行內(nèi)級(jí)元素生成。行內(nèi)級(jí)盒子包括行內(nèi)盒子和原子行內(nèi)級(jí)盒子兩種,區(qū)別在于該盒子是否參與行內(nèi)格式化上下文的創(chuàng)建。行內(nèi)格式化上下文(inline formatting context, IFC),就是當(dāng)前區(qū)域。 行內(nèi)盒子:inline box,參與行內(nèi)格式化上下文創(chuàng)建的行內(nèi)級(jí)盒子稱為行內(nèi)盒子。與塊盒子類似,行內(nèi)盒子也分為具名行內(nèi)盒子和匿名行內(nèi)盒子(anonymous inline box)兩種。 原子行內(nèi)級(jí)盒子:atomic inline-level box,不參與行內(nèi)格式化上下文創(chuàng)建的行內(nèi)級(jí)盒子。原子行內(nèi)級(jí)盒子一開(kāi)始叫做原子行內(nèi)盒子(atomic inline box),后被修正。原子行內(nèi)級(jí)盒子的內(nèi)容不會(huì)拆分成多行顯示。塊級(jí)元素與塊盒子
當(dāng)元素的 display 為 block、list-item 或 table 時(shí),該元素將成為塊級(jí)元素。一個(gè)塊級(jí)元素會(huì)被格式化成一個(gè)塊(例如文章的一個(gè)段落),默認(rèn)按照垂直方向依次排列。
比較生硬的知識(shí)BFC,IFC,后面的說(shuō)明中會(huì)用到:
BFC創(chuàng)建BFC區(qū)域的方式:
根元素或包含根元素的元素 浮動(dòng)元素(元素的 float 不是 none) 絕對(duì)定位元素(元素的 position 為 absolute 或 fixed) 行內(nèi)塊元素(元素的 display 為 inline-block) 表格單元格(元素的 display為 table-cell,HTML表格單元格默認(rèn)為該值) 表格標(biāo)題(元素的 display 為 table-caption,HTML表格標(biāo)題默認(rèn)為該值) 匿名表格單元格元素(元素的 display為 table、table-row、 table-row-group、table-header-group、table-footer-group(分別是HTML table、row、tbody、thead、tfoot的默認(rèn)屬性)或 inline-table) overflow 值不為 visible 的塊元素 display 值為 flow-root 的元素 contain 值為 layout、content或 strict 的元素 彈性元素(display為 flex 或 inline-flex元素的直接子元素) 網(wǎng)格元素(display為 grid 或 inline-grid 元素的直接子元素) 多列容器(元素的 column-count 或 column-width 不為 auto,包括 column-count 為 1) column-span 為 all 的元素始終會(huì)創(chuàng)建一個(gè)新的BFC,即使該元素沒(méi)有包裹在一個(gè)多列容器中
BFC對(duì)浮動(dòng)定位與清除浮動(dòng)都很重要。浮動(dòng)定位和清除浮動(dòng)時(shí)只會(huì)應(yīng)用于同一個(gè)BFC內(nèi)的元素。浮動(dòng)不會(huì)影響其它BFC中元素的布局,而清除浮動(dòng)只能清除同一BFC中在它前面的元素的浮動(dòng)。外邊距折疊也只會(huì)發(fā)生在屬于同一BFC的塊級(jí)元素之間
BFC區(qū)域內(nèi)模型的規(guī)則:
1、內(nèi)部的box會(huì)在垂直方向,一個(gè)接一個(gè)的放置 2、每個(gè)元素的margin box的左邊,與包含塊border box的左邊相接觸(對(duì)于從左往右的格式化,否則相反) 3、box垂直方向的距離由margin決定,屬于同一個(gè)BFC的兩個(gè)相鄰box的margin會(huì)發(fā)生重疊 4、BFC的區(qū)域不會(huì)與浮動(dòng)區(qū)域的box重疊 5、BFC是一個(gè)頁(yè)面上的獨(dú)立的容器,外面的元素不會(huì)影響B(tài)FC里的元素,反過(guò)來(lái),里面的也不會(huì)影響外面的 6、計(jì)算BFC高度的時(shí)候,浮動(dòng)元素也會(huì)參與計(jì)算
來(lái)看一個(gè)例子,margin重疊的問(wèn)題:
Document 上
margin-bottom:30px;下
margin-top:50px;
上述視圖效果,上下邊距重疊取最大的值。
用BFC可以解決垂直margin重疊的問(wèn)題
上
margin-bottom:30px;
每個(gè)塊級(jí)盒子都會(huì)參與塊格式化上下文(block formatting context)的創(chuàng)建,而每個(gè)塊級(jí)元素都會(huì)至少生成一個(gè)塊級(jí)盒子,即主塊級(jí)盒子(principal block-level box)。有一些元素,比如列表項(xiàng)會(huì)生成額外的盒子來(lái)放置項(xiàng)目符號(hào),而那些會(huì)生成列表項(xiàng)的元素可能會(huì)生成更多的盒子。不過(guò),多數(shù)元素只生成一個(gè)主塊級(jí)盒子。
主塊級(jí)盒子包含由后代元素生成的盒子以及內(nèi)容,同時(shí)它也會(huì)參與定位方案。
定位規(guī)則:一旦生成了盒子以后,CSS引擎就需要定位它們以完成布局。下面是定位盒子時(shí)所使用的規(guī)則:
普通流:按照次序依次定位每個(gè)盒子 浮動(dòng):將盒子從普通流中多帶帶拎出來(lái),將其放到外層盒子的某一邊 絕對(duì)定位:按照絕對(duì)位置來(lái)定位盒子,其位置根據(jù)盒子的包含元素所建立的絕對(duì)坐標(biāo)系來(lái)計(jì)算,因此絕對(duì)定位元素有可能會(huì)覆蓋其他元素
一個(gè)塊級(jí)盒子可能也是一個(gè)塊容器盒子。塊容器盒子(block container box)要么只包含其它塊級(jí)盒子,要么只包含行內(nèi)盒子并同時(shí)創(chuàng)建一個(gè)行內(nèi)格式化上下文(inline formatting context)。
能夠注意到塊級(jí)盒子與塊容器盒子是不同的這一點(diǎn)很重要。前者描述了元素與其父元素和兄弟元素之間的行為,而后者描述了元素跟其后代之間的行為。有些塊級(jí)盒子并不是塊容器盒子,比如表格;而有些塊容器盒子也不是塊級(jí)盒子,比如非替換行內(nèi)塊和非替換表格單元格。
一個(gè)同時(shí)是塊容器盒子的塊級(jí)盒子稱為塊盒子(block box)。
匿名塊盒子在某些情況下進(jìn)行視覺(jué)格式化時(shí),需要添加一些增補(bǔ)性的盒子,這些盒子不能用CSS選擇符選中,因此稱為匿名盒子(anonymous boxes)。
CSS選擇器不能作用于匿名盒子(anonymous boxes),所以它不能被樣式表賦予樣式。也就是說(shuō),此時(shí)所有可繼承的 CSS 屬性值都為 inherit ,而所有不可繼承的 CSS 屬性值都為 initial。
塊包含盒子可能只包含行內(nèi)級(jí)盒子,也可能只包含塊級(jí)盒子,但通常的文檔都會(huì)同時(shí)包含兩者,在這種情況下,就會(huì)在相鄰的行內(nèi)級(jí)盒子外創(chuàng)建匿名塊盒子。
假如div和p標(biāo)簽都保持默認(rèn)樣式(即它們的 display 為 block):
Some inline textfollowed by a paragraph
followed by more inline text.
此時(shí)會(huì)產(chǎn)生兩個(gè)匿名塊盒子:一個(gè)是
元素前面的那些文本(Some inline text),另一個(gè)是
元素后面的文本(followed by more inline text.)。此時(shí)會(huì)生成下面的塊結(jié)構(gòu):
對(duì)這兩個(gè)匿名盒子來(lái)說(shuō),程序員無(wú)法像
元素那樣控制它們的樣式,因此它們會(huì)從
元素的盒子則能夠用CSS指定背景顏色。類似地,兩個(gè)匿名盒子的文本顏色總是一樣的。
另一種會(huì)創(chuàng)建匿名塊盒子的情況是一個(gè)行內(nèi)盒子中包含一或多個(gè)塊盒子。此時(shí),包含塊盒子的盒子會(huì)拆分為兩個(gè)行內(nèi)盒子,分別位于塊盒子的前面和后面。塊盒子前面的所有行內(nèi)盒子會(huì)被一個(gè)匿名塊盒子包裹,塊盒子后面的行內(nèi)盒子也是一樣。因此,塊盒子將成為這兩個(gè)匿名塊盒子的兄弟盒子。
如果有多個(gè)塊盒子,而它們中間又沒(méi)有行內(nèi)元素,則會(huì)在這些盒子的前面和后面創(chuàng)建兩個(gè)匿名塊盒子:
假設(shè)
的 display 為 inline, 的 display 為 block:
Some inline text followed by a paragraph followed by more inline text.
此時(shí)會(huì)產(chǎn)生兩個(gè)匿名塊盒子:一個(gè)是 元素前面的文本(Some inline text),另一個(gè)是其之后的文本(followed by more inline text.)。此時(shí)會(huì)生成下面的塊結(jié)構(gòu):
如果一個(gè)元素的 display 屬性為 inline、inline-block 或 inline-table,則稱該元素為行內(nèi)級(jí)元素。顯示時(shí),它不會(huì)生成內(nèi)容塊,但是可以與其他行內(nèi)級(jí)內(nèi)容一起顯示為多行。一個(gè)典型的例子是包含多種格式內(nèi)容(如強(qiáng)調(diào)文本、圖片等)的段落,就可以由行內(nèi)級(jí)元素組成。
行內(nèi)級(jí)元素會(huì)生成行內(nèi)級(jí)盒子,該盒子同時(shí)會(huì)參與行內(nèi)格式化上下文(inline formatting context)的創(chuàng)建。行內(nèi)盒子既是行內(nèi)級(jí)盒子,也是一個(gè)其內(nèi)容會(huì)參與創(chuàng)建其容器的行內(nèi)格式化上下文的盒子,比如所有具有 display:inline 樣式的非替換盒子。如果一個(gè)行內(nèi)級(jí)盒子的內(nèi)容不參與行內(nèi)格式化上下文的創(chuàng)建,則稱其為原子行內(nèi)級(jí)盒子。而通過(guò)替換行內(nèi)級(jí)元素或 display 值為 inline-block 或 inline-table 的元素創(chuàng)建的盒子不會(huì)像行內(nèi)盒子一樣可以被拆分為多個(gè)盒子。
在同一個(gè)行內(nèi)格式化上下文中,原子行內(nèi)級(jí)盒子不能拆分成多行:
The text in the span can be split in several lines as it is an inline box.
顯示為:
The text in the span can be split into several
lines as it is an inline box.
The text in the span cannot be split in several lines as it is an inline-block box.
顯示為:
The text in the span
cannot be split into several lines as it is an
inline-block box.
其中的“cannot be split into several lines as it”永遠(yuǎn)不會(huì)換行。
IFC行內(nèi)格式化上下文(inline formatting context)
行框(line boxes)
相對(duì)于BFC,在IFC中,框(boxes)一個(gè)接一個(gè)地水平排列,起點(diǎn)是包含塊的頂部。水平方向上的margin,border和padding在框之間得到保留。框在垂直方向上可以以不同的方式對(duì)齊:它們的頂部或底部對(duì)齊,或根據(jù)其中文字 的基線對(duì)齊。包含那些框的長(zhǎng)方形區(qū)域,會(huì)形成一行,叫做行框。
行框的寬度有它的包含塊和其中的浮動(dòng)元素決定。高度的確定由行高度計(jì)算規(guī)則決定。
行框的范圍
通常,行框的左邊接觸到包含塊的左邊,右邊接觸到其包含塊的右邊。然而,浮動(dòng)元素可能會(huì)處于包含塊邊緣和行框邊緣之間??傊M管在相同的行內(nèi)格式化上下文中的行框通常擁有相同的寬度(包含塊的寬度),它們可能會(huì)因浮動(dòng)元素縮短了可用寬度,而在寬度上發(fā)生變化。同一行內(nèi)格式化上下文中行框通常高度不一樣(如,一行包含了一個(gè)高的圖形,而其它行只包含文本)。
例子:
Document float inline box primary
顯示結(jié)果:
行內(nèi)框可能被分割
如果幾個(gè)行內(nèi)框在水平方向無(wú)法放入一個(gè)行框內(nèi),它們可以分配在兩個(gè)或多個(gè)垂直堆疊的行框中。因此,一個(gè)段落就是行框在垂直方向上的隊(duì)疊。行框在堆疊時(shí)沒(méi)有垂直方向上的分割且永不重疊。
如果一個(gè)行內(nèi)框超出包含它的行框的寬度,它會(huì)被分割成幾個(gè)框,并且這些框會(huì)被分布到幾個(gè)行框內(nèi)。如果一個(gè)行框不能被分割(例如:行內(nèi)框只包含單個(gè)字符,或者語(yǔ)言特殊的斷字規(guī)則不允許在行內(nèi)框里換行,或者行內(nèi)框受到帶有“nowrap“或”pre“值的”white-space“特性的影響),這時(shí),行內(nèi)框會(huì)益處行框。
如果一個(gè)行內(nèi)框被分割,margin,padding和border在所有分割處沒(méi)有視覺(jué)效果。
行內(nèi)框還可能由于雙向文本處理(bidirectional text processing)而在同一個(gè)行框內(nèi)被分割為好幾個(gè)框。具體看上面的例子。
行內(nèi)框的對(duì)齊
1)、行內(nèi)框在行框中垂直方向上的對(duì)齊
行框的高度總是足夠容納所包含的所有框。不過(guò),它可能高于它包含的最高的框(例如:框?qū)R會(huì)引起基線對(duì)齊)。當(dāng)一個(gè)框B的高度小雨包含它的行框的高度時(shí),B在行框中垂直方向上的對(duì)齊決定于”vertical-aligin“的特性?!眝ertical-align“默認(rèn)值基線(baseline)對(duì)齊。
貼一個(gè)關(guān)于基線(baseline)的圖,最直觀:
2)、行內(nèi)框在行框中水平方向上的對(duì)齊
當(dāng)一行中行內(nèi)寬度的總和小于包含它們的行框的寬,它們?cè)谒椒较蛏系膶?duì)齊,取決于"text-align"特性。如果其值是”justify“,用戶端也可以拉伸行內(nèi)框(除了”inline-table“和”inline-block“框)中的空間和文字。
空的行內(nèi)框應(yīng)該被忽略
不包含文本,保留空白符,margin/padding/border非0的行內(nèi)元素,以及其他常規(guī)流中的內(nèi)容(比如,圖片,inline-blocks和inline-tables),并且不是以換行結(jié)束的行框,必須被當(dāng)作0高度行框?qū)Υ?。就外邊距折疊而言,這種行框必須被忽略。
匿名行內(nèi)盒子類似于塊盒子,CSS引擎有時(shí)候也會(huì)自動(dòng)創(chuàng)建一些行內(nèi)盒子。這些行內(nèi)盒子無(wú)法被選擇符選中,因此是匿名的,它們從父元素那里繼承那些可繼承的屬性,其他屬性保持默認(rèn)值 initial。
一種常見(jiàn)的情況是CSS引擎會(huì)自動(dòng)為直接包含在塊盒子中的文本創(chuàng)建一個(gè)行內(nèi)格式化上下文,在這種情況下,這些文本會(huì)被一個(gè)足夠大的匿名行內(nèi)盒子所包含。但是如果僅包含空格則有可能不會(huì)生成匿名行內(nèi)盒子,因?yàn)榭崭裼锌赡軙?huì)由于 white-space 的設(shè)置而被移除,從而導(dǎo)致最終的實(shí)際內(nèi)容為空。
浮動(dòng)在浮動(dòng)定位中,浮動(dòng)盒子會(huì)浮動(dòng)到當(dāng)前行的開(kāi)始或尾部位置。這會(huì)導(dǎo)致普通流中的文本及其他內(nèi)容會(huì)“流”到浮動(dòng)盒子的邊緣處,除非元素通過(guò) clear 清除了前面的浮動(dòng)。
一個(gè)盒子的 float 值不為 none,并且其 position 為 static 或 relative 時(shí),該盒子為浮動(dòng)定位。如果將 float 設(shè)置為 left,浮動(dòng)盒子會(huì)定位到當(dāng)前行盒子的開(kāi)始位置(左側(cè)),如果設(shè)置為 right,浮動(dòng)盒子會(huì)定位到當(dāng)前行盒子的尾部位置(右側(cè))。不管是左浮動(dòng)還是右浮動(dòng),行盒子都會(huì)伸縮以適應(yīng)浮動(dòng)盒子的大小。
絕對(duì)定位在絕對(duì)定位中,盒子會(huì)完全從當(dāng)前流中移除,并且不會(huì)再與其有任何聯(lián)系(譯注:此處僅指定位和位置計(jì)算,而絕對(duì)定位的元素在文檔樹(shù)中仍然與其他元素有父子或兄弟等關(guān)系),其位置會(huì)使用 top、bottom、left 和 right 相對(duì)其包含塊進(jìn)行計(jì)算。
如果元素的 position 為 absolute 或 fixed,該元素為絕對(duì)定位。
對(duì)固定位置的元素來(lái)說(shuō),其包含塊為整個(gè)視口,該元素相對(duì)視口進(jìn)行絕對(duì)定位,因此滾動(dòng)時(shí)元素的位置并不會(huì)改變。
GFCGFC(GridLayout Formatting Contexts)意為“網(wǎng)格布局格式化上下文”當(dāng)一個(gè)元素設(shè)置為display:grid的時(shí)候,此元素將獲得一個(gè)獨(dú)立的渲染區(qū)域,可以在網(wǎng)格容器上定義網(wǎng)格行和列,為每一個(gè)網(wǎng)格定義位置和空間。GFC和table的區(qū)別在于GridLayout會(huì)有更加豐富的屬性來(lái)控制行列,控制對(duì)齊以及更為精細(xì)的渲染。
FFCFFC(Flex Formatting Contexts)意為“自適應(yīng)格式化上下文”,display值為flex或者inline-flex的元素將會(huì)生成自適應(yīng)容器,當(dāng)前只有谷歌和火狐支持該屬性,不過(guò)在移動(dòng)端幾乎沒(méi)有障礙(移動(dòng)端是chrome和Safari的天下)。flex box由伸縮容器和伸縮子元素組成。通過(guò)設(shè)置元素display:flex/inline-flex可以得到伸縮容器,前者為塊級(jí)元素,后者為行內(nèi)元素。伸縮容器外元素不受影響。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/117157.html
摘要:并且這種過(guò)程遵循標(biāo)準(zhǔn)的描述只要不是和絕對(duì)定位方式布局的,都在普通流里面。定位相對(duì)定位在普通流之中,是相對(duì)于它在普通流中的位置中進(jìn)行移動(dòng),元素占據(jù)原來(lái)位置絕對(duì)定位脫離普通流,不占據(jù)空間相對(duì)于距離它最近的那個(gè)已定位的祖先相對(duì)絕對(duì)元素決定的。 視覺(jué)格式化模型 頁(yè)面(文檔樹(shù))可以想象成是由一個(gè)個(gè)的Box組合而成的,而視覺(jué)格式化模型(Visual formatting model)是一套規(guī)則,將...
摘要:中各種布局的背后,實(shí)質(zhì)上是各種的組合。相反,一些塊容器盒,比如非替換行內(nèi)塊及非替換表格單元格,不是塊級(jí)盒。描述元素跟它的后代之間的影響。行盒行盒由行內(nèi)格式化上下文產(chǎn)生的盒,用于表示一行。彈性容器外和彈性項(xiàng)目?jī)?nèi)的一切元素都不受影響。 CSS中各種布局的背后,實(shí)質(zhì)上是各種*FC的組合。CSS2.1 中只有 BFC 和 IFC, CSS3 中還增加了 FFC 和 GFC。 盒模型(Box M...
摘要:官方說(shuō)法就是它規(guī)定了用戶端在媒介中如何處理文檔樹(shù)。是的包含塊,同時(shí)又是的包含塊,不是絕對(duì)的。因此稱為匿名盒子。行內(nèi)盒子行內(nèi)級(jí)元素會(huì)生成行內(nèi)級(jí)盒子,該盒子同時(shí)會(huì)參與行內(nèi)格式化上下文的創(chuàng)建。如果只有一個(gè)值指定為,則其使用的值來(lái)自相等。 作者:陳大魚(yú)頭 github: KRISACHAN 盒模型 The CSS box model describes the rectangular b...
摘要:詳見(jiàn)權(quán)威指南塊級(jí)元素即塊級(jí)元素是源文檔中被格式化為塊的元素,或者屬性為的元素。概念顧名思義塊級(jí)格式化上下文。每個(gè)元素的的左邊,與包含塊的左邊相接觸對(duì)于從左往右的格式化,否則相反。 情景:浮動(dòng)的高度塌陷時(shí),使用overflow:hidden可使父元素將浮動(dòng)的子元素包含起來(lái),解決問(wèn)題。但背后的原理是什么?這就是今天要談的BFC。 在將BFC之前需要先了解幾個(gè)概念: 盒子模型(Box mo...
摘要:塊級(jí)盒參與塊格式化上下文。行內(nèi)級(jí)盒參與行內(nèi)格式化上下文塊格式化上下文行內(nèi)格式化上下文相對(duì)定位浮動(dòng)盒就是一個(gè)在當(dāng)前行向左或向右移動(dòng)的盒。浮動(dòng)絕對(duì)定位絕對(duì)定位模型中,一個(gè)盒會(huì)有相對(duì)于其包含塊的明確偏移,它會(huì)從常規(guī)流中全部移除不會(huì)影響后面的兄弟。 在可視化格式模型(Visual formatting model)當(dāng)中,文檔樹(shù)中的每個(gè)元素根據(jù)其盒模型生成0個(gè)或多個(gè)盒.這些盒的布局由(以下因素)...
閱讀 3358·2023-04-26 00:58
閱讀 1290·2021-09-22 16:04
閱讀 3349·2021-09-02 15:11
閱讀 1591·2019-08-30 15:55
閱讀 2370·2019-08-30 15:55
閱讀 3330·2019-08-23 18:41
閱讀 3488·2019-08-23 18:18
閱讀 2779·2019-08-23 17:53