CSS中Position 的用法詳解。


記得一年前,到一家公司面試的時候,問我position有哪幾個屬性,我憋半天才回答出2個,大家估計都清楚,就是我們經常用到的2個(relative,absolute)。

最近又用到了好多,深入研究了下。

一、語法:

position:static | relative | absolute | fixed

取值:
static :默認值,無特殊定位,對象遵循正常文檔流。top,right,bottom,left等屬性不會被應用,默認值。
relative:相對定位,對象遵循正常文檔流,但將依據top,right,bottom,left等屬性在正常文檔流中偏移位置。
absolute:絕對定位,對象脫離正常文檔流,使用top,right,bottom,left等屬性進行絕對定位。而其層疊通過z-index屬性定義。
fixed:固定定位,對象脫離正常文檔流,使用top,right,bottom,left等屬性以窗口為參考點進行定位,當出現滾動條時,對象不會隨着滾動。

 

二、四個屬性的詳細介紹:

1、static,默認值
說 到這里我們不得不提一下一個定義——文檔流,很多書對文檔流這個概念只是一筆帶過,沒有詳細解答,但我根據自己的經驗和理解對它進行了總結,文檔流其實就 是文檔的輸出順序,也就是我們通常看到的由左到右、由上而下的輸出形式,在網頁中每個元素都是按照這個順序進行排序和顯示的,而float和 position兩個屬性可以將元素從文檔流脫離出來顯示。

默認值就是讓元素繼續按照文檔流顯示,不作出任何改變。

2、relative,相對定位

相對定位一個最大特點是:自己通過定位跑開了還占用着原來的位置,不會讓給他周圍的諸如文本流之類的對象。相對定位也比較獨立,做什么事它自己說了算,要定位的時候,它是以自己本身所在位置偏移的(相對對象本身偏移)。本身位置變化了,而元素最初所占的物理空間依然還是存在,另外一點元素相對定位后並沒有影響其他相鄰的元素。

3、absolute,絕對定位

位置被設置為absolute后,被設置的元素會被定義到包含它的元素內的指定坐標(X坐標、Y坐標)。

比如:position:absolute;left:20px;top:80px; 這個容器始終位於距離瀏覽器左20px,距離瀏覽器上80px的這個位置。它不會隨着窗口大小變化,只是固定在一個特定的坐標軸上面;

4、固定位置,fixed

在理論上,被設置為fixed的元素會被定位於瀏覽器窗口的一個指定坐標,不論窗口是否滾動,它都會固定在這個位置。但是目前它在IE6中不被支持.

Ie6處理方法:

body{
    background-image:url(about:blank); /* for IE6 */
    background-attachment:fixed; /*必須*/
}

.demo{
    _position:absolute;
    _top:expression(documentElement.scrollTop + documentElement.clientHeight-this.offsetHeight);
}

總的例子html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>position</title>
<style type="text/css">
*{margin:0;padding:0;}
.clearfix:before,.clearfix:after {content:"";display:table;}
.clearfix:after {clear:both;overflow:hidden;}
.clearfix {zoom:1;}
.mgt20{margin-top:20px;}
.w1000{width:1000px;margin:0 auto;min-height:1900px;}

#demo{  
    position:relative;  
    border:1px solid #000;  
    margin-top:50px;
    top:-50px;  
    line-height:18px; 
} 
.static,.fixed,.absolute,.relative{  
    width:200px;      
}  
.relative{  
    position:relative;  
    left:150px;  
    top:-20px;  
    background-color:#ffe4e1;  
}
.static{   
    position:static; 
    background-color:#bbb;    
}  
.fixed{  
    position:fixed;  
    top:200px;
    left:50%;
    margin-left:-500px;
    background-color:#ffc0cb;
}  
.absolute{ 
    position:absolute;  
    right:10px;  
    top:10px;  
    background-color:#b0c4de;  
} 
</style>
</head>
<body>
<div class="w1000">
    <div class="mgt20 clearfix">
        <div id="demo" class="clearfix">  
            <div class="static">static: 默認值。無特殊定位,對象遵循HTML定位規則 </div>  
            <div class="absolute">absolute: 將對象從文檔流中拖出,使用left,right,top,bottom 等屬性相對於其最接近的一個最有定位設置的父對象進行絕對定位。如果不存在這樣的父對象,則依據body對象。而其層疊通過z-index屬性定義 </div>  
            <div class="fixed">fixed屬性的說明:fixed總是以body為定位時的對象,總是根據瀏覽器的窗口來進行元素的定位,通過"left"、 "top"、 "right"、"bottom" 屬性進行定位。</div>  
            <div class="relative">relative1:對象不可層疊,對象原來占有的位置保留,但將依據 left,right,top,bottom 等屬性在正常文檔流中偏移位置 </div> 
        </div> 
    </div>    
</div>
</body>
</html>

 

顯示:

 

三、position注意事項

1、當Position屬性值為Relative時對象原來占有的位置保留,其后面 的對象按原來文檔流仍然保持原來的位置Top的值表示對象相對原位置向下偏移的距離bottom的值表示對象相對原位置向上偏移的距離兩者同時存在時,只有Top起作用。left的值表示對象相對原位置向右偏移的距離right的值表示對象相對原位置向左偏移的距離兩者同時存在時,只有left起作用。

2、當Position屬性值為absolute時對象從文檔流中抽取出來,原占有的位置被后面的對象頂替上來Top的值表示對象上邊框與瀏覽器窗口頂部 的距離bottom的值表示對象下邊框與瀏覽器窗口底部的距離兩者同時存在時,只有Top起作用;如果兩者都未指定,則其頂端將與原文檔流位置一致,即垂 直保持位置不變。left的值表示對象左邊框與瀏覽器窗口左邊的距離right的值表示對象右邊框與瀏覽器窗口右邊的距離兩者同時存在時,只有left起 作用;如果兩者都未指定,則其左邊將與原文檔流位置一致,即水平保持位置不變。
在Position屬性值為absolute的同時,如果有一級父對象(無論是父對象還是祖父對象,或者再高的輩分,一樣)的Position屬性值為Relative時,則上述的相對瀏覽器窗口定位將會變成相對父對象定位,這對精確定位是很有幫助的。

 

五、positon 與 display
元素分為內聯元素和區塊元素兩類(當然也有其它的),在內聯元素中有個非常重要的常識,即內聯元素是不可以設置區塊元素所具有的樣式,例如:width | height。
relative : 原來是什么類型的依舊是什么類型。
absolute | fixed : 元素就被重置為了區塊元素,

例如:打算為span元素指定大小,並絕對定位

<span style="position:absolute; width:100px; height:50px;">span</span>這是完全正確的,
<span style="position:absolute; display:block; width:100px; height:100px;">span</span>,這里的display:block就是多余的了。

 

六、position 與 float
一個元素若設置了 position:absolute | fixed; 則該元素就不能設置float。這是一個常識性的知識點,因為這是兩個不同的流,一個是浮動流,另一個是“定位流”。
但是 relative 卻可以。因為它原本所占的空間仍然占據文檔流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM