最新CSS 水平垂直居中方式汇总

垂直居中主要分为了两种类型:居中元素宽高已知 和 居中元素宽高未知,那么我们就结合这两种类型来一一举例。

目录

居中元素宽高已知

1、absolute + margin auto

2、absolute + 负 margin

3、absolute + calc

居中元素宽高未知

1、absolute + transform

3、table 表格元素(不推荐)

4、css-table(display:table-cell)

5、flex 布局(推荐)


居中元素宽高已知

1、absolute + margin auto

注意:父元素与当前元素的宽高已知

.parent{
  position: relative;
  width: 500px;
  height: 500px;
  border: 1px solid blue;
}
 
.child{
  background: green;
  width: 200px; 
  height: 200px;
  /* 核心代码 */
  position:absolute;
  top: 0; 
  bottom: 0; 
  left: 0; 
  right: 0;
  margin: auto;
}

2、absolute + 负 margin

注意:负 margin 是基于自身的高度和宽度来进行位移的(设置为自身的 -1/2)

.parent{
  position:relative;
  width: 500px;
  height: 500px;
  border: 1px solid blue;
}
 
.child{
  background: green;
  width: 200px; 
  height: 200px;
  /* 核心代码 */
  position:absolute;
  top: 50%; 
  left: 50%;
  margin-top: -100px;
  margin-left: -100px;
}

3、absolute + calc

注意:使用 CSS3 的一个计算函数来进行计算(相当于负 margin 的简化版)

.parent{
  position:relative;
  width: 500px;
  height: 500px;
  border: 1px solid blue;
}
 
.child{
  background: green;
  width: 200px; 
  height: 200px;
  /* 核心代码 */
  position:absolute;
  top: calc(50% - 100px);
  left: calc(50% - 100px);
}

居中元素宽高未知

1、absolute + transform

注意:transform 的 translate 属性值如果是一个百分比,那么这个百分比是基于自身的宽高进行计算

.parent{
  position: relative;
  width: 500px;
  height: 500px;
  border: 1px solid blue;
}
 
.child{
  background: green;
  /* 核心代码 */
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

2、line-height + vertical-align
把当前元素设置为行内元素,然后通过设置父元素的 text-align: center来实现水平居中;同时通过设置当前元素的 vertical-align: middle来实现垂直居中;最后设置当前元素的 line-height: initial来继承父元素的line-height
 

.parent{
  width: 500px;
  border: 1px solid blue;
  /* 核心代码 */
  line-height: 500px;
  text-align: center;
}
 
.child{
  background: green;
  /* 核心代码 */
  display: inline-block;
  vertical-align: middle;
  line-height: initial;
}

3、table 表格元素(不推荐)

通过经典的table来进行布局(不推荐)

<table>
  <tbody>
    <tr>
      <td class="parent">
        <div class="child"></div>
      </td>
    </tr>
  </tbody>
</table>
 
<style>
  .parent{
    width: 500px;
    height: 500px;
    border: 1px solid blue;
    /* 核心代码 */
    text-align: center;
  }
  .child{
    background: green;
    /* 核心代码 */
    display: inline-block;
  }
</style>

4、css-table(display:table-cell)

不写 table 元素,也可以使用 table 的特性,需使用 css-table(display:table-cell)

.parent{
  width: 500px;
  height: 500px;
  border: 1px solid blue;
  /* 核心代码 */
  display: table-cell;
  text-align: center;
  vertical-align: middle;
}
 
.child{
  background: green;
  /* 核心代码 */
  display: inline-block;
}

5、flex 布局(推荐)

.parent{
  width: 500px;
  height: 500px;
  border: 1px solid blue;
  /* 核心代码 */
  display: flex;
  /* 水平居中 */
  justify-content: center;
  /* 垂直居中 */
  align-items: center;
}
.child{
  background: green;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学而时习之不亦说乎。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值