CSS布局模型,又稱為CCS盒布局模型。其實布局模型是建立在盒模型基礎之上的,但是又不同于我們常說的CSS布局樣式或CSS布局模板。如果說布局模型是本質(zhì),那么CSS布局模板就是外在的表現(xiàn)形式。
CSS包含3中基本的布局模型,分別為:Flow(流動布局模型)、Float(浮動布局模型)、Layer(層級布局模型)。
流動布局模型其實就是默認的網(wǎng)頁布局模式。也就是說網(wǎng)頁在默認狀態(tài)下的HTML網(wǎng)頁元素都是根據(jù)流動模型來分布網(wǎng)頁內(nèi)容的。
流動布局將會有兩個比較典型的特征,
第一,塊級元素都會在所處的最近父級容器元素內(nèi)自上而下按順序垂直順延分布,因為在默認狀態(tài)下,塊級元素的寬度都是100%(即父級元素寬度的100%)。實際上,塊狀元素都會以行的形式占據(jù)位置。如下代碼所示,
<html>
<body>
<h1>我是h1</h1>
<div>我是div</div>
</body>
</html>
如上述代碼所示,在沒有外在樣式的影響下,h1
和div
的寬度都將是100%(為頁面的默認寬度)。
第二,在流動模型下,內(nèi)聯(lián)元素都會在所處的最近父級容器元素內(nèi)從左到右水平分布顯示。
<html>
<body>
<a>我是a</a>
<span>我是span</span>
</body>
</html>
內(nèi)聯(lián)元素不會像塊級元素那樣獨自的占據(jù)一行。
任何元素在默認的情況下都是處于整個文檔流中的,不會浮動的。當我們給某一個元素設置浮動時,即可讓該元素擺脫當前文檔流,成為浮動元素。
如下代碼,給div
元素設置浮動,讓兩個div并排顯示。
div{
width:200px;
height:200px;
border:2px red solid;
float:left;
}
<div id="div1">我是div1</div>
<div id="div2">我是div2</div>
這里有一點需要注意,如果我給div設置的浮動是float: right
,那么div1
將會貼在右側,而div2
將會貼在div1
的左側。
什么是層級布局模型?
層級布局模型就像是圖像軟件PhotoShop中非常流行的圖層編輯功能一樣,每個圖層能夠精確定位操作,但在網(wǎng)頁設計領域,由于網(wǎng)頁大小的活動性,層級布局模型沒能受到熱捧。但是在網(wǎng)頁上局部使用層級布局還是有其方便之處的。
應用層級布局,往往需要定位屬性的配合。CSS中有3種定位類型,
position: absolute
)position: relative
)position: fixed
)如果想為元素設置層級布局模型中的絕對定位,需要設置position:absolute
(表示絕對定位),這條語句的作用將元素從文檔流中拖出來,然后使用left
、right
、top
、bottom
屬性相對于其最接近的一個具有定位屬性的父包含塊進行絕對定位。如果不存在這樣的包含塊,則相對于body元素,即相對于瀏覽器窗口。
如果想為元素設置層級布局模型中的相對定位,需要設置position:relative
(表示相對定位),它通過left
、right
、top
、bottom
屬性確定元素在正常文檔流中的偏移位置。相對定位完成的過程是首先按static
(float
)方式生成一個元素(并且元素像層一樣浮動了起來),然后相對于以前的位置移動,移動的方向和幅度由left
、right
、top
、bottom
屬性確定,偏移前的位置保留不動。
相對定位與絕對定位最大的區(qū)別在于,前者沒有脫離當前文檔流而后者已經(jīng)脫離了當前文檔流。脫離當前文檔流的意思是,該元素的前后元素在計算位置和偏移時將不再計算該元素的大小和位置。
position: fixed
,表示固定定位,與absolute
定位類型類似,但它的相對移動的坐標是視圖(屏幕內(nèi)的網(wǎng)頁窗口)本身。由于視圖本身是固定的,它不會隨瀏覽器窗口的滾動條滾動而變化,除非你在屏幕中移動瀏覽器窗口的屏幕位置,或改變?yōu)g覽器窗口的顯示大小,因此固定定位的元素會始終位于瀏覽器窗口內(nèi)視圖的某個位置,不會受文檔流動影響,這與background-attachment:fixed?
(用于定位背景圖片的位置)屬性功能相同。
固定定位在某一種場景下很有用,當我們需要在頁面的某一位置固定的展示某一元素,且不受頁面滾動條的影響。比如,常見的“返回頂部”之類的按鈕。
現(xiàn)代網(wǎng)頁布局中,經(jīng)常將相對定位和絕對定位混合使用,以達到更加靈活的目的。如下代碼,
<style>
#box1{
width:200px;
height:200px;
position:relative; /* 前輩元素的定位必須設置為relative */
}
#box2{
position:absolute; /* 相對于最近的一個定位設置為relative的前輩元素的絕對定位 */
top:20px;
left:30px;
}
</style>
<div id="box1">
<div id="box2">相對參照元素進行定位</div>
</div>
即,box2
相對于box1
是絕對定位的。當改變box1
的位置時,box1
內(nèi)部的子元素是不會發(fā)生變化的,因為他們都是相對box1
絕對定位的。
更多建議: