通過案例理解position:relative和position:absolute

w3school過了HTML的知識之后,覺得要自己單純地去啃知識點有點枯燥呆盖,然后自己也很容易忘記呢灶,所以便找具體的網(wǎng)站練手便補上不懂的知識點曾雕。position:relative和postion:absolute困擾了我快一個星期之久和措,網(wǎng)上找到的資料魚龍混雜庄呈,剛確定“這樣”的理解之后,看另一份資料派阱,發(fā)現(xiàn)“這樣”理解是錯了诬留,就這樣不斷更正,并記錄下來贫母,最終整理出這份文兑,以備參閱。

若有錯誤腺劣,請指正绿贞。

下面的結(jié)果都是基于firefox38版本來測試的。

position:relative相對定位

1. 如何定位橘原?
每個元素在頁面的普通流中會“占有”一個位置籍铁,這個位置可以理解為默認值,而相對定位就是將元素偏離元素的默認位置趾断,但普通流中依然保持著原有的默認位置拒名。(在父級節(jié)點的content-box區(qū)定位,父級節(jié)點有文字的話芋酌,元素的默認位置則是緊隨文字)
2. 不會改變行內(nèi)元素的display屬性增显。
3. 并沒有脫離普通流,只是視覺上發(fā)生的偏移脐帝。
代碼——

<body style='margin:0;padding:0;background:#BDD7EE;color:white;'>
<div class='contain' style='margin:10px;border:10px solid white;width:300px;background:#F8CBAD;padding:10px 0 0 10px;font-size:20px;font-weight:bold;'>
  <div class='one' style='width:50px;height:50px;background-color:#FFE699;top:-10px;left:0px;'></div>
  <div class='two' style='height:50px;color:#fff;background-color:#C5E0B4;'>position:relative定位測試</div>
</div>
</body>

顯示——

給子元素one的style加上position:relative;后顯示——


給父級元素contain的style加上文字后顯示——


將one由div節(jié)點改為span節(jié)點同云,并加入文字“你好”之后顯示——

<body style='margin:0;padding:0;background:#BDD7EE;color:white;'>
<div class='contain' style='margin:10px;border:10px solid white;width:300px;background:#F8CBAD;padding:10px 0 0 10px;font-size:20px;font-weight:bold;'>如果父級節(jié)點有文字的話...
  <span class='one' style='width:50px;height:50px;background-color:#FFE699;position:relative;top:-10px;left:0px;'>你好</span>
  <div class='two' style='height:50px;color:#fff;background-color:#C5E0B4;'>position:relative定位測試</div>
</div>
</body>

position:absolute絕對定位

1. 如何定位浮動?

  • 設(shè)置了TRBL
    相對最近的設(shè)定了position:relative/absolute的父(祖先)節(jié)點的padding-box的區(qū)進行定位(忽略文字)腮恩,找不到符合條件的父(祖先)節(jié)點梢杭,則相對瀏覽器窗口進行定位。
  • 沒有設(shè)置了TRBL
    則默認浮動秸滴,默認浮動在父級節(jié)點的content-box區(qū)武契。

2. 不管是塊級元素還是行內(nèi)元素,應(yīng)用了position:absolute之后荡含,display為block:

  • 可以設(shè)置width和height
  • 沒有設(shè)置的話咒唆,width默認為auto

3. 脫離文檔流,容器(父)元素將得不到脫離普通流的子元素高度

代碼——

<body style='margin:10px;width:300px;color:white;background-color:#BDD7EE;'>
<div style='background-color:#F8CBAD;padding-top:10px;'>祖先元素
  <div style='background-color:#FFE699;border:10px solid white;padding-top:10px;'>父級元素
    <div style='background-color:#C5E0B4;'>子元素</div>
  </div>
</div>
</body>

顯示——


給子元素的style加上position:absolute;top:0px;left:0px;后顯示——


給子元素的style加上position:absolute;top:0px;后顯示——


注釋:應(yīng)用了position:absolute之后之設(shè)置了top释液,所以子元素的top緊貼瀏覽器窗口的top(距離為0px)全释,因為沒有設(shè)置left,所以子元素左邊就默認父級元素content-box區(qū)的左側(cè)進行定位(沒應(yīng)用position:absolute之前左側(cè)該在哪個位置就在那個位置)
給子元素的style加上position:absolute;后顯示——


