最近學習CSS相關知識,定位是其中的一個難點。不瞭解其中細節,有時候在使用的時候會弄得一團糟。本篇文章整理下關於定位屬性的具體理解與應用。css
在介紹postion以前,有必要先了解下文檔流。瀏覽器
簡單說就是元素按照其在 HTML 中的位置順序決定排布的過程。HTML的佈局機制就是用文檔流模型的,即塊元素(block)獨佔一行,內聯元素(inline),不獨佔一行。bash
通常使用margin是用來隔開元素與元素的間距;padding是用來隔開元素與內容的間隔。margin用於佈局分開元素使元素與元素互不相干;padding用於元素與內容之間的間隔,讓內容(文字)與(包裹)元素之間有一段「距離」。佈局
只要不是float和絕對定位方式佈局的,都在文檔流裏面。post
表現以下:學習
<div style="border:1px solid black">div1</div>
<div style="border:1px solid red">div2</div>
這是一張圖片
<img src="test.png">複製代碼
無論是哪一種定位,都必須有一個參照物。找對了參照物,就成功了一半。ui
relative生成相對定位的元素,相對於其正常位置進行定位。spa
相對定位完成的過程以下:3d
<style type="text/css">
#box1 {
margin: 20px;
width: 200px;
height: 200px;
background-color: yellow;
}
#box2 {
margin: 20px;
width: 200px;
height: 200px;
background-color: red;
/*position: relative;
left: 100px;
top: 100px;*/
}
</style>
<div id="box1"></div>
<div id="box2"></div>複製代碼
其中box2中的註釋代碼未生效前,是按照文檔流進行排序呈現。
code
絕對定位與相對定位的一大不一樣之處就是,當咱們把一個元素設置成絕對定位,那麼這個元素將會脫離文檔流,其餘元素就會認爲這個元素不存在於文檔流中而填充它原來的位置。絕對定位元素根據它的參照物移動本身的位置,而參照物則須要根據它祖先元素的定位設置來肯定。
所謂根據它祖先元素的定位設置來肯定簡單理解爲:相對於該元素最近的已定位的祖先元素,若是沒有一個祖先元素設置定位,那麼參照物是body層。
以上面的圖形來展現絕對定位的特性。能夠看出最裏層是兩個盒子,外面嵌套了兩層祖先元素。
在祖先元素沒定位的狀況下,使用absolute。
#box1 {
width: 150px;
height: 150px;
margin-left: 20px;
margin-bottom: 20px;
background-color: yellow;
position: absolute;
top: 30px;
left: 30px;
}複製代碼
祖先元素只要設置了值不爲position:static以外的值,都視爲有定位,而且最近的祖先元素會被設置爲絕對定位元素的參照物。
#orange {
width: 400px;
height: 400px;
background-color: orange;
position: absolute;
}
#box1 {
width: 150px;
height: 150px;
margin-left: 20px;
margin-bottom: 20px;
background-color: yellow;
position: absolute;
top: 30px;
left: 220px;
}複製代碼
除了上述兩種狀況外,在用戶沒給absolute元素設置left/right、top/bottom的狀況下,所對應的參考物會有變化。
在沒設置left/right、top/bottom的狀況下,absolute元素的位置就是該元素在文檔流裏的位置
#box1 {
width: 150px;
height: 150px;
margin-left: 20px;
margin-bottom: 20px;
background-color: yellow;
position: absolute;
}複製代碼
主要介紹了相對定位和絕對定位,其餘定位方式比較簡單,試一試就知道了。另外,相對定位和絕對定位的應用也比較靈活,適用於多種場景。