元素垂直居中的常见方法

    
  <--HTML-->
  <div class="box box1"> <div>flex</div> </div> <div class="box box2"> <div>inline-block</div> </div> <div class="box box3"> <div>position</div> </div> <div class="box box4"> <div class="cell"> <div>table</div> </div> </div> <div class="box box5"> <div>position+0</div> </div>

公共样式:

.box {
  width: 500px;
  height: 100px;
  background: lightblue;
  margin-bottom: 10px;
}
.box > div {
  width: 100px;
  height: 50px;
  line-height: 50px;
  text-align: center;
  background: pink;
}

1.display:flex: 

.box1 {
  display: flex;
  justify-content: center;
  align-items: center;
}

2.将元素设置为内联块再设置父元素的行高:

.box2 {
  line-height: 100px;
  text-align: center;
}
.box2 > div {
  display: inline-block;
}

3.使用position定位:

.box3 {
  position: relative;
}
.box3 > div {
  position: absolute;
  top: calc(50% - 25px);
  left: calc(50% - 50px);
}

4.给元素添加一个包裹层将元素设置为inline-block,包裹层设置为table-cell

.box4 {
  display: table;
  vertical-align: middle;
}
.box4 .cell {
  display: table-cell;
  background: lightblue;
  vertical-align: middle;
  text-align: center;
}
.box4 .cell > div {
  display: inline-block;
  background: pink;
  width: 100px;
  height: 50px;
}

5.还是使用position但是将top、left、right、bottom都设为0

.box5 {
  position: relative;
}
.box5 > div {
  position: absolute;
  margin: auto;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
}

在这几种方法中,当元素宽高改变时:

可以看出使用flex、table-cell、position+0这三种方法实现的结果依然是垂直居中,所以在元素宽高未知的情况下想要居中可以使用这三种方法。

posted @ 2017-10-28 17:00  法克大叔叔  阅读(218)  评论(0编辑  收藏  举报