刚学习CSS的时候尝试过几种居中的方法,这些方法不须要借助JS手段,所写的方法有一个原则,就是在不须要直接人为的设定好宽高计算后再实现居中,还有诸如table布局啊、行高设定、margin:auto之类的我就不写了。浏览器
如下几种方法针对不一样的浏览器,通过测试,从IE8及如下到IE9+、Safari都有不一样的方法支持。布局
.wraper{ float:left; position:relative; left:50%; clear:both; } .wraper div{ border:1px solid palevioletred; position:relative; left:-50%; } <div class="wraper"> <div>瓜迪奥拉</div> </div> <div class="wraper"> <div>克洛普克洛普克洛普克洛普克洛普克洛普克洛普</div> </div> <div class="wraper"> <div>孔蒂</div> </div> <div class="wraper"> <div>穆里尼奥</div> </div> <div class="wraper"> <div>温格</div> </div>
这种方法的原理是让容器层和内层都相对本身移动,容器层移动自身宽度的50%,内层相对于移动自身宽度的-50%。这样一来外部容器正好能够将内容垂直的包裹住,而且因为外部容器是浮动的,因此容器的宽度和内层的宽度一致,这样能够作到彻底自适应的实现居中。该方法适用于竖向排版的状况。学习
div{ position: absolute; width:100px; height:50px; top:0; right:0; bottom:0; left:0; margin:auto; background:#f60; } <div></div>
这个方法原理不太清楚,我是这样理解的,当这个div哪里也去不了,而后margin仍是auto的时候,他就只能相对于外部容器垂直居中了..测试
.parent{ height:500px; width:500px; font-size:438.6px;/*(font-size:width/114)*/ background-color:paleturquoise; } .child{ background-color:deepskyblue; vertical-align:middle; zoom:1; display:inline; width:50px; height:50px; font:18px/18px "微软雅黑"; } /*.child必定要写上font属性,这个方法在ie中才会实现.*/ <div class="parent"> <div class="child"></div> </div>
这个方法只有IE8及如下才能够实现,至今也没明白父级的font-size属性为何必定要等于宽度/114,IE真是一个奇葩的存在...在虚拟机下测试这个方法确实有效,子级必定要写font-size属性,即便没有内容也要写,不然无效。针对IE8如下的兼容性时,这个方法能够做为一种hack使用。flex
IE是指9及如下,我只测试了这些版本的IE,另外Safari也是不支持的。code
.box{ width:600px; height:600px; border:1px solid palegreen; position:relative; } .item{ width:200px; height:200px; border:1px solid palegreen; position:absolute; top:50%; left:50%; transform:translate(-50%,-50%); } <div class="box"> <div class="item"></div> </div>
容器和内层都已经脱离了文档流,内层先移动自身的50%,再经过transform属性移动自身的-50%,修正后的top、left就正好处于容器内的垂直居中位置了。orm
IE依然不支持CSS3是必须的,遗憾的是Safari依然是不支持的,至少在我测试阶段(5.1.7)window下尚未支持。文档
#box{ width:800px; height:800px; display:flex; border:1px solid palevioletred; } #box div{ width:200px; height:200px; border:1px solid #2189BF; flex-direction:row; justify-content:center; align-self: center; } <div id="box"> <div></div> <div></div> <div></div> <div></div> <div></div> </div>
flex针对垂直居中的方法比较直接,justify-content:center; align-self: center;这两个属性直接设置为center就能够了,在不支持CSS3的浏览器中是没法实现的,这也是flex的暂时的缺点之一。虚拟机