文章目錄

所有的例子Html如下:

1
2
3
<div class="parent">
<div class="child">内容垂直居中</div>
</div>

  1. 使用绝对定位
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
       * {
    padding: 10px 20px;
    }

    .parent {
    position: relative;
    height: 200px;
    width: 300px;
    background: #ccc;
    margin-left: auto;
    margin-right: auto;
    }

    .child {
    position: absolute;
    color: #fff;
    top: 100px;
    line-height: 100px;
    margin-top: -50px;
    background: #333;
    }

通过调节文字内容的行距和子层的margin-top达到竖直居中的目的

  1. 使用translateY转换轴
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
       * {
    padding: 10px 20px;
    }

    .parent {
    height: 100px;
    background: #ccc;
    color: #fff;
    width: 300px;
    margin-left: auto;
    margin-right: auto;
    }

    .child {
    text-align: center;
    position: relative;
    top: 50%;
    -webkit-transform: translateY(-50%);
    -o-transform: translateY(-50%);
    transform: translateY(-50%);
    }

这种写法对IE版本低于8是不会起作用的。

  1. 通过padding
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    * {
    padding: 10px 20px;
    }

    .parent {
    background: #ccc;
    color: #fff;
    width: 300px;
    margin-left: auto;
    margin-right: auto;
    }

    .child {
    padding: 10% 50px;
    }

此写法适用于父,子窗口不固定高度

  1. 直接使用line-height
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       * {
    padding: 10px 20px;
    }

    .parent {
    background: #ccc;
    color: #fff;
    width: 300px;
    width: 300px;
    margin-left: auto;
    margin-right: auto;
    }

    .child {
    line-height: 300px;
    }

很明显这种方法一旦出现2行文字就会有问题

  1. 使用CSS Table
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
       * {
    padding: 10px 20px;
    }

    .parent {
    display: table;
    background: #ccc;
    height: 100px;
    color: #fff;
    margin-left: auto;
    margin-right: auto;
    }

    .child {
    display: table-cell;
    vertical-align: middle;
    padding: 0 30px;
    }

前方高能!!
前方高能!!
前方高能!!
这是内容垂直居中最好用的方法。

  1. 使用flexbox
    * {
        padding: 10px 20px;
    }
    .parent { 
        display: flex;
        align-items: center;
        height: 10em;
        background: #ccc;
        width: 300px;
        color: #fff;
        margin-left: auto;
        margin-right: auto;
    }
    
    在父窗口定义flex,并用align-items调整伸缩项目在侧轴的对齐方式。但是flex在各浏览器的兼容性较差。
comments powered by Disqus
文章目錄