纯CSS实现垂直居中的7种方法
今天申请博客通过了,给大家讲讲我所看到过的纯css实现垂直居中的各种方法。为什么要把它作为第一篇文章呢?因为这是我刚开始接触前端学到的对我最有用的知识,希望大家也可以从中获益!
在CSS中实现水平居中是非常简单的,行内元素设置其父元素的text-align:center,块级元素就对其自身应用magrin:auto。然而,实现垂直居中就有点麻烦了,首先它是极其常见的需求,看似简单,在实践中,往往难如登天,当设计尺寸不固定时尤其如此。以下是我找到的一些方法:
方法一:行高line-height
(1)单行文本居中
HTML代码
<div class="box1"> <div class="box2">垂直居中</div> </div>
CSS代码
.box1{
height: 200px;
}
.box2{
line-height: 200px;
} (2)图片垂直居中
HTML代码
<div class="box1"> <img src="images/bg-sun.png" alt=""> </div>
CSS代码
.box1{
line-height:200px;
}
.box1 img{
vertical-align: middle;
} 方法二:table-cell
CSS代码
.box1{
display: table-cell;
vertical-align: middle;
text-align: center;
} 方法三:display:flex
(1)CSS代码
.box1{
display: flex;
}
.box2{
margin:auto;
} (2)CSS代码
.box1{
display: flex;
justify-content:center;
align-items:center;
} 方法四:绝对定位和负边距
(1)CSS代码
.box1{
position: relative;
}
.box2{
position: absolute;
top: 50%;
left: 50%;
margin-top: -10px;/*减去子元素高度一半*/
margin-left:-32px;/*减去子元素宽度一半*/
} (2)CSS代码
.box2{
position: absolute;
top:calc(50% - 10px);/*减去子元素高度一半*/
left:calc(50% - 32px);/*减去子元素宽度一半*/
} 方法五:绝对定位和0
CSS代码
1 .box2{
2 width: 50%;
3 height: 50%;
4 background: #555;
5 overflow: auto;
6 margin: auto;
7 position: absolute;
8 top: 0; left: 0; bottom: 0; right: 0;
9 } 方法六:translate
(1)CSS代码
.box2{
position: absolute;
top:50%;
left:50%;
transform:translate(-50%,-50%);
} (2)HTML代码
<body> <div class="box1"> </div> </body>
CSS代码
.box1{
width: 200px;
height: 200px;
background: #666;
margin: 50vh auto 0;
transform: translateY(-50%);
} 方法七:display:-webkit-box
CSS代码
.box2{
display: -webkit-box;
-webkit-box-pack:center;
-webkit-box-align:center;
-webkit-box-orient: vertical;
text-align: center
}