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

最近加班像个牛一样,很久没来贴吧逛逛了,深感抱歉~
上次有朋友发了个完美让元素水平垂直居中的帖子,但是貌似仅限已知宽高的元素(没仔细看,说错了道歉)。
这次分享一下未知宽高元素水平垂直的方法。


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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值