11种锤爆面试官的 CSS 垂直居中
CSS 实现元素垂直居中的方法有很多种,以下是其中的 11 种方法:
- 使用 Flexbox 布局
.parent {
display: flex;
align-items: center; /* 垂直居中 */
justify-content: center; /* 水平居中 */
}
- 使用 Grid 布局
.parent {
display: grid;
place-items: center;
}
- 使用绝对定位和 transform
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
transform: translateY(-50%);
}
- 使用绝对定位和 calc() 函数
.parent {
position: relative;
}
.child {
position: absolute;
top: calc(50% - (child-height / 2));
}
- 使用 line-height 等于 parent 的高度
.parent {
height: 100px;
line-height: 100px;
}
.child {
display: inline-block;
vertical-align: middle;
}
- 使用 display: table 和 table-cell
.parent {
display: table;
height: 200px; /* 可以是任意值 */
}
.child {
display: table-cell;
vertical-align: middle;
text-align: center;
}
- 使用 margin: auto 和定高
.parent {
position: relative;
height: 200px; /* 可以是任意值 */
}
.child {
margin: auto;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
height: 50px; /* child 的高度 */
}
- 使用 BFC (Block Formatting Context)
.parent {
overflow: auto; /* 或者使用 'hidden' */
}
.child {
display: inline-block;
vertical-align: middle;
height: 100px; /* child 的高度 */
}
.spacer {
height: 100%;
width: 1px;
display: inline-block;
vertical-align: middle;
}
- 使用伪元素和 transform
.parent {
position: relative;
}
.child {
position: absolute;
top: 50%;
}
.child::before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
}
.child {
display: inline-block;
vertical-align: middle;
transform: translateY(-50%);
}
- 使用伪元素和 margin: auto
.parent {
position: relative;
height: 200px; /* 可以是任意值 */
}
.child {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
height: 50px; /* child 的高度 */
}
.parent::before {
content: '';
display: inline-block;
height: 100%;
margin-left: -0.1px; /* 解决 IE 的布局Bug */
}
.child {
display: inline-block;
vertical-align: middle;
height: 50px; /* child 的高度 */
}
- 使用 CSS-doodle 的 CSS 居中方法
:doodle {
@grid: 1x1;
评论已关闭