Box: CSS佈局的基本單位 Box 是 CSS 佈局的對象和基本單位, 直觀點來講,就是一個頁面是由不少個 Box 組成的。 元素的類型和 display 屬性,決定了這個 Box 的類型。 不一樣類型的 Box, 會參與不一樣的 Formatting Context(一個決定如何渲染文檔的容器), 所以Box內的元素會以不一樣的方式渲染。讓咱們看看有哪些盒子: block-level box: display 屬性爲 block, list-item, table 的元素,會生成 block-level box。而且參與 block fomatting context; inline-level box: display 屬性爲 inline, inline-block, inline-table 的元素,會生成 inline-level box。 而且參與 inline formatting context
Formatting context(格式化上下文) Formatting context 是 W3C CSS2.1 規範中的一個概念。 它是頁面中的一塊渲染區域,而且有一套渲染規則,它決定了其子元素將如何定位,以及和其餘元素的關係和相互做用。 最多見的 Formatting context 有 Block fomatting context (簡稱BFC) Inline formatting context (簡稱IFC)。
BFC(Block formatting context)直譯爲"塊級格式化上下文"。它是一個獨立的渲染區域,只有Block-level box參與,
它規定了內部的Block-level Box如何佈局,而且與這個區域外部絕不相干
1.內部的Box會在垂直方向,一個接一個地放置。 2.BFC的區域不會與float box重疊。 3.內部的Box垂直方向的距離由margin決定。屬於同一個BFC的兩個相鄰Box的margin會發生重疊 4.計算BFC的高度時,浮動元素也參與計算。(清除浮動 haslayout) 5.BFC就是頁面上的一個隔離的獨立容器,容器裏面的子元素不會影響到外面的元素。反之也如此。
根元素
float屬性不爲none
position爲absolute或fixed
overflow不爲visible
display爲inline-block, table-cell, table-caption, flex, inline-flex
layout是windows IE的一個私有概念,它決定了元素如何對其內容定位和尺寸計算,
以及與其餘元素的關係和相互做用。當一個元素「擁有佈局」時,它會負責自己及其子元素的尺寸和定位。
而若是一個元素「沒有擁有佈局」,那麼它的尺寸和位置由最近的擁有佈局的祖先元素控制。
必須說明的是,IE8及以上瀏覽器使用了全新的顯示引擎,已經不在使用haslayout屬性,
所以haslayout屬性只針對IE6和IE7。
理論上說,每一個元素都應該控制本身的尺寸和定位,即每一個元素都應該「擁有佈局」,固然這只是理想狀態。
而對於早期的IE顯示引擎來講,若是全部元素都「擁有佈局」的話,會致使很大的性能問題。
所以IE開發團隊決定使用佈局概念來減小瀏覽器的性能開銷,即只將佈局應用於實際須要的那些元素,
因此便出現了「擁有佈局」和「沒有擁有佈局」兩種狀況。
html, body, table, tr, td, img, hr,
input, select, textarea, button,
iframe, embed, object, applet, marquee
float: left或right display: inline-block position: absolute width: 除auto外任何值 height: 除auto外任何值 zoom: 除normal外任何值 writing-mode: tb-rl
在IE7中,如下屬性也能夠觸發元素的haslayout
min-height: 任意值
min-width: 任意值
max-height: 除none 外任意值
max-width: 除none 外任意值
overflow: 除visible外任意值,僅用於塊級元素
overflow-x: 除visible 外任意值,僅用於塊級元素
overflow-y: 除visible 外任意值,僅用於塊級元素
position: fixedhtml