CSS-常见盒子居中方式
wenking 7/10/2023 css
# 盒子居中方式
# 水平居中
块元素如果不指定宽度,其宽度将同父元素的宽度相同,默认情况下为浏览器屏幕的宽度;
- 盒子宽度已知
利用外边距即可让盒子水平居中
.box {
width: 300px;
margin: 0 auto;
}
1
2
3
4
2
3
4
- 盒子宽度未知
利用绝对定位+transform即可让盒子居中
父盒子需要设置未相对定位,如果不设置,则相对浏览器的屏幕宽度和高度进行定位;
.box {
position: absolute;
left: 50%;
transform: translateX(-50%);
}
1
2
3
4
5
2
3
4
5
# 垂直居中
块元素如果不指定高度,其高将为0,因此垂直居中的前提条件是父盒子需要有高度
块级元素设置宽度后仍占据一行空间,因此margin:auto;会将这一行的剩余空间平均分配给左右外边距。
margin:auto 能使块级元素水平居中,但是不能垂直居中,因为垂直方向上默认没有剩余的空间。
行内元素margin:auto既不能水平居中也不能垂直居中,因为行内元素水平垂直方向上默认都没有剩余的空间。
- 盒子高度已知
利用绝对定位+边距进行垂直居中,宽度已知即可水平居中,高度已知即可垂直居中;
right:定义了定位元素右外边距边界与其包含块右边界之间的偏移。
定位后设置上下左右都为0,意味着子盒子占据父元素的四条边,即父元素被子元素完全占据,最终子元素将以左上角(即top、left)进行定位,并且占据父元素的剩余空间, margin:auto就会平分剩余空间;
.father {
height: 300px;
position: relative;
}
.box {
width: 300px;
height: 50px;
margin: auto;
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 盒子高度未知
利用绝对定位 + transform,transform回滚元素的宽度和高度;
.father {
height: 300px;
position: relative;
}
.box {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
利用flex布局
.father {
justify-content: center; /*子元素水平居中*/
align-items: center; /*子元素垂直居中*/
display: flex;
}
1
2
3
4
5
2
3
4
5