1. 程式人生 > >慕課網學習筆記----《網頁佈局基礎》—絕對定位佈局

慕課網學習筆記----《網頁佈局基礎》—絕對定位佈局

絕對定位佈局

通過設定position屬性實現,能夠實現橫向多列布局及較為複雜的定位

擁有3種定位形式:

  1. 靜態定位
  2. 相對定位
  3. 絕對定位

可設定4個屬性值:

  1. static 靜態定位
  2. relative 相對定位
  3. absolute 絕對定位
  4. fixed 固定定位
  • absolute和fixed都屬於絕對定位形式
  • 靜態定位是元素沒有設定position定位的預設狀態,元素還處於標準文件流中

相對定位

特點:

  1. 相對於自身原有位置進行偏移
  2. 相對定位的元素仍處於標準文件流中,會佔據標準文件流的空間
    (元素仍然保持其未定位前的形狀,它原本所佔的空間仍保留)
  3. 隨即擁有偏移屬性和z-index屬性
    (元素仍然保持其未定位前的形狀,移動元素會導致它覆蓋其他框)
<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="utf-8">
    <title>絕對定位佈局</title>
    <style type="text/css">
        *{
            margin:0;
            padding:0;
        }
        .div1{
            background-color
: red
; height:130px; }
.div2{ background-color: blue; height:150px; position:relative; top:50px; left:20px; } .div3{ background-color: green; height:130px; }
</style
>
</head> <body> <div class="div1"></div> <div class="div2"></div> <div class="div3"></div> </body> </html>

效果如下圖:
這裡寫圖片描述

這裡寫圖片描述

藍塊被設定相對定位後,相對自身原有位置進行偏移,原本所佔的空間仍保留,並且瀏覽器會出現滑塊。

絕對定位

特點:

  1. 相對於其包含塊進行偏移
    (包含塊可能是文件中的另一個元素或者是初始包含塊)
  2. 脫離標準文件流,不佔據空間
    (原先在標準文件流中所佔的空間會關閉,好像該元素原來不存在)
  3. 隨即擁有偏移屬性和z-index屬性
    (不論原來它在正常流中生成何種型別的框,元素定位後生成一個塊級框)

相對定位和絕對定位在標準文件流上的區別:

  1. 相對定位元素仍處於標準文件流中,佔據空間
  2. 絕對定位元素脫離標準文件流,不佔據空間

未設定絕對定位時:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="utf-8">
    <title>圖片自適應</title>
    <style type="text/css">
    *{
        margin:0;
        padding: 0;
    }
    .div1{
        position:relative;
        background: red;
        height:300px;
        margin:100px;
    }
    .div2{
        background: blue;
        height:300px;
    }
    </style>
</head>
<body>

<div class="div1">
    <div class="div2"></div>
</div>

</body>
</html>

效果如下圖:
這裡寫圖片描述

元素設定了絕對定位,未設定偏移量時:

.div2{
        background: blue;
        height:300px;
        width:100%;  /*新增*/
        position:absolute;  /*新增*/
    }

效果如下圖:
這裡寫圖片描述

此時藍塊的初始位置不變,寬度繼承自根節點<html>,瀏覽器下方出現滑塊。

絕對定位元素未設定偏移量的特點:

  1. 無論是否存在已定位的祖先元素,都保持在元素初始位置

  2. 寬度隨著內容的變化而變化(類似於浮動時塊的寬度),故記得設定width,否則當沒有填充內容時,寬度為0。
    1).若未填充內容,未設定寬度:看不見元素,width為0。與是否存在有已定位的包含元素無關
    2).若填充內容,未設定寬度:width隨內容而定。與是否存在有已定位的包含元素無關
    3). 設定寬度,無論是否填充內容,

    • 若有已定位的包含元素:寬度為設定的固定值,或設定的百分數*包含的定位元素的寬度
    • 若無已定位的包含元素 (包含元素未定位或定位元素不是包含的祖先元素):寬度為設定的固定值,或設定的百分數*html的寬度

元素設定偏移量時:

.div2{
        background: blue;
        height:300px;
        width:100%;
        position:absolute;
        top:100px;  /*新增*/
        left:50px;   /*新增*/
    }

1.此時紅塊為設定了相對定位,且紅塊包含藍塊,所以藍塊設定絕對定位,相對於紅塊進行移動,效果如下:
這裡寫圖片描述

2.若此時將紅塊不再設為relative相對定位,或是讓紅塊不再包含藍塊,將藍塊設定為絕對定位,是相對於祖先元素<html>進行定位,效果如下:
這裡寫圖片描述

這裡寫圖片描述

絕對定位元素設定了偏移量時的特點:

  1. 不存在已定位的祖先元素:以根節點<html>為偏移參照基準
  2. 存在已定位的祖先元素:以距其最近的已定位祖先元素為偏移參照基準

相對定位和絕對定位在偏移上的區別:

  • 相對定位:“相對於”元素在文件中的初始位置。
  • 絕對定位:“相對於”最近的已定位祖先元素,如果不存在已定位的祖先元素,那麼“相對於”最初的包含塊。

使用絕對定位實現橫向兩列布局:

常用於一列固定寬度,另一列寬度自適應的情況

主要應用技能:

  1. 對父元素使用相對定位–relative
  2. 對需要自適應寬度的元素使用絕對定位–absolute

注意:固定寬度的height > 自適應寬度的height
(原因:自適應寬度的div設定了absolute後,脫離標準文件流,無法將父元素的高度撐開)