div+css相对定位和绝对定位
今天突然發現自己在布局的時候思路很亂,于是毅然決然的想要重新的理一下自己的布局思路,今天就先從定位開始吧~
?
絕對定位(absolute):將被賦予此定位方法的對象從文檔流中拖出,如果對象的父級沒有設置定位屬性,則依據body對象左上角作為參考進行定位。絕對定位對象可層疊,層疊順序可通過z-index屬性控制,z-index值為無單位的整數,大的在最上面,可以有負值(目前負值FF不支持)。
同時z-index僅能在定位元素上奏效!!!
相對定位(relative):對象不可層疊,依據left,right,top,bottom等屬性在正常文檔流中偏移自身位置。同樣可以用z-index分層設計。
?
2.定位的形象解釋
我先來架設一個虛擬的場景:有一個矩形的房間,里面還有一個水桶裝了些水,水里還浸泡著一個西瓜,這個房間半空中還有不少的鉤子用于掛東西用。現在我把網頁元素與上面物件對應上,那么房間就是一個網頁,水桶是網頁中的一個板塊,桶中的水就是文本流,西瓜就是將要被定位的對象。
(1)貢獻的絕對定位(absolute)
對照前面解釋,如果西瓜被賦予絕對定位,那么就等于把西瓜從水中撈起來掛在半空中的鉤子上,水桶中西瓜原來占用的空間水會自動填補它(絕對定位對象會讓出自己原先占用位置,所以說它是貢獻的)。此時如果之前沒有對水桶進行定位設定,那么被拿起的西瓜位置不會再受水桶位置影響,水桶怎么移動,西瓜還是掛在原來位置,至于西瓜要怎放,則以房間左上角(body左上角)為準,用left,right,top,bottom值來定位。
但是如果水桶也給出了定位設置(通常是相對定位,下面有講到這一實用技巧),此時西瓜的擺放就沒有那么自由了,盡管此時西瓜被拿起來了不會影響水桶中的水(文本流),但它還是要聽桶的話,桶會告訴西瓜“你可以活動,但應該在我的范圍內走動,比方說我要你在我左上方1米處,你就要跟死這一點,我走你也要跟著走”,如果桶中有很多個西瓜,可以全部拿出來吊到半空中,它們將被安排在不同高度的空間(層),所以在房頂垂直往下看,有可能看到不同西瓜層疊在一起的情況(這個所謂的高度在網頁中是不存在的,就像FLASH動畫中的不同層上安排了元素,但它們在看時不會有深度感覺)。可見絕對定位的對象參考目標是它的父級,專業稱之為包含塊。
(2)自私的相對定位(relative)
相對定位一個最大特點是:自己通過定位跑開了還占用著原來的位置,不會讓給他周圍的諸如文本流之類的對象。相對定位也比較獨立,做什么事它自己說了算,要定位的時候,它是以自己本身所在位置偏移的(相對對象本身偏移)。再拿前邊作比如來解,那么此時西瓜似乎是有魔法的,如果西瓜通過相對定位在水桶中偏移了你會看到一個現實生活中不存在的現象:水中有一個地方水凹下去了,周圍的水不能填補它,西瓜看起來在旁邊,如果攪動一下桶中的水,那個凹的位置會發現改變(文本流對相對定位對象還存在影響),但是凹處到西瓜出現的距離始終保持一致。可見文本流與它之間還會互相影響,因為對象并沒有真正脫離文本流,就像有兩個人在同一層樓水平移動的過程中會有碰頭的機會。
(3)總結兩種定位的特征
絕對定位就像是把不同對象安排到了一棟高樓的不同樓層(一般指不是第一層,我們這里理解為文本流就放在首層),它們互不影響,但是它們怎么移動與你樓的地基和面積(父級)有關。相對定位指對象還是在首層樓與文本流一起存放,它們之間肯定存在影響。
?
?
層級關系為:
<div ——————————— position:relative; 不是最近的祖先定位元素,不是參照物
<div—————————-沒有設置為定位元素,不是參照物
<div———————- position:relative 參照物
<div box1
<div box2 ——–position:absolute; top:50px; left:120px;
<div box3
效果圖:
為改變參照物(橘色框)后的效果
層級關系為:
<div ——————————— position:relative;最近的祖先定位元素,參照物
<div—————————-沒有設置為定位元素,不是參照物
<div———————-沒有設置為定位元素,不是參照物
<div box1
<div box2 ——–position:absolute; top:50px; left:120px;
<div box3
效果圖:
參照物為最頂級的元素情況。
層級關系為:
<div ———————————沒有設置為定位元素,不是參照物
<div—————————-沒有設置為定位元素,不是參照物
<div———————-沒有設置為定位元素,不是參照物
<div box1
<div box2 ——–position:absolute; top:50px; left:120px;
<div box3
效果圖:
?
僅使用margin屬性布局絕對定位元素的情況
此情況,margin-bottom 和margin-right的值不再對文檔流中的元素產生影響,因為該元素已經脫離了文檔流。另外,不管它的祖先元素有沒有定位,都是以文檔流中原來所在的位置上偏移參照物。??
圖9中,使用margin屬性布局相對定位元素。
層級關系為:
<div ——————————— position:relative; 不是參照物
<div—————————-沒有設置為定位元素,不是參照物
<div———————-沒有設置為定位元素,不是參照物
<div box1
<div box2 ——–position:absolute; margin-top:50px; margin-left:120px;
<div box3
效果圖:
IE6的情況下,box2前面沒有兄弟節點,則margin-left的值會出現雙倍邊距,見圖10。
層級關系為:
<div ——————————— position:relative; 不是參照物
<div—————————-沒有設置為定位元素,不是參照物
<div———————-沒有設置為定位元素,不是參照物
<div box1
<div box2 ——–position:absolute; margin-top:50px; margin-left:60px;
<div box3
效果圖:
轉載于:https://www.cnblogs.com/hr2014/p/3920569.html
總結
以上是生活随笔為你收集整理的div+css相对定位和绝对定位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb介绍
- 下一篇: django学习之Model(四)Mak