以下將整理關於使用CSS使元素居中的一些方法
案例模版:
<body>
<div id="main">
<div id="center">這個塊居中</div>
</div>
</body>
<style>
body{
height: 200px;
}
#main{
border:1px red solid;
}
#center{
border: 1px green solid;
}
</style>
複製程式碼
一、水平居中
1、使用margin:0 auto配合元素的width
#center{
width: 100px;
margin: 0 auto;
}
複製程式碼
要讓居中元素滿足兩個條件:其一,元素需要有一個固定寬度值;其二元素的margin-left和margin-right都必須設定為auto,這兩個條件少了任何一個都無法讓元素達到水平居中的效果。
缺點:需要固定居中元素的寬度。
注意:當元素處於position:absolute;時,margin:0 auto無效,需要將right於left都設為0才可以,如下所示:
#center{
width: 100px;
margin: 0 auto;
position:absolute;
right:0;
left:0;
}
複製程式碼
2、使用絕對定位配合margin
#center{
width: 100px;
position: absolute;
left: 50%;
margin-left: -100px; /*值為width的一半*/
}
複製程式碼
居中元素設定一個負的“margin-left”並且值等於寬度的一半,另外如果元素不是相對於瀏覽器的話,還需要在其父元素上設定一個相對定位“position: relative”。
缺點:需要固定居中元素的寬度。
以上兩種方式都必須設定固定的寬度值,下面將解決不需要固定寬度值的方法。
3、塊級父元素讓行內元素居中
#main{
text-align: center;
}
複製程式碼
對居中元素的父元素設定text-align屬性。
優點:不需要設定元素的固定寬度。
缺點:居中元素必須是inline或者設定為inline-block。
4、利用relative定位與行內樣式
#main{
display: inline-block;
position: relative;
left: 50%;
}
#center{
display: inline-block;
position: relative;
right: 50%;
}
複製程式碼
1、將#main與#center全部設定為inline-block,將包裹他們的內容:
2、將#main往右移其寬度的50%:
3、然後將#center往左移其寬度的50%:
4、最終#center元素居中。
優點:不需要設定元素的固定寬度。
缺點:居中元素的元素被設定為inline-block。
5、通過transform進行設定
#main{
position: relative;
}
#center{
position: absolute;
left: 50%;
transform: translateX(-50%);
}
複製程式碼
首先left:50%先右移#main50%的寬度,然後通過translateX(-50%)在左移本身50%的寬度。
優點:不需要設定元素的固定寬度。
缺點:居中元素被設定為absolute。
6、通過flex-box
#main{
display: flex;
justify-content: center;
}
複製程式碼
優點:不需要設定元素的固定寬度。
缺點:父元素被設定為flex。
二、垂直居中
1、通過line-height
#main{
height: 200px;
line-height: 200px;
}
複製程式碼
居中元素的父元素必須要設定準確height數值。並且居中元素如果是多行文字將錯亂。這種方式適合小元素,單行文字。
缺點:需要固定父元素的height值,並且居中元素如果是多行文字將錯亂。僅適合小元素,單行文字。
2、使用絕對定位搭配margin
#main{
position: relative;
}
#center{
height: 50px;
position: absolute;
top: 50%;
margin-top: -25px; /*值為height的一半*/
}
或
#center{
height: 50px;
position: absolute;
top: calc(50% - 25px);
}
複製程式碼
缺點:需要固定居中元素的height值。
以上兩種方式都必須設定固定的height值,下面將解決不需要固定heignt值的方法。
3、通過table-cell與vertical-align
#main{
height: 100%;
display: table;
}
#center{
display: table-cell;
vertical-align: middle;
}
複製程式碼
父元素設定為display:table;子元素設定為display:table-cell;並且設定vertical-align:midden;
4、通過新增一個額外的標籤
<body>
<div id="main">
<div id="center">這個塊居中</div>
<div id="other"></div>
</div>
</body>
<style>
#main{
height: 100%;
}
#center,#other{
display: inline-block;
vertical-align: middle;
}
#other{
height: 100%;
}
</style>
複製程式碼
為同一行的inline-block元素設定vertical-align:middle,該行內的inline-block元素會按照元素的垂直中心線對齊。
缺點:需要額外新增一個元素。
5、通過transform進行設定
#main{
height:100%;
position: relative;
}
#center{
position: absolute;
top: 50%;
transform: translateY(-50%);
}
複製程式碼
首先top:50%先下移#main50%的高度,然後通過translateY(-50%)在上移本身50%的高度。
優點:不需要設定元素的固定高度。
缺點:居中元素被設定為absolute。
下移到#main50%的高度還有另外的方式
#center{
margin:50% auto 0; //下移到#main50%的高度
transform: translateY(-50%);
}
或
#center{
margin:50vh auto 0; //下移到視口50%的高度
transform: translateY(-50%);
}
複製程式碼
6、通過flex-box
#main{
height:100%;
display: flex;
align-items: center;
}
複製程式碼
優點:不需要設定元素的固定寬度。
缺點:父元素被設定為flex。