css垂直居中
2020 M12 26
html布局
<div class="father">
<div class="child">child</div>
</div>
定位:方法一
绝对定位的子盒子相对父盒子定位,设置left,top为50%,子盒子左上角会在父盒子内水平垂直居中。 此时,再让左边距上边距偏离宽高的一半,则可使整个子盒子在父盒子内水平垂直居中。 这种方法的局限性是必须事先清楚子盒子的宽和高,因为涉及margin-left和margin-top的计算。
.father{
/* 关键代码 start*/
position: relative;
/* 关键代码 end*/
width:400px;
height:400px;
background-color:#333;
margin: 100px auto;
}
.child{
background-color: #fff;
/* 关键代码 start*/
position: absolute;
width:100px;
height:100px;
left:50%;
top:50%;
margin-left:-50px;
margin-top:-50px;
/* 关键代码 end*/
}
定位:方法二
绝对定位的子盒子相对父盒子定位,设置left,top,right,bottom为0,子盒子在父盒子左上角显示。 此时,再让margin自适应,则可使整个子盒子在父盒子内水平垂直居中。 这种方法的局限性是必须设置子盒子的宽和高,尽管不用于计算。
.child{
background-color: #fff;
/* 关键代码 start*/
width:100px;
height:100px;
position: absolute;
left:0;
top:0;
right:0;
bottom:0;
margin:auto;
/* 关键代码 end*/
}
定位:方法三
绝对定位的子盒子相对父盒子定位,设置left,top为50%,子盒子左上角会在父盒子内水平垂直居中。 此时,设置translate使其沿着XY轴偏移自身宽高的一半。 好处是不需要设置宽高,局限是存在兼容问题。
.child{
background-color: #fff;
/* 关键代码 start*/
position: absolute;
left:50%;
top:50%;
transform: translate(-50%,-50%);
/* 关键代码 end*/
}
flex
将父盒子转为flex布局,设置主轴和侧轴元素居中对齐,则子盒子在父盒子中水平垂直居中。 局限性是存在兼容问题,好处是灵活简单。
.father{
width:400px;
height:400px;
background-color:#333;
margin: 100px auto;
/* 关键代码 start*/
display:flex;
justify-content: center;
align-items: center;
/* 关键代码 end*/
}
.child{
background-color: #fff;
}