CSS中position屬性( absolute | relative | static | fixed )詳解

原文鏈接

盒子模型

我們先來看看CSS3 Api中對position屬性的相關(guān)定義:

static:無特殊定位鳍侣,對象遵循正常文檔流。top,right虐杯,bottom,left等屬性不會被應(yīng)用昧港。

relative:對象遵循正常文檔流擎椰,但將依據(jù)top,right创肥,bottom达舒,left等屬性在正常文檔流中偏移位置。而其層疊通過z-index屬性定義叹侄。

?absolute:對象脫離正常文檔流巩搏,使用top,right趾代,bottom贯底,left等屬性進(jìn)行絕對定位。而其層疊通過z-index屬性定義撒强。

?fixed:對象脫離正常文檔流禽捆,使用top,right飘哨,bottom胚想,left等屬性以窗口為參考點進(jìn)行定位,當(dāng)出現(xiàn)滾動條時芽隆,對象不會隨著滾動浊服。而其層疊通過z-index屬性定義。

怎么樣胚吁,是不是還是很迷糊~~ 沒關(guān)系牙躺,下面就從幾個基礎(chǔ)概念一一給大家詳述:

什么是文檔流?

????? 將窗體自上而下分成一行行, 并在每行中按從左至右的順序排放元素,即為文檔流腕扶。

????? 只有三種情況會使得元素脫離文檔流述呐,分別是:浮動、絕對定位和相對定位蕉毯。

靜態(tài)定位(static) :

????? static,無特殊定位思犁,它是html元素默認(rèn)的定位方式代虾,即我們不設(shè)定元素的position屬性時默認(rèn)的position值就是static,它遵循正常的文檔流對象激蹲,對象占用文檔空間棉磨,該定位方式下,top学辱、right乘瓤、bottom环形、left、z-index等屬性是無效的衙傀。

相對定位(relative) :

????? relative定位抬吟,又稱為相對定位,從字面上來解析统抬,我們就可以看出該屬性的主要特性:相對火本。但是它相對的又是相對于什么地方而言的呢?這個是個重點聪建,也是最讓我迷糊的一個地方钙畔,現(xiàn)在讓我們來做個測試,我想大家都會明白的:

(1) 初始未定位

/******初始*********/

<style type="text/css">

? ? #first { width: 200px; height: 100px; border: 1px solid red; }

? ? #second{ width: 200px; height: 100px; border: 1px solid blue;}

</style>

<body>

? <div id="first"> first</div>

? <div id="second">second</div>

</body>

?初始原圖:


(2) 我們修改first元素的position屬性:

<style type="text/css">

? ? #first{ width: 200px; height: 100px; border: 1px solid red; position: relative; top: 20px; left: 20px;} /*add position*/

? ? #second{width: 200px; height: 100px; border: 1px solid blue;}

</style>

? 相對偏移20px后:


-- >> 虛線是初始的位置空間

????? 現(xiàn)在看明白了吧金麸,相對定位相對的是它原本在文檔流中的位置而進(jìn)行的偏移擎析,而我們也知道relative定位也是遵循正常的文檔流,它沒有脫離文檔流挥下,但是它的top/left/right/bottom屬性是生效的揍魂,可以說它是static到absoult的一個中間過渡屬性,最重要的是它還占有文檔空間见秽,而且占據(jù)的文檔空間不會隨 top / right / left / bottom 等屬性的偏移而發(fā)生變動愉烙,也就是說它后面的元素是依據(jù)虛線位置( top / left / right / bottom 等屬性生效之前)進(jìn)行的定位,這點一定要理解解取。

???? 那好步责,我們知道了top / right / left / bottom 屬性是不會對relative定位的元素所占據(jù)的文檔空間產(chǎn)生偏移,那么margin / padding會讓該文檔空間產(chǎn)生偏移嗎禀苦?答案是肯定的蔓肯,我們一起來做個試驗吧:

(3) ? 添加margin屬性:

<style type="text/css">

? ? #first{width: 200px;height: 100px;border: 1px solid red;position: relative;top: 20px;left: 20px;margin: 20px;} /* add margin*/

? ? #second{width: 200px;height:100px;border: 1px solid blue;}

</style>

? 設(shè)置margin:20px后:

???? 對比一下,是不是就很清晰了振乏,我們先將first元素外邊距設(shè)為20px蔗包,那么second元素就得向下偏移40px,所以margin是占據(jù)文檔空間慧邮!同理调限,大家可以自己動手測下padding的效果吧!

絕對定位(absoulte) :

?? ? ? absoulte定位误澳,也稱為絕對定位耻矮,雖然它的名字號曰“絕對”,但是它的功能卻更接近于"相對"一詞忆谓,為什么這么講呢裆装?原來,使用absoult定位的元素脫離文檔流后,就只能根據(jù)祖先類元素(父類以上)進(jìn)行定位哨免,而這個祖先類還必須是以postion非static方式定位的茎活, 舉個例子,a元素使用absoulte定位琢唾,它會從父類開始找起载荔,尋找以position非static方式定位的祖先類元素(注意,一定要是直系祖先才算哦~)慧耍,直到<html>標(biāo)簽為止身辨,這里還需要注意的是,relative和static方式在最外層時是以<body>標(biāo)簽為定位原點的芍碧,而absoulte方式在無父級是position非static定位時是以<html>作為原點定位煌珊。<html>和<body>元素相差9px左右。我們來看下效果:

(4) 添加absoulte屬性:

<html>

<style type="text/css">

