本章介紹幾種常見的水平居中和垂直居中的實現(xiàn)方式
<!DOCTYPE html>
<html>
<head>
<title>水平居中和垂直居中</title>
<meta charset="utf-8">
</head>
<style type="text/css">
.box { /* 在一個基礎的盒子里面顯示效果 */
position: relative;
float: left;
width: 250px;
height: 200px;
margin: 20px;
border: 1px solid #000;
}
.lev1 {
width: 150px;
margin: 0 auto;
background-color: pink;
}
.box .lev2 {
position: absolute;
width: 150px;
height: 100px;
margin: auto;
left: 0;
right: 0; /* 增加 top 和 bottom 為 0 會使其水平垂直居中 */
background-color: pink;
}
.box .ver-lev1 {
position: relative; /* 相對定位或絕對定位均可 */
width: 150px;
height: 100px;
top: 50%;
left: 50%;
margin: -50px 0 0 -75px; /* 外邊距為自身寬高的一半 */
background-color: pink;
}
.box .ver-lev2 {
position: absolute; /* 相對定位或絕對定位均可 */
width: 150px;
height: 100px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); /* translate 定義轉換, 橫縱坐標轉換 -50% */
background-color: pink;
}
.flex {
display: flex;
align-items: center; /* 垂直居中 */
justify-content: center; /* 水平居中 */
width: 400px;
height: 200px;
border: 1px solid #000;
margin: 20px;
}
.flex .ver-lev3 {
width: 300px;
height: 50px;
background-color: pink;
}
.table-cell {
display: table-cell;
vertical-align: middle;
width: 400px;
height: 200px;
/* margin: 20px; */ /* table-cell沒有margin值 */
border: 1px solid #000;
}
.table-cell .ver1 {
width: 300px;
height: 50px;
text-align: center;
background-color: pink;
}
</style>
<body>
<div class="box"><div class="lev1">水平居中: 給div設置一個寬度, 然后添加 margin:0 auto 屬性</div></div>
<div class="box"><div class="lev2">水平居中: 讓絕對定位的 div 居中</div></div>
<div class="box"><div class="ver-lev1">水平垂直居中: 受限于容器的寬高, 設置層的外邊距</div></div>
<div class="box"><div class="ver-lev2">水平垂直居中: 不受限于容器的寬高, 利用 `transform` 屬性 (2D 或 3D 轉換)</div></div>
<div style="clear: left;"></div> <!-- 清除前面的左浮動 -->
<div class="flex"><div class="ver-lev3">水平垂直居中: 使用 display 中的 flex 布局 (與 float 或 position 混用會被破壞)</div></div>
<div class="table-cell"><div class="ver1">垂直居中: 使用 display 中的 table-cell 值 (與 float 或 position 混用會被破壞)</div></div>
</body>
</html>