本文讨论的垂直居中仅支持IE8+

  1、使用绝对定位垂直居中

  绝对对位原理:元素在过度受限情况下,将margin设置为auto,浏览器会重算margin的值,过度受限指的是同时设置top/bottom与height或者left/right与width。

  <div class="container">
         <div class="center absolute_center">
             生活不能等待别人来安排,要自已去争取和奋斗;<br>
             而不论其结果是喜是悲,但可以慰藉的是,你总不枉在这世界上活了一场。<br>
             有了这样的认识,你就会珍重生活,而不会玩世不恭;同时,也会给人自身注入一种强大的内在力量。
         </div>
     </div>  
  .absolute_center{
          position:absolute;
          width:200px;
          height:200px;
          top:0;
          bottom:0;
          left:0;
          right:0;
          margin:auto;
          background:#518fca;
          resize:both;/*用于设置了所有除overflow为visible的元素*/
          overflow:auto;
  }

  使用绝对定位要求元素必须设置明确高度。内容超过元素高度时需要设置overflow决定滚动条的出现

  优点:支持响应式,只有这种方法在resize之后仍然垂直居中

  缺点:没有显式设置overflow时,内容超过元素高度时会溢出,没有滚动条,不支持使用min/max-width

 

  2、负marginTop方式

  已知元素高度后,使用绝对定位将top设置为50%,mergin-top设置为内容高度的一半(height + padding) / 2;内容超过元素高度时需要设置overflow决定滚动条的出现

  原理:top:50%元素上边界位于包含框中点,设置负外边界使得元素垂直中心与包含框中心重合;

  .negative_margin_top{
                position:absolute;
                top:50%;
                left:0;
                right:0;
                margin:auto;
                margin-top:-100px; /*-(height+padding)/2*/
                width:200px;
                height:200px;
            }    

  优点:代码量少、浏览器兼容性高支持ie6 ie7

  缺点:能使用百分比、不支持使用min/max-width

 

  3、借助额外元素floater

   元素高度已知,在center元素外插入一个额外元素floater,设置floater的height为50%;margin-bottom为center元素高度的一半(height + padding) / 2。内容超过元素高度时需要设置overflow决定滚动条的出现。

  原理与2方法类似,floater的下边界是包含框的中心线,负下外边界保证center的中心线与包含框中心线重合。

  <div class="container">
            <div class="floater"></div>
            <div class="center floater_center">
                人和社会,一切斗争的总结局也许都是中庸而已。<br>
                与其认真,不如随便,采菊东篱下,悠然见南山。有钱就寻一醉,无钱就寻一睡,与过无争,随遇而安。
            </div>
        </div>
  .container{
                height:500px;
     }
  .floater{
                height:50%;
                margin-bottom:-100px;
        }
        .floater_center{
                height:200px;
                width:200px;
                margin:auto;
        }

  优点:浏览器兼容性好,支持旧版本ie

  缺点:需要设定父元素的高度和额外元素,不支持响应式

 

  4、table-cell方式

  将center元素的包含框display设置为table,center元素的display设置为table-cell,vertical-align设置为middle。

  原理:利用表布局特点,vertical-align设置为middle后,单元格中内容中间与所在行中间对齐

  .container2{
    display:table;
    height:200px;
  }
  .table_cell{/*将cell垂直居中,如果外层div不为table则tablecell必须有高度*/
    display:table-cell;
    vertical-align:middle;
  }
  优点:支持任意内容的可变高度、支持响应式

  缺点:每一个需要垂直居中的元素都会需要加上额外标签(需要table、table-cell两个额外元素),父元素的高度需固定有值

  

  5、使用translate属性 

  <div class="wrap">
    <div class="content">hhh</div>
  </div>

   .wrap {
    position:relative;
    width:600px;
    height:400px;
    background:#ccc;
   }
   .content {
    position:absolute;
    top: 50%;
    left: 50%;
    width:100px;
    height:100px;
    background:red;
    transform: translate(-50%,-50%);
   }

   

  6、使用justify-content属性

   .wrap {
    height:400px;
    background:#ccc;
    display: flex;
    justify-content: center;
    align-items: center;
   }
   .content {
    width:100px;
    height:100px;
    background:red;
   }

   7、使用calc()方法

   .wrap {
    position: relative;
    width: 600px;
    height: 400px;
    background:#ccc;
   }
   .content {
    position: absolute;
    left: calc((600px - 100px)/2);
    top: calc((400px - 100px)/2);
    left: -webkit-calc((600px - 100px)/2);
    top: -webkit-calc((400px - 100px)/2);
    width:100px;
    height:100px;
    background:red;
   }

  8、display和box组合

  {

    display:box;
    display: -webkit-box;
    -webkit-box-pack:center;
    -webkit-box-align:center;
    box-pack:center;
    box-align:center;

  }

posted on 2017-09-14 15:41  hmyCheryl  阅读(279)  评论(0编辑  收藏  举报