方案

参考

思否 – 15种CSS居中的方式

居中

  • inline-block + text-align
  • table + margin
  • absolute + transform
  • flex + justify-content

垂直

  • table-cell + vertial-align
  • absolute + transform
  • flex + align-items

水平垂直

  • inline-block + table-cell + text-align + vertical-align
  • absolute + transform
  • flex

多列布局 – 一列定宽,一列自适应

  • float + margin
  • float + overflow
  • table
  • flex

多列布局 – 多列定宽,一列自适应

  • float + overflow
  • table
  • flex

一列不定宽,一列自适应

  • float + overflow
  • table
  • flex

多列不定宽,一列自适应

  • float + overflow
  • 等分
  • float + margin
  • table + margin
  • flex

等高

  • float + overflow
  • table
  • flex

并排等分,单排对齐靠左布局

  • flex

圣杯布局&双飞翼布局

居中

  • inline-block + text-align

    tips:此方案兼容性较好,可兼容至IE8,对于IE567并不支持inline-block,需要使用css hack进行兼容

    1
    2
    3
    4
    5
    6
    .parent{
    text-align: center;
    }
    .child{
    display: inline-block;
    }
  • table + margin

    tips:此方案兼容至IE8,可以使用

    代替css写法,兼容性良好

    1
    2
    3
    4
    .child{
    display: table;
    margin: 0 auto;
    }
  • absolute + transform

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    .parent{
    position: relative;
    height:1.5em;
    }
    .child{
    position: absolute;
    left: 50%;
    transform: translateX(-50%);
    }

    /* tips:此方案兼容至IE9,因为transform兼容性限制,如果.child为定宽元素,可以使用以下写法,兼容性极佳 */
    .parent{
    position: relative;
    height:1.5em;
    }
    .child{
    position: absolute;
    width:100px;
    left: 50%;
    margin-left:-50px;
    }

垂直

  • table-cell + vertial-align

    可替换成

    布局,兼容性良好

    1
    2
    3
    4
    .parent{
    display: table-cell;
    vertical-align: middle;
    }
  • absolute + transform

    tips:存在css3兼容问题,定宽兼容性良好

    1
    2
    3
    4
    5
    6
    7
    8
    .parent{
    position: relative;
    }
    .child{
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    }
  • flex + align-items

    tips:高版本浏览器兼容,低版本不适用

    1
    2
    3
    4
    .parent{
    display: flex;
    align-items: center;
    }

水平垂直居中

  • 已知宽度,负间距

    固定宽高元素水平垂直居中,通过margin平移元素整体宽度的一半,使元素水平垂直居中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .parent{
    position: relative; /* 已知宽度 */
    }
    .child{
    position: absolute;
    top: 50%;
    left: 50%;
    width: 80%;
    height: 60px;
    margin: -30px 0 0 -40%;
    }
  • absolute + transform

    利用2D变换,在水平和垂直两个方向都向反向平移宽高的一半,从而使元素水平垂直居中

    1
    2
    3
    4
    5
    6
    7
    8
    9
    .parent{
    position: relative;
    }
    .child{
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    }
  • flex + justify-content + align-items

    1
    2
    3
    4
    5
    .parent {
    display: flex;
    justify-content: center;
    align-items: center;
    }
  • inline-block + table-cell + text-align + vertical-align

    1
    2
    3
    4
    5
    6
    7
    8
    .parent{
    text-align: center;
    display: table-cell;
    vertical-align: middle;
    }
    .child{
    display: inline-block;
    }
  • grid + margin-auto

    利用grid实现水平垂直居中,兼容性较差

    1
    2
    3
    4
    5
    6
    7
    .parent {
    height: 140px;
    display: grid;
    }
    .child {
    margin: auto;
    }