最近在对以前学过的基础知识进行梳理,垂直居中布局为css中最经典的问题之一。在这里对所有解决方案做一个总结。
table
假设代码如下
<div id="outer">
<div id="inner"></div>
</div>
实现方式
#outer{
display: table-cell;
vertical-align: middle;
text-align: center;
}
#inner{
display: inline-block;
}
将
div变为表格元素,然后将其居中
absolute+margin
假设代码如下
<div id="outer">
<div id="inner"></div>
</div>
实现方式
#outer{
position: relative;
}
#inner{
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
该方法操作简单,兼容性也不错
absolute+transform
假设代码如下
<div id="outer">
<div id="inner"></div>
</div>
实现方式
#outer{
position: relative;
}
#inner{
position: absolute;
top: 50% ;
left: 50%;
transform: translate(-50%,-50%);
}
向左向下移动50%父级宽高位置后,通过translate修正偏移的子元素宽高达到垂直水平居中
flex
<div id="outer">
<div id="inner"></div>
</div>
实现方式
#outer{
display: flex;
align-items: center;
justify-content: center;
}
最优解决方式,兼容性好操作简单,flex为当下最流行布局方式。
flex+margin
<div id="outer">
<div id="inner"></div>
</div>
实现方式
#outer{
display: flex;
}
#innder{
margin: auto;
}
设置为弹性盒子布局后,子元素通过margin自适应居中
grid
<div id="outer">
<div id="inner"></div>
</div>
实现方式
#outer{
display: grid;
align-items: center;
justify-items: center;
}
css最近二维布局方式,解决方法类似flex,兼容性较差不支持IE,但功能强大