postion
屬性定義了一個元素在頁面佈局中的位置以及對周圍元素的影響。該屬性共有5個值:css
本文主要詳細討論 position
屬性的前三個值,首先大概講解下後兩個值:segmentfault
static
爲 position
屬性的默認值,static
元素會遵循正常的文檔流,且會忽略 top,bottom,left,right
等屬性。佈局
inherit
值如同其餘 css
屬性的 inherit
值,即繼承父元素的 position
值。post
absolute
元素將會脫離正常的文檔流,因此 其周圍的元素將會忽略它的存在。如同 absolute
元素的 display
屬性被設爲了 none
同樣。此時,咱們可使用 top,bottom,left,right
等屬性對 absolute
元素進行絕對定位。通常狀況下定義兩個屬性,top
或 bottom
,left
或 right
。
這個絕對定位須要稍微理解下,由於這裏容易與 relative
產生混淆。
例如,當對 absolute
元素添加 left:10px
定位後,這個 left
到底是對哪一個元素而言呢?其實,此時將會往上查找 absolute
元素的第一個父元素,若是該父元素的 position 值存在
(且不爲 static
),那麼這個 left:10px
就是根據該父元素進行的定位,不然將會繼續查找該父元素的父元素,一直追溯到某個父元素具有不爲 static
的 position
值爲止,若是不存在知足條件的父元素,則會根據最外層的 window
進行定位。spa
<div style="position: absolute">Im an absolute element</div> <div>Im a default element</div>
//直接忽略 absolute 元素的存在
code
relative
元素遵循正常的文檔流,因此周圍元素不會忽略它的存在,relative 元素一樣支持 top,bottom,left,right
等屬性。當咱們使用 top,bottom,left,right
等屬性對 relative
元素進行相對定位時的效果有點相似於 margin
屬性達到的效果,可是區別在於, relative
元素周圍的元素將會忽略 relative
元素的移動。咱們注意,當 relative
元素未使用定位屬性進行相對定位時,它不會被周圍的元素忽略,但利用定位屬性進行定位後,周圍的元素會忽略 relative
元素的移動,它們會認爲 relative
元素仍然在原來的位置,並未進行移動,咱們用個例子來講明:繼承
<div style="position: relative">Im a relative element</div> <div>Im a default element</div>
//並未忽略 relative 元素的存在
seo
<div style="position: relative;top:10px">Im a relative element</div> <div>Im a default element</div>
//忽略了 relative 元素的移動
圖片
fixed
元素將會脫離正常的文檔流,因此它與 absolute
元素很類似,一樣會被周圍元素忽略,支持 top,bottom,left,right
屬性,但二者仍有很大不一樣。
首先,fixed
元素定位與它的父元素無任何關係,它永遠是相對最外層的 window
進行定位的。
第二,fixed
元素正如它的名字同樣,它是固定在屏幕的某個位置,它不會由於屏幕的滾動而消失。element
<div style="height:1000px"> <div style="position: absolute;">Im an absolute element</div> <div style="position: fixed;">Im a fixed element</div> <div>Im a default element</div> </div>
//如同 absolute,fixed元素也被周圍元素忽略
由於外層 div
高度超過一屏,因此如今咱們往下滾動屏幕。
//只有 fixed 元素未由於屏幕滾動而消失,由於它是「固定」的
爲何要在這裏提到 z-index
屬性呢?那是由於 z-index
屬性只對定位元素有效,即 position
值爲 absolute,relative,fixed
時纔有效。咱們首先了解下什麼叫 z-index
。
從上圖咱們不難發現 z-index
值表明的是元素的堆疊順序,值越高則顯示順序越優先。
<div style="position: absolute;z-index:1">Im an absolute element</div> <div style="position: fixed;z-index:2">Im a fixed element</div>
//fixed 元素 z-index 比 absoulute 元素高,因此顯示在前面
(我把背景色調爲非透明,這樣能夠看得更清楚),假如 z-index
值相同會出現什麼狀況呢?
<div style="position: absolute;z-index:1">Im an absolute element</div> <div style="position: fixed;z-index:1">Im a fixed element</div>
//z-index 值相同,仍然顯示爲 fixed 元素
因此咱們知道,當 z-index
值相同時,後加載的元素顯示優先。