CSS 水平垂直居中方法

65 阅读2分钟

1、借助 table (父元素定宽高)

这种方法父、子元素不需要设置宽高(这里设置宽高是为了截图效果)。
<div class="parent">
      <div class="child">子元素</div>
</div>

// CSS
.parent {
  width: 200px;
  height: 200px;
  display: table;
  background-color: cornflowerblue;
}
.child {
  display: table-cell;
  background-color: aqua;
  vertical-align: middle;
  text-align: center;
}

image.png

2、利用伪元素

这种方法父、子元素不需要设置宽高(这里设置宽高是为了截图效果)。
需要给伪元素设置高度撑满父元素。
<div class="parent">
      <div class="child">利用伪元素</div>
</div>
.parent {
  width: 300px;
  height: 300px;
  background-color: cornflowerblue;
  text-align: center;
}

.parent::before, .parent::after {
  content:'';
  height: 100%;
  display: inline-block;
  vertical-align: middle;
}
.child {
  display: inline-block;
  vertical-align: middle;
  background-color: red;
}

image.png

3、绝对定位 + 负 margin

此种方法父元素和子元素都必须设置宽高
<div class="parent">
    <div class="child">绝对定位 + 负margin</div>
</div>

    .parent{
    height: 300px;
    width: 300px;
    position: relative;
    background-color: cornflowerblue;
}
.child{
    width: 100px;
    height: 100px;
    background-color: aqua;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-left: -50px;
    margin-top: -50px;
}

image.png

4、transform: translate()

这种方法和 负margin 一样,就是把 负的margin 换成 transform: translate(-50%, -50%),
父元素需要规定宽高,子元素不用规定宽高。
<div class="parent">
      <div class="child">绝对定位 + transform: translate(-50%, -50%)</div>
</div>

.parent{
  height: 300px;
  width: 300px;
  position: relative;
  background-color: cornflowerblue;
}
.child{
  /*width: 100px;*/
  /*height: 100px;*/
  background-color: aqua;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

image.png

5、绝对定位 + margin: auto

这种方法父子元素都需要给定宽高。
 <div class="parent">
      <div class="child">绝对定位 + margin: auto</div>
</div>

.parent{
  height: 300px;
  width: 300px;
  position: relative;
  background-color: cornflowerblue;
}
.child{
  width: 100px;
  height: 100px;
  background-color: aqua;
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto;
}

image.png

6、  flex

flex 布局不需要给父元素、子元素设置宽高(此处父元素设置宽高是为了截图效果)。
<div class="parent">
      <div class="child">flex</div>
</div>

.parent{
  width: 300px;
  height: 300px;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: cornflowerblue;
}

.child {
  background-color: aqua;
}

image.png