1. 水平居中(margin: auto;)子父元素寬度固定,子元素上設置 margin: auto; 子元素不能設置浮動,否則居中失效。
#div1{
width: 300px;
height: 300px;
border: 1px solid red;
}
#div1 p {
width: 100px;
height: 100px;
background-color: green;
/*float: left; !*如果設置了浮動,則自動居中就會失效。*!*/
margin: 0 auto;
}
<div id="div1">
<p></p>
</div>

2. 水平居中,子父元素寬度固定,父元素設置 text-align: center;
子元素設置 display: inline-block; 子元素不能設置浮動,否則居中失效。
如果將元素設置為 inline , 則元素的寬高設置會失效,這就需要內容來撐起盒子
#div2 {
width: 300px;
height: 300px;
border: 1px solid red;
/*position: relative;*/
text-align: center;
}
#div2 p{
width: 100px;
height: 100px;
background-color: green;
margin: 0;
/*float: left; !*如果設置了浮動,則自動居中就會失效。*!*/
display: inline-block;
/*display: inline;*/
/*display: inline-flex;*/
}
<div id="div2">
<h4>其他內容</h4>
<p></p>
<h3>其他內容</h3>
</div>

1. 水平垂直居中,子元素相對於父元素絕對定位,
子元素top,left設置為50%,子元素margin的top,left減去自身高,寬的一半。
#div3 {
width: 300px;
height: 300px;
border: 1px solid red;
position: relative;
}
#div3 p {
width: 100px;
height: 100px;
background-color: green;
/*margin-top: 10%; !*百分比相對於父元素*!*/
/*padding-top: 10%; !*百分比相對於父元素*!*/
position: absolute;
top: 50%;
left: 50%;
margin-top: -50px;
margin-left: -50px;
}
<div id="div3">
<p></p>
<h3>其他內容</h3>
</div>

2. 水平垂直居中,子元素相對於父元素絕對定位,
將子元素的top,right,bottom,left均設為0,然后設置子元素 margin: auto;
#div4{
width: 300px;
height: 300px;
border: 1px solid red;
position: relative;
}
#div4 p{
width: 100px;
height: 100px;
background-color: green;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
margin: auto;
}
<div id="div4">
<p></p>
<h3>其他內容</h3>
</div>

3. 水平垂直居中,父元素設置 display: table-cell; vertical-align: middle;
子元素設置 margin: auto;
這種方式是讓所有的子元素作為一個整體垂直居中,並不能單獨指定某一個子元素居中
#div5{
width: 300px;
height: 300px;
border: 1px solid red;
display: table-cell;
vertical-align: middle;
}
#div5 p{
width: 100px;
height: 100px;
background-color: green;
margin: auto;
}
<div id="div5">
<p></p>
</div>

4. 水平垂直居中,子元素相對定位,top,let設為50%,transform: translate(-50%, -50%);
這種方式並不會釋放子元素在文檔中所占的位置。
#div6{
width: 300px;
height: 300px;
border: 1px solid red;
}
#div6 p {
width: 100px;
height: 100px;
background-color: green;
margin: 0;
position: relative;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<div id="div6">
<p></p>
<h3>其他內容</h3>
</div>

5. 水平垂直居中,子元素相對於父元素絕對定位,
子元素top,let設為50%,transform: translate(-50%, -50%);
這種方式會釋放子元素在文檔中所占的位置
#div7{
width: 300px;
height: 300px;
border: 1px solid red;
position: relative;
}
#div7 p {
width: 100px;
height: 100px;
background-color: green;
margin: 0;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<div id="div7">
<p></p>
<h3>其他內容</h3>
</div>

6. 水平垂直居中,父元素設置 display: flex; justify-content: center; align-items: center;
justify-content: center; 是讓所有的子元素作為一個整體居中。
#div8{
width: 300px;
height: 300px;
border: 1px solid red;
display: flex;
justify-content: center;
align-items: center;
}
#div8 p{
width: 100px;
height: 100px;
background-color: green;
margin: 0;
}
<div id="div8">
<p></p>
</div>