案例:理解應(yīng)用了position:absolute的元素沒有設(shè)置TRBL的話误债,則默認浮動在父級節(jié)點的content-box區(qū)

用一句通俗易懂的話來說就是浸船,它該在哪個位置就在哪個位置妄迁,只不過不占位而已。
先理解下上面示例代碼的顯示圖李命,以及給自己元素加上position:absolute后的顯示圖登淘。


給子元素的樣式加上:display:inline;我們看看如果子元素是內(nèi)聯(lián)元素的話會如何顯示。


假如有兩個同級塊級元素封字,看看第一個子元素和第二個子元素分別應(yīng)用position:absolute后的效果如何黔州。

<div style='background-color:#F8CBAD;padding-top:10px;'>祖先元素
  <div style='background-color:#FFE699;border:10px solid white;padding-top:10px;'>父級元素
    <div style='background-color:#62C292;'>子元素(上)</div>
      <div style='background-color:#C5E0B4;'>子元素(下)</div>
  </div>
</div>

如果這兩個同級塊級元素都應(yīng)用了position:absolute;這兩個元素會進行重疊,子元素(下)顯示在前面阔籽,那是因為默認代碼靠后的元素的z-index比較大流妻。


上面的案例中,將第二個子級元素換為內(nèi)聯(lián)元素笆制,子元素(下)的起點位置并沒有改變绅这。


試試給代碼中的第一個元素的style加上display:inline;看看上面的子元素是內(nèi)聯(lián)元素的話會如何顯示。

<div style='background-color:#F8CBAD;padding-top:10px;'>祖先元素
  <div style='background-color:#FFE699;border:10px solid white;padding-top:10px;'>父級元素
    <div style='background-color:#62C292;display:inline;'>子元素(上)</div>
      <div style='background-color:#C5E0B4;'>子元素(下)</div>
  </div>
</div>

現(xiàn)在調(diào)換下應(yīng)用position:absolute的位置
代碼:

<div style='background-color:#F8CBAD;padding-top:10px;'>祖先元素
  <div style='background-color:#FFE699;border:10px solid white;padding-top:10px;'>父級元素
    <div style='background-color:#C5E0B4;'>子元素(上)</div>
    <div style='background-color:#62C292;'>子元素(下)</div>
  </div>
</div>

第一個子元素是內(nèi)聯(lián)元素的話——

<div style='background-color:#F8CBAD;padding-top:10px;'>祖先元素
  <div style='background-color:#FFE699;border:10px solid white;padding-top:10px;'>父級元素
    <div style='background-color:#C5E0B4;display:inline;'>子元素(上)</div>
    <div style='background-color:#62C292;'>子元素(下)</div>
  </div>
</div>

綜上:不管是塊級元素還是內(nèi)聯(lián)元素應(yīng)用position:absolute并且不設(shè)置TRBL项贺,它都會默認在父級元素的content-box區(qū)浮動君躺。原來的起點位置也是應(yīng)用絕對定位后的起點位置,只不過如果應(yīng)用了position:absolute的內(nèi)聯(lián)元素左邊也有內(nèi)聯(lián)元素的話开缎,它的起點位置會變得更靠前棕叫,直到緊挨左邊內(nèi)聯(lián)元素的邊界。

綜合案例:看看position:relative和position:absolute的綜合效果

沿用position:absolute的案例代碼——

<body style='margin:10px;width:300px;color:white;background-color:#BDD7EE;'>
<div style='background-color:#F8CBAD;padding-top:10px;'>祖先元素
  <div style='background-color:#FFE699;border:10px solid white;padding-top:10px;'>父級元素
    <div style='background-color:#C5E0B4;'>子元素</div>
  </div>
</div>
</body>

在上面代碼的基礎(chǔ)上分別應(yīng)用以下的定位后看看效果奕删,并理解俺泣。