? ? html{border:1px dashed green;}

? ? body{border:1px dashed? purple;}

? ? #first{ width: 200px;height: 100px;border: 1px solid red;position: relative;}

? ? #second{ width: 200px;height: 100px;border: 1px solid blue;position: absolute;top :0;left : 0;}

</style>

<body>

? <div id="first">relative</div>

? <div id="second">absoult</div>

</body>

</html>

效果圖:


???? ?? 哈哈泌豆,看了上面的代碼后定庵,細(xì)心的朋友肯定要問了,為什么absoulte定位要加 top:0; left:0; 屬性踪危,這不是多此一舉呢蔬浙?

?????? 其實加上這兩個屬性是完全必要的,因為我們?nèi)绻褂胊bsoulte或fixed定位的話贞远,必須指定 left畴博、right、 top蓝仲、 bottom 屬性中的至少一個俱病,否則left/right/top/bottom屬性會使用它們的默認(rèn)值 auto ,這將導(dǎo)致對象遵從正常的HTML布局規(guī)則袱结,在前一個對象之后立即被呈遞亮隙,簡單講就是都變成relative,會占用文檔空間垢夹,這點非常重要溢吻,很多人使用absolute定位后發(fā)現(xiàn)沒有脫離文檔流就是這個原因,這里要特別注意~~~

少了left/right/top/bottom屬性不行果元,那如果我們多設(shè)了呢促王?例如,我們同時設(shè)置了top和bottom的屬性值而晒,那元素又該往哪偏移好呢蝇狼?記住下面的規(guī)則:

如果top和bottom一同存在的話,那么只有top生效欣硼。

如果left和right一同存在的話,那么只有l(wèi)eft生效。

既然absoulte是根據(jù)祖先類中的position非static元素進(jìn)行定位的诈胜,那么祖先類中的margin/padding會不會對position產(chǎn)生影響呢豹障?看個例子先:

(5) 在absoulte定位中添加margin / padding屬性:

#first{width: 200px;height: 100px;border: 1px solid red;position: relative;margin:40px;padding:40px;}

#second{width: 200px;height:100px;border: 1px solid blue;position: absolute;top:20px;left:20px;}


<div id="first">first

? ? <div id="second">second</div>

</div>

效果圖:



????? 看懂了,祖先類的margin會讓子類的absoulte跟著偏移焦匈,而padding卻不會讓子類的absoulte發(fā)生偏移血公。總結(jié)一下缓熟,就是absoulte是根據(jù)祖先類的border進(jìn)行的定位累魔。

Note : 絕對(absolute)定位對象在可視區(qū)域之外會導(dǎo)致滾動條出現(xiàn)。而放置相對(relative)定位對象在可視區(qū)域之外够滑,滾動條不會出現(xiàn)垦写。

固定定位(fixed):

???? ? fixed定位,又稱為固定定位彰触,它和absoult定位一樣梯投,都脫離了文檔流,并且能夠根據(jù)top况毅、right分蓖、left、bottom屬性進(jìn)行定位尔许,但不同的是fixed是根據(jù)窗口為原點進(jìn)行偏移定位的么鹤,也就是說它不會根據(jù)滾動條的滾動而進(jìn)行偏移。

z-index屬性:

?????? z-index味廊,又稱為對象的層疊順序蒸甜,它用一個整數(shù)來定義堆疊的層次,整數(shù)值越大毡们,則被層疊在越上面迅皇,當(dāng)然這是指同級元素間的堆疊,如果兩個對象的此屬性具有同樣的值衙熔,那么將依據(jù)它們在HTML文檔中流的順序?qū)盈B登颓,寫在后面的將會覆蓋前面的。需要注意的是红氯,父子關(guān)系是無法用z-index來設(shè)定上下關(guān)系的框咙,一定是子級在上父級在下。

Note:使用static 定位或無position定位的元素z-index屬性是無效的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痢甘,一起剝皮案震驚了整個濱河市喇嘱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌塞栅,老刑警劉巖者铜,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡作烟,警方通過查閱死者的電腦和手機愉粤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拿撩,“玉大人衣厘,你說我怎么就攤上這事⊙购悖” “怎么了影暴?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長探赫。 經(jīng)常有香客問我型宙,道長,這世上最難降的妖魔是什么期吓? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任早歇,我火速辦了婚禮,結(jié)果婚禮上讨勤,老公的妹妹穿的比我還像新娘箭跳。我一直安慰自己,他們只是感情好潭千,可當(dāng)我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布谱姓。 她就那樣靜靜地躺著,像睡著了一般刨晴。 火紅的嫁衣襯著肌膚如雪屉来。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天狈癞,我揣著相機與錄音茄靠,去河邊找鬼。 笑死蝶桶,一個胖子當(dāng)著我的面吹牛慨绳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播真竖,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼脐雪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恢共?” 一聲冷哼從身側(cè)響起战秋,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎讨韭,沒想到半個月后脂信,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體癣蟋,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年狰闪,在試婚紗的時候發(fā)現(xiàn)自己被綠了梢薪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡尝哆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甜攀,到底是詐尸還是另有隱情秋泄,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布规阀,位于F島的核電站恒序,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏谁撼。R本人自食惡果不足惜歧胁,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厉碟。 院中可真熱鬧喊巍,春花似錦、人聲如沸箍鼓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽款咖。三九已至何暮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铐殃,已是汗流浹背海洼。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留富腊,地道東北人坏逢。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蟹肘,于是被迫代替她去往敵國和親词疼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容