公共代码
HTML
<div class="box">
<div class="small"></div>
</div>
CSS
* {
margin: 0;
padding: 0;
}
.box {
width: 300px;
height: 300px;
background: #ddd;
}
.small {
background: red;
}
- 第一种absolute+margin
方式1 CSS
.box {
position: relative;
}
.small {
position: absolute;
width: 100px;
height: 100px;
top: 50%;
left: 50%;
margin: -50px 0 0 -50px;
}
方式2
.box {
position: relative;
}
.small {
position: absolute;
width: 100px;
height: 100px;
left: 0;
top: 0;
bottom: 0;
right: 0;
margin: auto;
}
- 第二种 absolute + calc
.box {
position: relative;
}
.small {
position: absolute;
width: 100px;
height: 100px;
left: calc(50% - 50px);
top: calc(50% - 50px);
}
第三种 absolute + transform
.box {
position: relative;
}
.small {
position: absolute;
width: 100px;
height: 100px;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
}
缺点:上面这几种原理都是需要把子元素转成绝对定位,再根据left和top计算,使其居中,但是这些方式会导致脱离文档流,对于某些场景可能不使用
第四种
转换成行内元素,原理是行高等于高度,元素会垂直居中
.box {
line-height: 300px;
font-size: 0;
text-align: center;
}
.small {
display: inline-block;
font-size: 16px;
line-height: 16px;
vertical-align: middle;
padding: 5px;
}
第五种:table-cell
.box {
display: table-cell;
text-align: center;
vertical-align: middle;
}
.small {
padding: 10px;
display: inline-block;
}
第六种flex:最常用,没什么好说
第七种grid布局