让盒子在父盒中是很经典的问题,自己整理了以下这些方法参考:
1.利用子绝父相+margin实现。
- 给子元素相对定位,父元素绝对定位
- 给子元素设置left:50%;top:50%;
- 利用margin-left:-自身宽度的一半,-自身高度的一半;
<style>
.fa {
position: relative;
width: 500px;
height: 500px;
background-color: rgb(122, 247, 236);
border: 1px solid black;
margin: 50px auto 0;
}
.son {
position: absolute;
top: 50%;
left: 50%;
margin-top: -100px;
margin-left: -100px;
width: 200px;
height: 200px;
}
</style>
<body>
<div class="fa">
<div class="son"></div>
</div>
</body>
2.子绝父相+margin:auto;
- 设置子元素绝对定位,父元素相对定位
- 子元素设置top: 0;left: 0;right: 0;bottom: 0;
- 在给子元素设置margin: auto;实现水平垂直居中
<style>
.fa {
position: relative;
width: 500px;
height: 500px;
background-color: rgb(122, 247, 236);
border: 1px solid black;
margin: 50px auto 0;
}
.son {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
width: 200px;
height: 200px;
background-color: rgb(235, 238, 73);
}
</style>
<body>
<div class="fa">
<div class="son"></div>
</div>
</body>
3.利用transform属性实现
注意:transform是css3添加的属性,IE10及以上和标准浏览器最新版本才可以使用,IE9使用兼容写法也可以使用。
- 给子元素相对定位,父元素绝对定位
- 给子元素设置left:50%;top:50%;
- 在给子元素设置transform: translate(-50%,-50%);
<style>
.fa {
position: relative;
width: 500px;
height: 500px;
background-color: rgb(122, 247, 236);
border: 1px solid black;
margin: 50px auto 0;
}
.son {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 200px;
height: 200px;
background-color: rgb(235, 238, 73);
}
</style>
<body>
<div class="fa">
<div class="son"></div>
</div>
</body>
4.利用弹性盒模型实现
注意:弹性盒模型在IE11及以上和标准浏览器才可以使用(设置写移动端)
- 给父盒设置弹性盒模型
- 设置justify-content: center;实现子盒水平居中
- 设置align-itmes: center;实现子盒垂直居中
<style>
.fa {
display: flex;
justify-content: center;
align-items: center;
width: 500px;
height: 500px;
background-color: rgb(122, 247, 236);
border: 1px solid black;
margin: 50px auto 0;
}
.son {
width: 200px;
height: 200px;
background-color: rgb(235, 238, 73);
}
</style>
<body>
<div class="fa">
<div class="son"></div>
</div>
</body>
5.利用margin与transform方法
- 给子元素设置margin: 50% auto 0;*【注意:这个地方会出现父子上外边距合并问题,给父元素设置overflow: hidden;或者设置边框都可以解决】
- 给子元素设置transform: translateY(-50%);
<style>
.fa {
width: 500px;
height: 500px;
background-color: rgb(122, 247, 236);
border: 1px solid black;
margin: 50px auto 0;
/* overflow: hidden; */
}
.son {
width: 200px;
height: 200px;
margin: 50% auto 0;
transform: translateY(-50%);
background-color: rgb(235, 238, 73);
}
</style>
<body>
<div class="fa">
<div class="son"></div>
</div>
</body>
6.transform实现视觉上水平垂直居中;
- 给子元素设置transform: translate((父盒宽度-子盒宽度)/2, (父盒高度-子盒高度)/2);
- 这种方法只适合父盒子盒宽度好算的情况下,实现视觉上的居中。
<style>
.fa {
width: 500px;
height: 500px;
background-color: rgb(122, 247, 236);
border: 1px solid black;
margin: 50px auto 0;
}
.son {
width: 200px;
height: 200px;
transform: translate(150px,150px);
background-color: rgb(235, 238, 73);
}
</style>
<body>
<div class="fa">
<div class="son"></div>
</div>
</body>
*[以上方法由自己总结,欢迎各位大佬补充和指正,谢谢]