爲方便,top、right、left、bottom屬性簡寫爲TRLBcss
舉個栗子:html
將div標籤的position設置爲absolute瀏覽器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>absolute</title> <style type="text/css"> *{ margin: 0px; padding: 0px; } .absolute{ width: 100px; height: 100px; border: 1px solid red; position: absolute; top: 0px; left: 0px; } </style> </head> <body> <p>你好</p> <div class="absolute"></div> </body> </html>
瀏覽器顯示:ide
經過頁面顯示咱們發現,設置爲absolute的絕對定位元素div,不顧處於標準流中的p標籤的存在,仍然顯示在了top:0px; left:0px;位置,佈局
從中咱們也能夠看出絕對定位元素脫離了正常的標準流spa
舉個栗子:code
將div標籤的position設置爲relativehtm
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>relative</title> <style type="text/css"> *{ margin: 0px; padding: 0px; } .relative{ width: 100px; height: 100px; border: 1px solid red; position: relative; top: 0px; left: 0px; } </style> </head> <body> <p>你好</p> <div class="relative"></div> </body> </html>
瀏覽器顯示:blog
咱們發現,設置爲relative的相對定位元素div,受標準流中的p標籤的約束,顯示在了p標籤的下方,由於它是相對於在標準流中原來的位置進行定位的.繼承
絕對定位absolute
<div style="width: 240px; height: auto; border: solid 1px black;"> <div style="width: 80px; height: 80px; background-color: red; position: absolute; margin: 0 auto;"></div> </div>
相對定位relative
<div style="width: 240px; height: auto; border: solid 1px black;"> <div style="width: 80px; height: 80px; background-color: red; position: relative; margin: 0 auto;"></div> </div>
咱們發現:1. 相對定位元素能夠爲父元素撐起高度,而絕對定位元素卻會形成父元素塌陷,也說明了相對定位元素沒有脫離標準流,而絕對定位元素脫離了標準流。
2.未脫離標準流的元素能夠經過設置margin-left和margin-right爲auto,來使塊級元素水平居中。
舉個栗子:
給position設置爲relative的div標籤,加一個position設置爲relative的父標籤,觀察fixed是否受具備position的父標籤影響,做爲對比咱們再加上一個屬性值爲absolute的div標籤
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>fixed</title> <style type="text/css"> *{ margin: 0px; padding: 0px; } .fixed{ width: 100px; height: 100px; border: 1px solid red; position: fixed; top: 0px; left: 0px; } .absolute{ width: 100px; height: 100px; border: 1px solid blue; position: absolute; top: 0px; left: 0px; } .pre{ width: 200px; height: 200px; border: 1px solid black; position: relative; top: 100px; left: 100px; } </style> </head> <body> <div class="pre"> <div class="fixed"></div> <div class="absolute"></div> </div> </body> </html>
網頁顯示:
咱們發現,屬性值爲fixed的子標籤並不受具備position屬性的父標籤影響,脫離了來父標籤的約束,相對於瀏覽器窗口顯示在top:0px; left:0px;位置.
而屬性值爲absolute的子標籤卻受着具備position屬性的父標籤約束,相對於position爲relative的父元素顯示在了top:0; left:0;位置,這也是fixed與absolute的一個重要區別。
舉個栗子:
對於父div標籤咱們設置position:fixed,對於子div標籤咱們設置position:inherit,觀察子標籤是否會繼承父標籤的position屬性值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>inherit</title> <style type="text/css"> *{ margin: 0px; padding: 0px; } .pre{ width: 200px; height: 200px; border: 1px solid black; position: fixed; top: 100px; left: 100px; } .inherit{ width: 100px; height: 100px; border: 1px solid red; position: inherit; top: 0px; left: 0px; } </style> </head> <body> <div class="pre"> <div class="inherit"></div> </div> </body> </html>
瀏覽器顯示:
咱們發現,子標籤具備和父標籤一樣的position屬性值---fixed,子標籤的fixed使它顯示在了相對於瀏覽器窗口進行定位的top:0px; left:0px;位置
關於前兩點舉個栗子
給body標籤設置內邊距和外邊距,觀察相對定位元素和絕對定位元素的顯示狀況
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>inherit</title> <style type="text/css"> body{ margin: 10px; padding: 10px; } .relative{ width: 100px; height: 100px; border: 1px solid red; position: relative; top: 0px; left: 0px; } .absolute{ width: 100px; height: 100px; border: 1px solid black; position: absolute; top: 0px; left: 0px; } </style> </head> <body> <div class="relative"></div> <div class="absolute"></div> </body> </html>
網頁顯示:
咱們發現元素:<div class="relative"></div>受body標籤內外邊距的影響,顯示在了元素:<div class="absolute"></div>的右下方
關於第三點再舉個栗子
咱們將中間的div設置爲relative
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>z-index</title> <style type="text/css"> *{ margin: 0px; padding: 0px; } .yellow{ width: 100px; height: 100px; background-color: yellow; } .relative_red{ width: 100px; height: 100px; background-color: red; position: relative; left: 200px; } .black{ width: 100px; height: 100px; background-color: black; } </style> </head> <body> <div class="yellow"></div> <div class="relative_red"></div> <div class="black"></div> </body> </html>
網頁顯示:
爲了對比,咱們將中間div的relative改成absolute:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>z-index</title> <style type="text/css"> *{ margin: 0px; padding: 0px; } .yellow{ width: 100px; height: 100px; background-color: yellow; } .absolute_red{ width: 100px; height: 100px; background-color: red; position: absolute; left: 200px; } .black{ width: 100px; height: 100px; background-color: black; } </style> </head> <body> <div class="yellow"></div> <div class="absolute_red"></div> <div class="black"></div> </body> </html>
網頁顯示:
咱們發現,設置position:relative的div在原來的文檔流上,仍然佔有空間,而設置position:absolute的div在文檔流上再也不佔有空間
慄如:
未設置position的<span>標籤
<span style="width: 100px; height: 100px; background-color: red"></span>
儘管給它加了width和height屬性,但它仍是做爲內聯元素,width和height屬性無效,因此網頁顯示空白
添加position:absolute生成絕對定位元素以後
<span style="width: 100px; height: 100px; background-color: red;position: absolute;"></span>
<span>標籤同時變成了塊狀元素
由於先寫的定位元素會被後寫的定位元素覆蓋,所以咱們須要設置定位元素的堆疊順序,是其按照咱們想要的覆蓋方式進行顯示
舉個大栗子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>z-index</title> <style type="text/css"> *{ margin: 0px; padding: 0px; } .red{ width: 100px; height: 100px; background-color: red; position: absolute; top: 0px; left: 0px; z-index: 5; } .black{ width: 100px; height: 100px; background-color: black; position: absolute; top: 0px; left: 0px; z-index: 3; } .blue{ width: 100px; height: 100px; background-color: blue; position: absolute; top: 0px; right: 0px; z-index: -1; } .no-position-yellow{ width: 1500px; height: 1000px; background-color: yellow; } </style> </head> <body> <div class="no-position-yellow"></div> <div class="red"></div> <div class="black"></div> <div class="blue"></div> </body> </html>
網頁顯示:
咱們能夠看到只有背景爲紅色和黃色的元素顯示了,而且紅色元素堆疊在黃色元素上方,由於黑色元素的z-index小於紅色元素的z-index,而它們位置相同,所以紅色元素將黑色元素徹底覆蓋了.
對於藍色元素,由於他的z-index爲負數,因此它直接被標準流中的黃色元素覆蓋.
我理解淺薄,若有錯誤或不足之處還請留言指出,十分感謝!