CSS 实现水平垂直居中方法

CSS 中实现水平垂直居中的方法很多,各有优缺点。下面就为大家一一介绍,完整代码可以查看Demo

 flex 方案

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

强烈推荐,几行代码即可实现。查看Demo

 

grid 方案

.parentElement {
  display: grid;
}

.childElement {
  align-self: center;
  justify-self: center;
}

和 flex 一样,代码量少,不过兼容性不如 flex。查看Demo 

 

 transform 方案

.childElement {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

将 translate 设置为-50%,即可实现居中。查看Demo 

 

table 方案

.parentElement {
  text-align: center;
}

.childElement {
  display: inline-block;
}

tabel 自带垂直居中,只要添加一个水平居中属性即可。缺点:HTML 代码冗余,也不是 table 的正确用法。查看Demo

 

 table-cell 方案

.parentElement {
  display: table-cell;
  text-align: center;
  vertical-align: middle;
}

.childElement {
  display: inline-block;
}

和 table 相同的效果,没有那么多的冗余代码。查看Demo

 

lineheight 方案

.parentElement {
  line-height: 600px;
  text-align: center;
}

.childElement {
  display: inline-block;
  vertical-align: middle;
  line-height: initial;
  text-align: left;
}

将子元素设为行内元素,通过 text-align 实现水平居中,vertical-align 实现垂直居中。查看Demo

 

absolute + 负margin 方案

.childElement {
    position: absolute;;
    top: 50%;
    left: 50%;
    margin-left: -100px;
    margin-top: -100px;
}

由于绝对定位是基于子元素左上角,将外边距设为子元素宽高一半的负值,即可实现居中。查看Demo                                                                                               

 

absolute + margin auto 方案

.childElement {
    background: red;
    position: absolute;;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
}

将各方向的距离均设为0,再将 margin 设为 auto,即可居中。查看Demo

 

absolute + calc 方案

.childElement.size {
  position: absolute;;
  top: calc(50% - 100px);
  left: calc(50% - 100px);
}

减去宽度的一半即可实现居中。查看Demo 

writing-mode 方案

.parentElement {
  writing-mode: vertical-lr;
  text-align: center;
}

.parentElement-inner {
    writing-mode: horizontal-tb;
    display: inline-block;
    text-align: center;
    width: 100%;
}

.childElement {
  display: inline-block;
  margin: auto;
  text-align: left;
}

writing-mode 可以将文字改为垂直方向显示,其他水平方向上的也会变为垂直方向上的属性。该方法较为复杂。查看Demo

总结

无兼容性要求,推荐使用 flex 方案

有兼容性要求,且宽高固定,可使用 absolute + 负margin 方案

有兼容性要求,宽高不固定,可使用 css-table 方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值