tanjiayq 2019-07-01
<div class="father"> <div class="child"> </div> </div>
根据如上结构,通过css实现水平垂直居中。
利用父元素相对定位和子元素绝对定位进行水平垂直居中。根据是否知道子元素宽高,使用数值或者百分比的方式进行定位。
.father {
width: 100px;
height: 100px;
background-color: grey;
position: relative;
}
.child {
width: 50px;
height: 20px;
background-color: red;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
}通过设置四向为0和margin: auto实现。
.father {
width: 100px;
height: 100px;
background-color: grey;
position: relative;
}
.child {
width: 50px;
height: 20px;
background-color: red;
position: absolute;
left: 50%;
top: 50%;
margin: -10px -25px;
}通过设置left和top使child左上角位置移动到中间,然后再移动自身宽高一般使child中心至中间。
.father {
width: 100px;
height: 100px;
background-color: grey;
position: relative;
}
.child {
width: 50px;
height: 20px;
background-color: red;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}.father {
width: 100px;
height: 100px;
background-color: grey;
position: relative;
}
.child {
width: 50px;
height: 20px;
background-color: red;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-25px, -10px);
}这几种方法使用了绝对定位,margin或者transform来使子元素水平垂直居中,根据是否知道具体宽高来使用margin或者transform。
.father {
width: 100px;
height: 100px;
background-color: grey;
display: flex;
}
.child {
width: 50px;
height: 20px;
background-color: red;
margin: auto;
}.father {
width: 100px;
height: 100px;
background-color: grey;
display: flex;
justify-content: center;
align-items:center;
}
.child {
width: 50px;
height: 20px;
background-color: red;
}这两种使用了flex弹性盒子布局来实现,随着浏览器兼容性的普及,弹性盒子也越来流行了。
.father {
width: 100px;
height: 100px;
background-color: grey;
display: table-cell;
text-align:center;
vertical-align: middle;
}
.child {
display:inline-block;
width:50px;
height:20px;
background-color: red;
}使用了table-cell以及行内块元素来实现
.father {
width: 100px;
height: 100px;
background-color: grey;
text-align:center;
}
.child {
display:inline-block;
width:50px;
height:20px;
background-color: red;
vertical-align: middle;
}
.father:after{
content:'';
width:0;
height: 100%;
display: inline-block;
vertical-align: middle;
}利用伪元素撑开高度垂直居中。
.father {
width: 100px;
line-height: 100px;
background-color: grey;
text-align: center;
}
.child {
display: inline-block;
width: 50px;
height: 20px;
background-color: red;
vertical-align: middle;
}利用父元素line-height与inline-block子元素vertical-align垂直居中
是不是有点疑惑为啥1、2、3都要用absolute来定位,用relative不行吗?
答案是可以的。