CSS如何实现垂直居中

149 阅读2分钟

css让元素在父元素中呈现水平垂直居中的形态有两种情况:

1.单行的文本、行内(inline)元素、行内块(inline-block)元素;
2.不固定宽高的块级盒子;
3.固定宽度的块级盒子;
单行的文本、行内(inline)元素、行内块(inline-block)元素:

1.水平居中,此类元素需要水平居中,则父级元素必须是块级元素,且父级元素需要设置样式:

.parent {
text-align: center;
}

2.垂直居中有两种方式:

2.1通过设置上下内间距达到垂直居中的效果;

.single-line {
padding-top: 30px; padding-bottom: 30px; 
}

2.2通过设置height和lint-height 一致达到垂直居中;

.single-line { 
height: 100px; line-height: 100px; 
}

固定宽高的块级盒子

1.absolute + 负margin js.jirengu.com/vuzucobuhi/…

.parent {
  width: 400px;
  height:500px;
  border: 1px solid #FFB366;
  position:relative;
}
.child1 {
  border: 1px solid #79e679;
  width:100px;
  height:100px;
  position:absolute;
  left:50%;
  top:50%;
  margin:-50px 0 0 -50px;
}

2.absolute + margin auto js.jirengu.com/bowuwiquye/…

.parent {
  width: 400px;
  height:500px;
  border: 1px solid #FFB366;
  position:relative;
}
.child {
  border: 1px solid #79e679;
  width:100px;
  height:100px;
  position:absolute;
  left:0;
  right:0;
  top:0;
  bottom:0;
  margin:auto;
  text-align: center;
  line-height: 100px;
}

方法三:absolute + calc js.jirengu.com/quwasuvimo/…

.parent {
  width: 400px;
  height:500px;
  border: 1px solid #FFB366;
  position:relative;
}
.child {
  border: 1px solid #79e679;
  width:100px;
  height:100px;
  position:absolute;
  left:calc(50% - 50px);
  top: calc(50% - 50px);
  text-align: center;
  line-height: 100px;
}

不固定宽高的块级盒子

方法一:absolute + transform js.jirengu.com/lofoqisepo/…

.parent {
  width: 400px;
  height:500px;
  border: 1px solid #FFB366;
  position:relative;
}
.child {
  border: 1px solid #79e679;
  width:100px;
  height:100px;
  position:absolute;
  left:50%;
  top:50%;
  transform: translate(-50%,-50%);
  text-align: center;
  line-height: 100px;
}

方法二:line-height + vertical-align js.jirengu.com/sayicizoja/…

.parent {
  line-height: 200px;
  border: 1px solid #FFB366;
  text-align: center;
}
.child {
  border: 1px solid #79e679;
  display:inline-block;
  line-height: initial;//水平方向居中
  vertical-align:middle;//垂直方向居中
}

方法三:table-cell js.jirengu.com/jolodahuje/…

.parent {
  width: 400px;
  height:400px;
  border: 1px solid #FFB366;
  display:table-cell;
  vertical-align:middle;
  text-align:center;
}
.child {
  border: 1px solid #79e679;
  display: inline-block;
}

方法四:flex js.jirengu.com/xipelohonu/…

.parent {
  width: 400px;
  height:400px;
  border: 1px solid #FFB366;
  display:flex;
  justify-content:center;
  align-items:center;
}
.child {
  border: 1px solid #79e679;
}
参考掘金用户:大海我来了
1.5 万字 CSS 基础拾遗(核心知识、常见需求) :juejin.cn/post/694120…