您的位置:首页 > 其它

未知宽高元素垂直水平居中

2015-10-29 12:28 375 查看
最近加班像个牛一样,很久没来贴吧逛逛了,深感抱歉~

上次有朋友发了个完美让元素水平垂直居中的帖子,但是貌似仅限已知宽高的元素(没仔细看,说错了道歉)。

这次分享一下未知宽高元素水平垂直的方法。

如果你曾经研究过图片水平垂直居中的方法,那么下面这几个方法你肯定知道

下面介绍的方法主要是利用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旧版弹性盒模型,如果是要多列布局,记得要设置子元素为块元素,不然不会生效,这里说些题外话了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: