- text-align: center; 实现水平居中 行内元素
- margin: 0 auto; 实现水平居中 块级元素
- display:table-cell;vertical-align:middle;实现垂直居中
- 父相子绝(position设置)实现水平垂直居中
- 弹性布局 (display: flex)实现水平垂直居中
视情况选择不同的方式
一:行内元素在父元素内水平垂直居中
div{text-align:center; height:50px; line-height:50px} //单行文本
div{ text-align:center; display:table-cell;vertical-align:middle}
二:块级元素在块级元素内水平垂直居中
1.父相子绝
/*父元素相对定位*/
.outside {
width: 400px;
height:400px;
position: relative;
}
/*宽高已知*/
/*方法一 margin:auto;*/
.inner {
width: 100px;
height: 100px;
position: absolute;
left: 0;
right: 0;
bottom: 0;
top:0;
margin: auto;
}
/*方法二 绝对定位+负边距*/
.inner {
width: 100px;
height: 100px;
position: absolute;
left:50%;
top:50%;
margin-left:-50px;
margin-top: -50px;
}
/*宽高未知*/
/*方法三 绝对定位+translate*/
.inner{
position: absolute;
left:50%;
top:50%;
transform:translate(-50%,-50%);
}
2.flex布局 无须预先知道宽高
/*方法一*/
.outSide{
display: flex;
}
.inner{
margin: auto;
}
/*方法二*/
.outside{
display: flex;
justify-content: center;
align-items: center;
}
3.display: table-cell
.outSide{
width: 300px;
height: 300px;
display: table-cell;
vertical-align: middle;
}
.inside{
width: 200px;
margin: 0 auto;
}
三: 利用margin: 0 auto实现水平居中的生效条件
块级元素: 需要设置宽度
行内元素: 需要设置display:block以及设置宽度值
行内块元素: 设置display: block,(自带宽度的行内块元素可以不设置宽度)
position设为fixed、absolute情况下以及float情况下,盒子脱离文档流,margin: 0 auto 不生效