在前端布局过程当中,咱们实现水平居中比较简单,通常经过margin:0 auto;和父元素 text-align: center;就能实现。但要实现垂直居中就没有那么容易,下面向你们分享下我工做中实现垂直居中的几种方法。javascript
这种方法比较适合文字的居中,其核心是设置行高(line-height)等于包裹他的盒子的高,或者不设高度只设行高,这种适合文字居中且高度固定的场景,使用起来比较方便也比较有用。css
//html
<div class="middle">555</div>
//css
.middle{
height: 50px;
line-height: 50px;
background: red;
}
复制代码
这种实现元素的居中须要配合父元素设有等于自身高度的行高,且此元素是行内块元素。 只有三个条件都具有,才能实现垂直居中。代码以下:html
//html
<div class="main">
<div class="middle"></div>
</div>
//css
.main {
width: 200px;
height: 300px;
line-height: 300px;
background: #dddddd;
}
.middle{
background: red;
width: 200px;
height: 50px;
display: inline-block;//或者display: inline-table;
vertical-align: middle;
}
复制代码
须要注意的是这种方法须要一个固定的行高,且实现的居中实际上是近似居中,并非真正意义的居中。前端
这种方法核心在于先设置须要居中的元素为绝对定位,在设置其top:50%; 加上 margin-top等于负的自身高度的一半来实现居中。好处是实现起来比较方便,且父元素的高度能够为百分比,也不用设行高。代码以下:java
//html
<div class="main">
<div class="middle"></div>
</div>
//css
.main {
width: 60px;
height: 10%;
background: #dddddd;
position: relative;//父元素设为相对定位
}
.middle{
position: absolute;//设为绝对定位
top: 50%;//top值为50%
margin-top: -25%;//设margin-top为元素高度的一半
width: 60px;
height: 50%;
background: red;
}
复制代码
先上代码:浏览器
//html
<div class="main">
<div class="middle"></div>
</div>
//css
.main {
width: 60px;
height: 10%;
background: #dddddd;
position: relative;//父元素设为相对定位
}
.middle{
width: 30%;
height: 50%;
position: absolute;//设为绝对定位
top: 0;
bottom: 0;//top、bottom设0便可,
left: 0;//若是left、right也设为0则可实现水平垂直都居中
right: 0;
margin:auto;
background: red;
}
复制代码
这种方法好处是不止能够实现垂直居中,还能够实现水平居中,坏处是在网络或性能很差的状况下会有盒子不直接定到位的状况,形成用户体验很差。网络
flex布局能够很方便的实现垂直与水平居中,好处不少,在移动端使用比较普遍,坏处就是浏览器兼容性很差。代码以下:布局
//html
<div class="main">
<div class="middle"></div>
</div>
//css
.main {
width: 60px;
height: 10%;
background: #dddddd;
display: flex;//设为flex
justify-content: center;//水平居中
align-items: center;//垂直居中
}
.middle{
width: 30%;
height: 50%;
background: red;
}
复制代码