垂直居中的7种方法

1、水平垂直居中

[html]  view plain copy print ?
  1. <div class="center">  
  2.        <span>垂直居中</span>  
  3. </div>  
[html]  view plain copy print ?
  1. div.center{  
  2.           text-align:center;  
  3.           background:hsl(0,100%,97%);  
  4.  }  
  5.  div.center span{  
  6.           width:33%;  
  7.           height:auto;  
  8.   }  

但是这种方式没有让元素垂直居中,需要为div增加padding 或者为span元素设置margin-top和margin-bottom。
实现效果如下图:


2、利用margin:auto来实现居中

[html]  view plain copy print ?
  1. <div class="center">  
  2.         <span>垂直居中</span>  
  3. <span style="white-space:pre">    </span></div>  
[html]  view plain copy print ?
  1. <span style="white-space: pre;">      </span>div.center{  
  2.                    background:#ADFF2F;  
  3.               }  
  4.               div.center span{  
  5.                    width:33%;  
  6.                    height:auto;  
  7.                    margin:0 auto;  
  8.                    display:block;  
  9.               }  

为了使margin:0 auto产生效果,这里的display:block是必须的
实现效果如下图:

3、使用table-cell,实现水平和垂直居中

[html]  view plain copy print ?
  1. <div class="center-aligned">  
  2.         <div class="center-core">  
  3.              <span>水平居中</span>  
  4.         </div>  
  5.   </div>  
[html]  view plain copy print ?
  1. <span style="white-space:pre">    </span>.center-aligned{  
  2.                    display:table;  
  3.                    background:#BCEE68;  
  4.                    width:100%;  
  5.               }  
  6.               .center-core{  
  7.                    display:table-cell;  
  8.                    text-align:center;  
  9.                    vertical-align:middle;  
  10.               }  
实现效果图如下:

为了阻止div collapse(我理解的搜索,即宽度为包裹的元素的宽度),最外层的父元素必须设置width:100%
为了使内容垂直居中,外层的包裹元素也必须设置相应的高度。同样为了使元素在body中垂直居中,可以为body或html设置相应的高度。
如果为.center-core设置高度为100px,那么实现的结果图如下:


4、使用position:absolute 实现居中

[html]  view plain copy print ?
  1. <div class="absolute-aligned">  
  2.        <span>水平居中</span>  
  3.   </div>  
[html]  view plain copy print ?
  1. <span style="white-space:pre">    </span>.absolute-aligned{  
  2.                    position:relative;  
  3.                    min-height:300px;  
  4.                    background:#BCEE68;  
  5.               }  
  6.               .absolute-aligned span{  
  7.                    width:50%;  
  8.                    min-width:100px;  
  9.                    height:auto;  
  10.                    overflow:auto;  
  11.                    position:absolute;  
  12.                    margin:0 auto;  
  13.                    top:0;  
  14.                    bottom:0;  
  15.                    left:0;  
  16.                    right:0;  
  17.                    border:1px solid red;  
  18.                    text-align:center;//使元素内容水平居中  
  19.               }  
这种方式有一种限制就是:父元素中必须以一种方式设置height,否则实现的效果只是一条线。 最终实现的效果图如下:


5、利用translate实现居中

[html]  view plain copy print ?
  1. <span style="white-space:pre">    </span><div class="center">  
  2.               <span>水平垂直居中</span>  
  3.          </div>  
[html]  view plain copy print ?
  1. <span style="white-space:pre">    </span>.center{  
  2.                    background:#BCEE68;  
  3.                    position:relative;  
  4.                    min-height:500px;  
  5.               }  
  6.               .center span{  
  7.                    position:absolute;  
  8.                    top:50%;  
  9.                    left:50%;  
  10.                    width:30%;  
  11.                    height:auto;  
  12.                    -webkit-transform:translate(-50%,-50%);  
  13.                    transform:translate(-50%,-50%);  
  14.                    border:1px solid red;  
  15.                    text-align:center;  
  16.               }  
这种方式的不足之处是:
IE8及更早的浏览器中不支持
父级容器需要显示的设置高度,因为无法从任何它的绝对定位的元素中获得高度。
如果内容包含文本,当前浏览器合成技术可能会使移动的文本变得的模糊。显示如下:


6.使用Flexbox centering

[html]  view plain copy print ?
  1. <span style="white-space:pre">    </span><div class="center">  
  2.                <span>水平垂直居中</span>  
  3.           </div>  
