单个元素的水平垂直居中

1.必须要设置居中元素的宽高;
2.宽高变化后margin也要做相应改变.
3.适应所有浏览器.
        .container {
          position: relative;
          width: 400px;
          height: 200px;
        }
      
        .container .child {
          position: absolute;
          width: 280px;
          height: 140px;
          top: 50%;
          left: 50%;
          margin-left: -140px;
          margin-top: -70px;
        }
      
1.必须要设置居中元素的宽高或为图片;
2.宽高变化后, margin值不需要跟着改变.
3.不支持IE6、IE7.
        .container {
          position: relative;
          width: 400px;
          height: 200px;
        }
      
        .container .child {
          position: absolute;
          width: 280px;
          height: 140px;
          margin: auto;
          top: 0;
          left: 0;
          bottom: 0;
          right: 0;
        }
      
1.方法 1 的演变;
2.只是将margin属性变成了translate(-50%,-50%);
3.宽高变化后, margin值也不需要跟着改变;
4.IE9以下不支持,适合移动端。
        .container {
          position: relative;
          width: 400px;
          height: 200px;
        }
      
        .container .child {
          position: absolute;
          width: 280px;
          height: 140px;
          top: 50%;
          left: 50%;
          -webkit-transform: translate(-50%, -50%);
          -ms-transform: translate(-50%, -50%);
          transform: translate(-50%, -50%);
        }
      
1.要多加两层标签:inner-table和inner-cell;
2.要居中的元素必须为inline或inline-block; 如果为block元素,则需设置margin:0 auto;
3.inner-cell元素和要居中的元素都不能设置float;
4.不支持IE6、IE7.
        .container {
          width: 400px;
          height: 200px;
        }
      
        .container .inner-table {
          display: table;
          width: 100%;
          height: 100%;
        }
      
        .container .inner-table .inner-cell {
          width: 280px;
          height: 140px;
          display: table-cell;
          vertical-align: middle;
          text-align: center;
        }
      
        .container .inner-table .inner-cell .child {
          width: 280px; height: 140px;
          display: inline-block;
        }
      
只能针对inline元素或inline-block元素
        .container {
          width: 400px;
          height: 200px;
          line-height: 200px;
          text-align: center;
        }
      
        .container .child {
          display: inline/inline-block;
          vertical-align: middle; /*针对img或*inline-block元素设置/
        }
      
1.任何元素都可以。
2.只要设置父级元素的属性就可以。
3.只兼容支持display:box的浏览器。
4.此demo只兼容了webkit浏览器;适合移动端。
        .container {
          width: 400px;
          height: 200px;
          display: -webkit-box;
          -webkit-box-pack: center;
          -webkit-box-align: center;
        }
      
        .container .child {
          /* Anyway, I don't care. */
        }
      
1.用vertical属性来设置所有内以中线对齐。
2.用:before添加一个content对设置100%高度。
        .container {
          width: 400px;
          height: 200px;
          text-align: center;
        }
      
        .container:before {
          content: '';
          display: inline-block;
          height: 100%;
          vertical-align: middle;
        }
      
        .container .child {
          display: inline-block;
          vertical-align: middle;
        }
      

多个元素的水平垂直居中

      <div class="container">
        <div class="inner-table">
            <div class="inner-cell">
              <div class="child-1"></div>
            </div>
            <div class="inner-cell">
              <div class="child-2"></div>
            </div>
          </div>
        </div>
      </div>
      
        .inner-table{
          height: 100%; /*垂直居中*/
          display: table;
          margin: 0 auto; /*水平居中*/
          font-size: 0;
        }
      
        .inner-table .inner-cell{
          display: table-cell;
          vertical-align: middle;
          padding-right: 10px;
        }
      
        <div class="container">
          <div class="child-1"></div>
          <div class="child-2"></div>
        </div>
      
        .container {
          width: 400px;
          height: 200px;
          text-align: center;
          /*解决inline-block
          元素间的空白*/
          font-size: 0;
        }
      
        .container:before {
          content: '';
          display: inline-block;
          height: 100%;
          vertical-align: middle;
        }
        .container .child {
          display: inline-block;
          vertical-align: middle;
          margin-right: 10px;
        }
      
一些需要注意的事项:
1.{margin:0 auto} 实现水平居中分以下三种情况:
  (1)【block元素】必须设置宽度;
  (2)【img】必须设置display:block,可以不设置宽度;
  (3)【table】可以不设置宽度;
      1)因此,不知到宽度的元素可以通过设置{display:table}来实现

2.多个inline-block元素间会出现多余的空白:
  (1)原因:空白是inline-block元素间的回车字符造成的
  (2)解决:设置父级元素的font-size:0