元素实现在父元素中实现垂直水平居中的几种方式

  • 方式一:

使用绝对定位的方式,将绝对定位的元素top,bottom,right,left都设置为0,然后margin值设置为auto。此时margin的值浏览器就会自动计算,以使得满足定位的包含块的宽度和高度。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
  #out{
    width: 200px;
    height: 200px;
    background-color: yellow;
    margin: 100px auto;
    position: relative;
  }

  #inner{
    width: 50px;
    height: 50px;
    background-color: red;
    position: absolute;
    margin: auto;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
  }

</style>
<body>

  <div id="out">
    <div id="inner">
    </div>
  </div>

</body>
</html>
  • 方式二:

元素绝对定位以后,top设置50%,left设置50%,然后margin-left设置元素自身宽度的 -50%,margin-top设置元素自身高度的-50%

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
  #out{
    width: 300px;
    height: 500px;
    background-color: yellow;
    margin: 100px auto;
    position: relative;
  }

  #inner{
    width: 50px;
    height: 50px;
    background-color: red;
    position: absolute;
    margin-left: -25px;
    margin-top: -25px;
    /*此时的50%是包含块高度的50%*/
    top: 50%;
    /*此处的50%是包含块宽度的50%*/
    left: 50%;
  }

</style>
<body>

  <div id="out">
    <div id="inner">
    </div>
  </div>

</body>
</html>

这里要注意的是 百分比是相对于哪个元素的哪个属性的百分比

  • 方式三:假设不知道元素的宽高?如何实现垂直水平居中。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
  #out{
    width: 300px;
    height: 500px;
    background-color: pink;
    margin: 100px auto;
    position: relative;
  }

  #inner{
    position: absolute;
    top: 50%;
    left: 50%;
    background-color: green;
    transform: translateX(-50%) translateY(-50%);
  }
</style>
<body>

  <div id="out">
    <div id="inner">
      测试文字内容撑开
      <p>1</p>
      <p>1</p>
      <p>1</p>
      <p>1</p>
    </div>
  </div>

</body>
</html>

借助 transform: translateX(-50%) translateY(-50%);,可以轻松实现不确定宽高的元素实现垂直水平居中,值得注意的是,这里的top50%是相对于包含块的高度计算的,left50%相对于包含块的宽度计算,而 translateX(-50%)是相对于元素自身宽度计算的, translateY(-50%)是相对于元素自身高度计算的,translate 可以实现自动计算。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值