如果你曾经研究过图片水平垂直居中的方法,那么下面这几个方法你肯定知道
下面介绍的方法主要是利用display:inline-block;让元素变为行内块元素,利用vertical-align:middle来实现垂直居中,利用父元素的text-align:center;实现水平居中。
一、表格方法
表格本来对立面的内容是垂直居中的,所以用表格来做很适合。但是它里面的内容是行内元素才行,所以下面的代码就可以实现。
<style>
*{margin:0px; padding:0px;}
table {position:absolute; width:100%; height:100%; text-align:center; background:rgba(0,0,0,0.5);}
.test {background:red; display:inline-block;}
</style>
<table>
<tr>
<td>
<div class="test">
水平垂直居中了吧<br>
两行文字哦
</div>
</td>
</tr>
</table>
在css里面有个display:table-cell;属性值可以让元素渲染为表格单元格,就可以轻松实行让子元素水平垂直居中了,自己试下
<style>
.wrap {display:table-cell; width:300px; height:300px; text-align:center; vertical-align:middle; background:rgba(0,0,0,0.5);}
.test {background:red; display:inline-block;}
</style>
<div class="wrap">
<div class="test">
水平垂直居中了吧<br>
两行文字哦
</div>
</div>
二、利用vertical-align:middle
这个方法目前是我的最爱,因为下面介绍的兼容性不是很好
这个是利用一个没有宽度b标签来实现水平垂直居中
<style>
.wrap {width:300px; height:300px; text-align:center; background:rgba(0,0,0,0.5);}
.vamb {display:inline-block; width:0px; height:100%; vertical-align:middle;}
.test {background:red; display:inline-block;}
</style>
<div class="wrap">
<b class="vamb"></b>
<div class="test">
CSS吧<br>
来个宽度大点的试试
</div>
</div>
效果图跟上面的一样的,就不截图了,呵呵,下面用美女图片测试吧,比较吸引眼球
三、使用transform实现
一般使用百分比单位的时候都是相对父元素来计算的,但是在css里面有个比较特殊的属性是相对自身宽高来计算的。那就是transform:translate();
这样就简单了,只是这个低版本IE不兼容,而且很遗憾 安卓2.3使用这个有bug,暂时不能在移动端使用
<style>
*{margin:0px; padding:0px;}
.test {position: absolute; left:50%; top:50%; -webkit-transform:translate(-50%,-50%); transform:translate(-50%,-50%);}
</style>
<div class="test">
<img src="girl/tpl_8.jpg" width="100" >
</div>
图片水平垂直居中的,任意宽高,相对简单。
四、弹性盒模型
弹性盒模型就是flex,css3新增布局方式,超级好用,谁用谁知道,推荐大家都学习一番。
这个方法我在手机端都很喜欢用,相对爽啊 呵呵。同样比较遗憾的是低版本IE不支持,不过手机端是没有问题的,使用旧版方法display:box;
<style>
*{margin:0px; padding:0px;}
.flex {display:-webkit-box; display:-ms-flex; display:-webkit-flex; display:flex;}
.flex-hc {-webkit-box-pack:center; -ms-justify-content:center; -webkit-justify-content:center; justify-content:center;}
.flex-vc {-webkit-box-align:center; -ms-align-items:center; -webkit-align-items:center; align-items:center;}
.wrap {position:fixed; width:100%; height:100%; background:rgba(0,0,0,0.5); left:0px; top:0px;}
</style>
<div class="wrap flex flex-hc flex-vc">
<div class="test">
<img src="girl/tpl_7.jpg" width="200" >
</div>
</div>
我喜欢flex 水平居中 垂直居中分开用不同的class定义,这样子更灵活一点,你喜欢写在一起也是可以的,相当强大啊。但是低版本的安卓使用的是box旧版弹性盒模型,如果是要多列布局,记得要设置子元素为块元素,不然不会生效,这里说些题外话了。