display:table-cell實現水平垂直居中


  如果查看css手冊,會發現display有許多帶table字樣的可選屬性,有table、inline-table、table-row-group、table-row、table-cell等10個之多,可以賦予div類似於<table>等標簽的布局特性。大多數瀏覽器(IE6/7除外)對其支持良好,其實現原理參考《匿名表格元素》。

  組合使用display:table-cell和vertical-align、text-align,使父元素內的所有行內元素水平垂直居中(內部div設置display:inline-block即可)。這在子元素不確定寬高和數量時,特別實用!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo001_displayTable</title>
    <style>
        /*** table-cell middle center組合使用 ***/
        .cell {
            display: table-cell;
            vertical-align: middle;
            text-align: center;
            width: 240px;
            height: 180px;
            border:1px solid #666;
        }
    </style>
</head>
<body>
    <div class="cell">
        <p>我愛你</p>
    </div>
    <div class="cell">
        <p>我愛你</p><p>親愛的中國</p>
    </div>
    <div class="cell">
        <p>我愛你</p><p>親愛的中國</p><div style="width:100px;height:50px;border:1px solid #ccc;display:inline-block">div(inline-block)</div>
    </div>
</body>
</html>

  效果:

  對於只需要垂直居中的情況,可以去掉text-align:center屬性。

  對table-cell元素設置百分比(如100%)的寬高值時無效的,但是可以將父元素設置display:table,再將父元素設置百分比寬高,子元素table-cell會自動撐滿父元素。這就可以做相對於整個頁面的水平垂直居中。代碼示例如下:

    <style>
        html,body{height: 100%;margin:0;padding:0;}
        /*** .table和.cell都將撐滿頁面,cell的子元素水平垂直居中 ***/
        .table{
            display: table;
            width: 100%;
            height: 100%;
        }
        .cell {
            display: table-cell;
            vertical-align: middle;
            text-align: center;
            border: 1px solid #666;
        }
    </style>
    <div class="table">
        <div class="cell">
            <p>我愛你</p>
            <p>親愛的中國</p>
            <div style="width:100px;height:50px;border:1px solid #ccc;display:inline-block">div(inline-block)</div>
        </div>
    </div>

  table系列的display屬性還可以實現等高布局、靈活頁眉/頁腳、水平自適應布局等等,參考文章《css Table布局》《display:table-cell的應用》。

特別提醒:

  1.table-cell不感知margin,在父元素上設置table-row等屬性,也會使其不感知height。

  2.設置float或position會對默認布局造成破壞,可以考慮為之增加一個父div定義float等屬性。


免責聲明!

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



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