四种纯css实现页面元素水平垂直居中的方法
在页面很多地方都需要将某个元素水平和垂直都居中放置,而且在一些公司面试前端的时候,往往会有这样的题目,比如“用至少两种方法实现纯css让元素水平垂直居中效果”,这个话题算老生常谈了。今天主要讨论四种常用的纯css实现元素水平垂直居中的方案:
1、如果要居中的元素已知宽高,可以利用定位和负外边距来实现,具体原理不啰嗦了,大家自己看代码:
<div id="box"></div> <style type="text/css"> * { padding: 0; margin: 0; } #box { width: 300px; height: 200px; background: dodgerblue; position: absolute; top: 50%; left: 50%; margin-left: -150px;/*元素高度的一半*/ margin-top: -100px;/*元素高度的一半*/ } </style>
2、如果元素的宽高已知,还可以这么写(这个写法必须加具体高度):
<div id="box"></div> <style type="text/css"> * { padding: 0; margin: 0; } #box { width: 300px; height: 200px; background: dodgerblue; margin: auto; position: absolute; left: 0; right: 0; bottom: 0; top: 0; } </style>
3、如果元素宽高未知,可以这样写(利用了css3的属性,不兼容低版本IE):
<div id="box">我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字,我是用来充数的测试文字</div> <style type="text/css"> * { padding: 0; margin: 0; } #box { width: 300px; background: dodgerblue; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } </style>
4、如果让某个父级区域(非body)中的子元素水平垂直居中,也可以这样写:
<style type="text/css"> *{ padding: 0; margin: 0; } #out{ width: 800px; height: 550px; border: 2px solid orange; margin: 10px auto; /*flex弹性盒模型居中法*/ display: flex; /*让子元素在主轴上居中*/ justify-content: center; /*让子元素在交叉轴上居中*/ align-items: center; } #hd{ width: 400px; background: dodgerblue; } </style> <div id="out"> <div id="hd">后盾人 人人做后盾!后盾人 人人做后盾!后盾人 人人做后盾!后盾人 人人做后盾!后盾人 人人做后盾!后盾人 人人做后盾!后盾人 人人做后盾!后盾人 人人做后盾!后盾人 人人做后盾!后盾人 人人做后盾!</div> </div>
当然,还有其他很多方法,以上四种是比较常用的而已。给大家推荐一篇文章,有兴趣的同学可以学习下:盘点8种CSS实现垂直居中水平居中的绝对定位居中技术(http://blog.csdn.net/freshlover/article/details/11579669)