CSS 实现垂直居中的 8 种方式

2021-09-25  本文已影响0人  Emonzan

初始代码:

<div class="container">
  <div class="content"></div>
</div>

.container {
  background-color: gray;
  height: 30rem; /* 高度可以随意变化  */
}
.content {
  background-color: wheat;
  height: 10rem;
  width: 10rem;
}

最终效果:


css-center.png

1. 用margin: auto的方法

原理:

元素 Position
内联元素 float
浮动元素 inline
块级元素 absulute/fixed
.container {
  position: relative; /* 设置父元素position为relative */
}
.content {
  position: absolute;
  top: 0; /* 设置四个方向是位置为0  */
  left: 0;
  right: 0;
  bottom: 0;
  margin: auto; /* 利用margin: auto实现垂直居中  */
}

2. 用top: 50%; 加上 translateY(-50%)

.container {
  position: relative; /* 设置父元素position为relative */
}
.content {
  position: absolute;
  top: 50%; /* 设置子元素的起始位置为父元素垂直方向50%的位置 */
  transform: translateY(-50%); /* 再往上平移子元素高度的50% */
  /* 这两条可以同时实现水平居中
  transform: translate(-50%, -50%);
  left: 50% */
}

3. display: flex加上margin: auto

.container {
  display: flex; /* 设置父元素设置为flex容器 */
}
.content {
  margin: auto;
}

4. 通过设置 flex 容器的justify-contentalign-items两个属性来实现

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

5. 通过设置 flex 中子元素的align-self属性

在 flex 布局中,可以通过设置子元素的align-self来单独定义对齐方式。它和align-items的区别是:它是定义在子元素上,会覆盖 flex 容器中定义的align-items属性

.container {
  display: flex; /* 设置父元素设置为flex容器 */
}
.content {
  align-self: center;
  margin: 0 auto; /* 实现水平居中,flex布局不支持justify-self */
}

6. grid 布局+margin:auto

.container {
  display: grid;
}
.content {
  margin: auto;
}

7. grid 布局,设置容器的align-contentjustify-items

.container {
  display: grid;
  align-items: center;
  justify-content: center;
}

8. grid 布局,单独设置子元素的对齐方式

.container {
  display: grid;
}
.content {
  justify-self: center; /*  设置子元素垂直居中 */
  align-self: center; /* 设置子元素水平居中*/
}

总结:

无论是垂直居中或者水平居中,要点是:

上一篇下一篇

猜你喜欢

热点阅读