[html]  view plain copy print ?
  1. <span style="white-space:pre">    </span>.center{  
  2.                    background:#BCEE68;  
  3.                    display:flex;  
  4.                    justify-content:center;//元素在横轴的对齐方式  
  5.                    align-items:center;//元素在纵轴的对齐方式  
  6.               }  
  7.               .center span{  
  8.                    width:30%;  
  9.                    height:auto;  
  10.                    border:1px solid black;  
  11.                    text-align:center;  
  12.               }  

显示结果如下:

在很多方面,flexbox是最简单的方式,但是早期版本的IE并不支持,完整的css代码如下:
[html]  view plain copy print ?
  1. <span style="white-space:pre">    </span>.center{  
  2.                     background:#BCEE68;  
  3.                     display:-webkit-box;/*OLD: Safari, iOS 6 and earlier; Android browser, older WebKit*/  
  4.                     display:-moz-box;/*OLD: Firefox (can be buggy)*/  
  5.                     display:-ms-flexbox;/*OLD: IE 10*/  
  6.                     display:-webkit-flex;/*FINAL, PREFIXED, Chrome 21+*/  
  7.                     display:flex;/*FINAL: Opera 12.1+, Firefox 22+*/  
  8.                      
  9.                     /*目前没有浏览器支持 box-align 属性,属性规定如何对齐框的子元素,指在垂直方向上如何对齐*/  
  10.                     -webkit-box-align:center;/*box-align 。Safari、Opera 以及 Chrome */  
  11.                     -moz-box-align:center;/*Firefox*/  
  12.                     -ms-flex-align:center;  
  13.                      
  14.                     /*设置或检索弹性盒子元素在侧轴(纵轴)方向上的对齐方式。*/  
  15.                     -webkit-align-items:center;  
  16.                     align-items:center;  
  17.   
  18.                     /*box-pack 属性规定当框大于子元素的尺寸,在何处放置子元素  
  19.                     该属性规定水平框中的水平位置,以及垂直框中的垂直位置。  
  20.                     通过一起使用 box-align 和 box-pack 属性,对 div 框的子元素进行居中:*/  
  21.                     -webkit-box-pack:center;  
  22.                     -moz-box-pack:center;  
  23.                     -ms-flex-pack:center;  
  24.   
  25.                     /*设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式*/  
  26.                     -webkit-justify-content:center;  
  27.                     justify-content:center;  

7、使用calc实现居中

[html]  view plain copy print ?
  1. <span style="white-space:pre">    </span>.cal{  
  2.              background:#BCEE68;  
  3.              min-height:600px;  
  4.              position:relative;  
  5.         }  
  6.         .cal span{  
  7.              border:1px solid black;  
  8.              width:40%;  
  9.              height:auto;  
  10.              position:absolute;  
  11.              top:-webkit-calc(50%-20%);  
  12.              top:-moz-calc(50%-20%);  
  13.              top:calc(50%-20%);  
  14.               
  15.              left:-webkit-calc(50%-20%);  
  16.              left:-moz-calc(50%-20%);  
  17.              left:calc(50%-20%);  
  18.         }  
如果直接设置left:50%;top:50%;那么span元素的z左上角将会位于父元素的中心,因为span元素的宽度为40%,所以为了使span元素的中心位于父元素的中心需要calc(50%-40%/2);
这种技巧比较适合具有固定尺寸的元素。IE8不兼容此属性。

8、使用伪元素使元素垂直居中(这个原理我还没有弄清楚)

[html]  view plain copy print ?
  1. <div class="wrap">  
  2.                <div class="centered">  
  3.  <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>               </div>  
  4.  </div>  

[html]  view plain copy print ?
  1. <span style="white-space:pre">    </span>html,body{  
  2.                height:100%;  
  3.           }  
  4.           body{  
  5.                min-width:500px;  
  6.                background:#999;  
  7.                font-size:100%;  
  8.                border:1px solid red;  
  9.           }  
  10.           .wrap{  
  11.                text-align:center;  
  12.                height:100%;  
  13.           }  
  14.           .wrap:before{  
  15.                content:'';  
  16.                display:inline-block;  
  17.                height:100%;  
  18.                /*该属性定义行内元素的基线相对于该元素所在行的基线的垂直对齐 middle为把此元素放置在父元素的中部。*/  
  19.                vertical-align:middle;  
  20.                margin-right:-0.25em;  
  21.                border:1px solid black;  
  22.           }  
  23.           .centered{  
  24.                display:inline-block;  
  25.                vertical-align:middle;  
  26.                width:480px;  
  27.                background:#eee;  
  28.                text-align:left;  
  29.           }  


运行结果显示如下:



原英文地址:http://demosthenes.info/blog/723/Seven-Ways-of-Centering-With-CSS
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值