前端——CSS絕對定位、相對定位和文檔流

前言css

http://www.cnblogs.com/tim-li/archive/2012/07/09/2582618.html  html

 

  接觸html、和css時間也不短了,但每次用div+css佈局的時候內心仍是有點兒虛,有時候乾脆就直接用table算了,不少時候用div會出現些不可預料的問題,雖然花費必定時間可以解決,但總不是個事,因此今天特意探索了下css+div的絕對定位和相對定位和文檔流的關係。瀏覽器

 

文檔流的概念ide

    確切的說應該是文檔文檔流模型的機制,html的佈局機制就是用文檔流模型的,即塊元素(block)獨佔一行,內聯元素(inline)。不獨佔一行佈局

 

如塊級元素(block).net

<div>div1</div>
<div>div2</div>

效果以下3d

 

ok,那麼怎麼知道這不是由於沒有設置高和寬的樣式而出現的狀況呢,咱們聽鄧爺爺的話,實踐是檢驗真理的惟一標準htm

<div style=" width:100px; height:100px;">div1</div>
<div style=" width:100px; height:100px;">div2</div>

效果以下:額,沒坑你吧...blog

 

又如內聯元素(inline)圖片

<img src="Image/close.gif" alt="圖片" style=" height:100px; width:100px;"/>
<a href="http:">超連接1</a>
<a href="http:">超連接2</a>

效果以下:能夠看到內聯元素後跟內聯元素不會另起一行

 

咱們再試下inline 後加 block

<img src="Image/close.gif" alt="圖片" style=" height:100px; width:100px;"/>
<a href="http:">超連接1</a>
<a href="http:">超連接2</a>
<div style=" width:100px; height:100px;">div1</div>

效果以下:能夠看到div1(block)是另起一行獨佔的

 

 

相對定位 position:relative

    故名思意,相對定位就應該是相對於一個東西來定位,而這個東西是什麼呢?其實這個東西不是什麼,就是元素本身自己,用left right top b0ttom進行定位後,元素會根據原來的位置進行移動,但因爲position:relative這個屬性並無脫離文檔流的,因此元素自己所佔的位置會保留。

下面來作個實驗,一看你就懂了- -

<div style=" width:100px; height:100px;">div1</div>
<div style=" width:100px; height:100px;">div2</div>
<div style=" width:100px; height:100px;">div3</div>

效果以下:這是沒有加入position:relative文檔流的默認排法

 

咱們給div2加position:relative 並用top:-20px;left:50px進行相對移動

<div style=" width:100px; height:100px;">div1</div>
<div style=" width:100px; height:100px; position:relative; top:-20px; left:50px;">div2</div>
<div style=" width:100px; height:100px;">div3</div>

效果以下:額,爲了給你們看到效果還有省了ps的勁直接截了ide的圖...但我保證在瀏覽器裏他也是這麼排的。咱們能夠看到藍色邊框就是div2原來的位置,黑色邊框就是經過position:relative相對於原來的位置左移50px; 上移20px獲得的,並且咱們看以看到,div3並無由於div2的上移而上移了,緣由就是position:relative這個屬性是沒有脫離文檔流的,因此元素自己所佔的位置會保留。

絕對定位 position:absolute

    好吧終於有點戲肉了,文檔流那複雜的玩意咱們先不理,所謂絕對定位,其實也要找個東西來相對來絕對的,而這個東西就是元素的第一個有position,且positon不能爲static的祖先元素,是否是有點拗口,換個說法吧,就是這個小鬼(element)的定位能夠是他的老爸,他的爺爺,他的太公....(祖先要素)中並且第一個是是有錢的(position:absolute)或者是當官的(position:relative),就是不能是個程序猿(position:static 或者沒有設position)的。並且值得注意的是position:absolute這個屬性是脫離文檔流的,因此從新定位後元素是不會佔着原來的位置的

仍是跟着程序來吧- -

複製代碼

<div style=" border:1px solid Red; padding:10px; width: 340px; height: 400px"">
    紅色:太公
        <div style="border:1px solid Green; padding:10px; width: 320px; height: 360px"">
        綠色:爺爺
            <div style="border:1px solid Yellow; padding:10px; width: 300px; height: 320px; ">
            黃色:老爸
                <div style="width: 100px; height: 100px;">
                    div1</div>
                <div style="width: 100px; height: 100px;">
                    div2</div>
                <div style="width: 100px; height: 100px;">
                    div3</div>
            </div>
        </div>
    </div>

複製代碼

效果以下:首先給div1 div2 div3三個祖先div 黃色的老爸, 綠色的爺爺, 紅色的太公,暫時對他們都不設position屬性

 

好吧,如今給老爸div設position:relative(喲!當官的)給div2設position:absolute;left:120px; top:100px;

複製代碼

<div style=" border:1px solid Red; padding:10px; width: 340px; height: 400px"">
    紅色:太公
        <div style="border:1px solid Green; padding:10px; width: 320px; height: 360px"">
        綠色:爺爺
            <div style="border:1px solid Yellow; padding:10px; width: 300px; height: 320px; position:relative;">
            黃色:老爸
                <div style="width: 100px; height: 100px;">
                    div1</div>
                <div style="width: 100px; height: 100px; position:absolute; left:120px; top:100px;">
                    div2</div>
                <div style="width: 100px; height: 100px;">
                    div3</div>
            </div>
        </div>
    </div>

複製代碼

效果以下:能夠從藍色線看出,div2以黃色(ide的藍線和黃色混在一塊兒變色了)div爲參照距離老爸左邊120px 上邊100px並且有於position:absolute是脫離文檔流的因此div2原來的位置不能保留div3向上填充

 

 咱們再用他爺爺來試試

複製代碼

<div style=" border:1px solid Red; padding:10px; width: 340px; height: 400px">
    紅色:太公
        <div style="border:1px solid Green; padding:10px; width: 320px; height: 360px; position:relative;">
        綠色:爺爺
            <div style="border:1px solid Yellow; padding:10px; width: 300px; height: 320px; ">
            黃色:老爸
                <div style="width: 100px; height: 100px;">
                    div1</div>
                <div style="width: 100px; height: 100px; position:absolute; left:120px; top:100px;">
                    div2</div>
                <div style="width: 100px; height: 100px;">
                    div3</div>
            </div>
        </div>
    </div>

複製代碼

效果以下:仍是div2仍是 position:absolute;left:120px;top:100px,能夠衝藍色線看出此次是以綠色爺爺爲參照物作絕對定位的,並且div2一樣脫離了文檔流

至於他太公,一把年紀了,咱們就放過他吧- -

先到這把,在下愚見,若有錯誤請及時指出。有空再總結下margin佈局和float佈局

相關文章
相關標籤/搜索