案例診斷:

  • 給祖先div加上"position:relative;"以及給子元素加上
    "position:absolute;top:0px;left:0px;"


  • 給父級div加上"position:relative;"以及給子元素加上
    "position:absolute;top:0px;left:0px;"


  • 給祖先和父級div加上"position:relative;"以及給子元素加上
    "position:absolute;top:0px;left:0px;"


  • 給祖先div加上"position:absolute;"以及給子元素加上
    "position:absolute;top:0px;left:0px;"


  • 給父級div加上"position:absolute;"以及給子元素加上
    "position:absolute;top:0px;left:0px;"


  • 給祖先和父級div加上"position:absolute;"以及給子元素加上
    "position:absolute;top:0px;left:0px;"


應(yīng)用:消除環(huán)繞浮動元素的影響

父級,position:relative(不設(shè)TRBL)
子級完残,第一個div的float:left伏钠;第二個div的position:absolute(不設(shè)TRBL)
因為第二個子級div元素默認會在父級元素的content-box區(qū)浮動,它可以消除上一個同級子級div元素的環(huán)繞浮動影響谨设。
案例代碼——

<div class='contain' style='margin:10px;width:300px;background:#F8CBAD;padding:10px 0 10px;color:white;'>
  <div class='one' style='width:30px;height:30px;background-color:#FFE699;float:left;'></div>
  <div class='two' style='color:#fff;background-color:#C5E0B4;'>position:absolute消除浮動環(huán)繞的影響測試</div>
</div>

顯示——



給父級元素加上position:relative熟掂,給第二個子級元素加上position:absolute后,顯示——



我們看到扎拣,確實是消除了環(huán)繞浮動元素環(huán)繞的影響赴肚,position:absolute的優(yōu)先級高,所以float元素被遮住了二蓝,并不是消失了誉券。另外看到contain元素的高度不受子元素的影響了,因為它們都脫離文檔流了刊愚。

參考顏色

修改記錄

  • 2016.12.23增補案例理解默認浮動
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踊跟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鸥诽,更是在濱河造成了極大的恐慌商玫,老刑警劉巖箕憾,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拳昌,居然都是意外死亡厕九,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門地回,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人俊鱼,你說我怎么就攤上這事刻像。” “怎么了并闲?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵细睡,是天一觀的道長。 經(jīng)常有香客問我帝火,道長溜徙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任犀填,我火速辦了婚禮蠢壹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘九巡。我一直安慰自己图贸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布冕广。 她就那樣靜靜地躺著疏日,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撒汉。 梳的紋絲不亂的頭發(fā)上沟优,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音睬辐,去河邊找鬼挠阁。 笑死,一個胖子當(dāng)著我的面吹牛溉委,可吹牛的內(nèi)容都是我干的鹃唯。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼瓣喊,長吁一口氣:“原來是場噩夢啊……” “哼坡慌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起藻三,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤洪橘,失蹤者是張志新(化名)和其女友劉穎跪者,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熄求,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡渣玲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了弟晚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忘衍。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖卿城,靈堂內(nèi)的尸體忽然破棺而出枚钓,到底是詐尸還是另有隱情,我是刑警寧澤瑟押,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布搀捷,位于F島的核電站,受9級特大地震影響多望,放射性物質(zhì)發(fā)生泄漏嫩舟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一怀偷、第九天 我趴在偏房一處隱蔽的房頂上張望家厌。 院中可真熱鬧,春花似錦枢纠、人聲如沸像街。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽镰绎。三九已至,卻和暖如春木西,著一層夾襖步出監(jiān)牢的瞬間畴栖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工八千, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吗讶,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓恋捆,卻偏偏與公主長得像照皆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沸停,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案膜毁? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J的外補...
    _Yfling閱讀 13,737評論 1 92
  • 深入理解傅里葉變換Mar 12, 2017 這原本是我在知乎上對傅立葉變換、拉普拉斯變換、Z變換的聯(lián)系瘟滨?為什么要進...
    價值趨勢技術(shù)派閱讀 5,742評論 2 2
  • 為div設(shè)置樣式 背景 顏色背景 圓角背景 ie支持不是很好 邊框背景 陰影背景 ie支持不是很好 圓形背景...
    Longwide閱讀 399評論 0 1
  • 簡約且低飽和度的色調(diào)候醒,是深受人們喜愛的家裝風(fēng)格 2018年室內(nèi)設(shè)計流行趨勢的報告中,簡約柔和風(fēng)在未來依舊流行 因為...
    默lang閱讀 335評論 0 0