1. 程式人生 > >[CSS]使用絕對定位屬性來實現CSS內部子容器高度隨著外部父容器高度變化而變化

[CSS]使用絕對定位屬性來實現CSS內部子容器高度隨著外部父容器高度變化而變化

測試demo 原始碼:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
    <meta name="renderer" content="webkit"/>
    <title></title>
    <style>
        html,
        body{
            height:100%;
            padding:0;
            margin:0;
        }
        .div1{
            position:absolute;
            top:0;
            right:0;
            left:0;
            bottom:0;
            min-height:400px;
            background:red;
        }
        .div2{
            height:100%; /*e8下 div->b的高度並沒有撐滿整個div->a容器*/
            background:#abb904;
        }
    </style>
</head>
<body>
    <div class="div1">
        <div class="div2"></div>
    </div>
</body>
</html>

現象1: 父容器存在min-height ,父容器高度使用position:absolute;來確定
            縮放螢幕至div1的高度出現滾動條
            正常瀏覽器下,div1,div2的高度都是400px(圖1)
            IE8中,div1是以min-height:400px顯示的。div2 的高度等於螢幕的高度(圖2)

                                                                        圖1


                                                                            圖2

現象2  修改div2的高度height為auto 時
           div1仍然是以min-height來讀取高度,div2 的高度為 0

        .div1{
            position:absolute;
            top:0;
            right:0;
            left:0;
            bottom:0;
            min-height:400px;
            background:red;
        }     
.div2{
            height:auto;
            background:green;
        }


現象3    父容器存在min-height ,父容器高度使用position:relative;來設定,結果同現象2是一樣的。

        .div1{
            position:relative;
            min-height:400px;
            background:red;
        }
        .div2{
            height:100%; 
            background:#abb904;
        }

div2 正確顯示時
css應該用position:absolute;來設定他的高度,如下程式碼
正解1

     .div1{
            position:absolute;
            top:0;
            right:0;
            left:0;
            bottom:0;
            min-height:400px;
            background:red;
        }
      .div2{ 
            position:absolute;  
            top:0;
            right:0;
            left:0;
            bottom:0;
            background:green;
        }
正解2:
      .a{
            position:relative;
            min-height:400px;
            background:red;
        }
        .b{
            position:absolute;
            top:0;
            right:0;
            left:0;
            bottom:0;
            background:#abb904;
        }


總結:讓子容器高度跟隨外部父容器高度變化而變化,如果我們純粹使用使用height:100%;或者height:auto;來定義內部容器自適應高度,貌似都無法實現讓子容器高度隨著外部父容器高度變化而變化,所以我們必需要使用position絕對定位屬性來配合協助實現