面试中经常会被问到如何使元素水平垂直居中,有哪些方法可以做到?
针对此问题,特意总结如下~
方法一: 定位(主要是值子绝父相)与margin负值配合----依赖于子元素宽/高
(使用绝对定位或固定定位后,所有元素,不管是行内元素还是行内块元素、块状元素,都可以定义宽高)
该方法适合子元素宽/高已知的情况~
<div class="box">
<span class="box1"></span>
</div>
.box {
width: 200px;
height: 200px;
background-color: rgb(220, 230, 245);
/* 父相 */
position: relative;
}
.box1 {
width: 100px;
height: 100px;
background-color: yellow;
position: absolute;
/* 定位距离上面50% */
top: 50%;
/* 定位距离左侧50% */
left: 50%;
/* 定位在往下退自身高度的50%,即100*50% = 50px */
margin-top: -50px;
/* 定位在往左退自身高度的50%,即100*50% = 50px */
margin-left: -50px;
}
方法二: 定位(主要是值子绝父相)与变换负值配合----不依赖于子元素宽/高
(使用绝对定位或固定定位后,所有元素,不管是行内元素还是行内块元素、块状元素,都可以定义宽高)
该方法在子元素宽/高已知或未知的情况下都适合~
<div class="box">
<span class="box1">很好很好很好很好很好很好很好很好很好很好</span>
</div>
.box {
width: 200px;
height: 200px;
background-color: rgb(220, 230, 245);
position: relative;
}
.box1 {
background-color: yellow;
position: absolute;
top: 50%;
left: 50%;
/* box1左移自身宽度的50% 上移自身高度的50% */
transform: translateX(-50%) translateY(-50%);
}
方法三:定位与margin: auto配合
该方法适合于子元素宽/高已知的情况~
.box {
width: 200px;
height: 200px;
background-color: rgb(220, 230, 245);
/* 父相 */
position: relative;
}
.box1 {
width: 100px;
height: 100px;
background-color: yellow;
position: absolute;
/* 以下都不可缺省 */
left: 0;
top: 0;
right: 0;
bottom: 0;
margin: auto;
}
方法四:利用flex布局
(使用flex布局后,所有元素,不管是行内元素还是行内块元素、块状元素,都可以定义宽高)
该方法适合于宽/高已知/未知的情况~
<div class="box">
<span class="box1"></span>
</div>
.box {
width: 200px;
height: 200px;
background-color: rgb(220, 230, 245);
display: flex;
/* 设置主轴方向居中 */
justify-content: center;
/* 设置侧轴方向居中 */
align-items: center;
}
.box1 {
width: 100px;
height: 100px;
background-color: yellow;
}
方法五: 针对行内元素的居中对齐方法
单行文本(给父元素加上):
水平居中: text-align: center
垂直居中: height = line-height
<div class="box">
<span class="box1">很好</span>
</div>
.box {
width: 200px;
height: 200px;
line-height: 200px;
background-color: rgb(220, 230, 245);
text-align: center;
}
.box1 {
background-color: yellow;
}
方法六: 针对行内元素的居中对齐方法
多行文本:
display: table(给父元素加上)
display: table-cell(给子元素加上)
vertical-align: middle(给子元素加上)
text-aline: center(给子元素加上)
.box {
width: 200px;
height: 200px;
background-color: rgb(220, 230, 245);
display: table;
}
.box1 {
display: table-cell;
vertical-align: middle;
text-align: center;
}
方法七: 针对行内元素的居中对齐方法
多行文本:
display: grid(给父元素加上)
margin: auto(给子元素加上)
text-aline: center(给子元素加上)
.box {
width: 200px;
height: 200px;
background-color: rgb(220, 230, 245);
display: grid;
}
.box1 {
background-color: yellow;
margin: auto;
text-align: center;
}
以上就是垂直居中布局的所有方案~点赞收藏哦~