CSS垂直居中精华总结

1  table-cell方式

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

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

        .container2{

                display:table;

                height:100%;

            }

      .table_cell{/*将cell垂直居中,如果外层div不为table则tablecell必须有高度*/

                display:table-cell;

                vertical-align:middle;

            }

优点:支持任意内容的可变高度、支持响应式

缺点:每一个需要垂直居中的元素都会需要加上额外标签(需要table、table-cell两个额外元素,也可以不用添加多余的无意义的标签,修改display的block变成了table-cell,破坏了原有的块状元素的性质。

 

2  使用绝对定位垂直居中

 

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

.absolute_center{

               /*display:none;*/

               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时,内容超过元素高度时会溢出,没有滚动条

 

3  负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)

 

4 利用translate

这是最简单的方法,不近能实现绝对居中同样的效果,也支持联合可变高度方式使用。内容块定义transform: translate(-50%,-50%)必须带上浏览器厂商的前缀,还要加上top: 50%; left: 50%;

.is-Transformed {     

width: 50%;   

 margin: auto;   

 position: absolute;    

top: 50%; left: 50%;    

-webkit-transform: translate(-50%,-50%);       

 -ms-transform: translate(-50%,-50%);        

 transform: translate(-50%,-50%);  }  

优点:

1.内容可变高度   2.代码量少

缺点:

1.IE8不支持

2.属性需要写浏览器厂商前缀

3.可能干扰其他transform效果

4.某些情形下会出现文本或元素边界渲染模糊的现象

 

5  弹性盒式布局

利用弹性盒式布局,将字元素的主轴、侧轴的排列方式都设置为居中对齐

原理:使用CSS弹性盒

.is-Flexbox {

  display: -webkit-box;

  display: -moz-box;

  display: -ms-flexbox;

  display: -webkit-flex;

  display: flex;

  -webkit-align-items: center;

          align-items: center;

  -webkit-justify-content: center;

          justify-content: center;

}

优点:真正的垂直居中布局

缺点:ie11才开始支持弹性布局

 

上一篇:Font Awesome使用指南


下一篇:父元素与子元素之间的margin-top问题