1. 程式人生 > >CSS定位(position屬性)以及top和magin-top的區別

CSS定位(position屬性)以及top和magin-top的區別

CSS 定位 (Positioning) 屬性允許我們對元素進行定位。
CSS 定位和浮動:CSS 為定位和浮動提供了一些屬性,利用這些屬性,可以建立列式佈局,將佈局的一部分與另一部分重疊,還可以完成多年來通常需要使用多個表格才能完成的任務。
定位的基本思想很簡單,它允許我們定義元素框相對於其正常位置應該出現的位置,或者相對於父元素、另一個元素甚至瀏覽器視窗本身的位置。

CSS position 屬性可以選擇 4 種不同型別的定位:

static:預設定位,元素框正常生成。塊級元素生成一個矩形框,作為文件流的一部分,行內元素則會建立一個或多個行框,置於其父元素中——這種定位是預設的,一般沒什麼實際的作用。
relative:相對定位 ,不會脫離文件流,類似於static,按順序排列,一般設定也不會有什麼變化,可以通過margin-top/right/bottom/left

來改變框的位置。
absolute:絕對定位,這種定位脫離文件流,可以理解為跟其他的元素不再一個次元中,可以用top/right/bottom/left來控制位置,absolute是相對於最近祖先非static定位來定位的,如果說他的父級定位是預設的,那麼它就會繼續向上找父級的父級,直到找到非static定位為基準點。
fixed:固定定位,這種定位是相對與瀏覽器的視窗來定位,我們經常會看到網頁中右下角有個回頂部的標記,無論滑鼠滑輪怎麼滑動他都不會改變他的位置。

下面以具體程式碼效果為例進一步說明:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style>
 .div1{
        position: relative;
        width: 400px;
        height: 400px;
        border:2px solid red;
background-color:#CCFF99;
        margin:50px;
    }
    .div2{
        width: 200px;
        height: 200px;
        margin:50px;
        border:2px solid pink;
background-color:#CC9966;
    }
    .div3{
        position: absolute;
        top: 0px;
        left: 0px;
        width: 100px;
        height: 100px;
        border:2px solid purple;
background-color:#FF6633;
    }
</style>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無標題文件</title>
</head>


<body>


<div class="div1">
    <div class="div2">
     <div class="div3"></div>
    </div>
</div>
</body>
</html>

頁面結果如下:


上面的程式碼中,div1是相對定位,div2是預設定位,div3是絕對定位,而且div2是div3的父級,div2是div3的父級;圖中綠色為div1,咖啡色為div2,橘色為div3。由於div3的父級是div2,它是static定位(預設定位),所以div3會繼續向上找父級的父級—div1,而div1是relative定位(相對定位),所以div3是以div1的位置為基準點定位的。

如果設定div的position屬性為relative,則div3會直接以div2的位置為基準點定位,如下圖所示:


從上圖可以看出來,div3到了div2的左上角,可見其定位基準變成了div2。

在relative定位下top和margin-top的區別:一個div中設定了margin-top:50px; 那麼中間這個50px屬於盒子模型中的一部分;而設定了top:50px,則50px不屬於盒子模型的一部分。

綜上所述,top/right/bottom/left一般在absolutel定位中使用,在relative下也可以使用,但是在預設定位下是不起作用的。

參考部落格:http://blog.csdn.net/lxiang222/article/details/70340084