在前端佈局過程中,我們實現水平居中比較簡單,一般通過margin:0 auto;和父元素 text-align: center;就能實現。但要實現垂直居中就沒有那麼容易,下面向大家分享下我工作中實現垂直居中的幾種方法。
1、line-height等於hieght/只設line-height
這種方法比較適合文字的居中,其核心是設定行高(line-height)等於包裹他的盒子的高,或者不設高度只設行高,這種適合文字居中且高度固定的場景,使用起來比較方便也比較有用。
//html
<div class="middle">555</div>
//css
.middle{
height: 50px;
line-height: 50px;
background: red;
}
複製程式碼
值得注意的是如果是行內元素,因為其沒有高度,需先把行內元素轉換為行內塊或者塊元素。
2、vertical-align: middle
這種實現元素的居中需要配合父元素設有等於自身高度的行高,且此元素是行內塊元素。 只有三個條件都具備,才能實現垂直居中。程式碼如下:
//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;
}
複製程式碼
需要注意的是這種方法需要一個固定的行高,且實現的居中其實是近似居中,並不是真正意義的居中。
3、絕對定位加負外邊距
這種方法核心在於先設定需要居中的元素為絕對定位,在設定其top:50%; 加上 margin-top等於負的自身高度的一半來實現居中。好處是實現起來比較方便,且父元素的高度可以為百分比,也不用設行高。程式碼如下:
//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;
}
複製程式碼
4、絕對定位加margin:auto
先上程式碼:
//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;
}
複製程式碼
這種方法好處是不止可以實現垂直居中,還可以實現水平居中,壞處是在網路或效能不好的情況下會有盒子不直接定到位的情況,造成使用者體驗不好。
5、flex佈局
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;
}
複製程式碼