盒子水平居中(详解)

掌握盒子水平垂直居中的五点方案

  • 定位(有三种方式)
  • display:flex
  • JavaScript
  • display:table-cell

定位

第一种

<style>
        html,body{
            height: 100%;
            overflow: hidden;
        }
        .box{
            width: 100px;
            height: 50px;
            box-sizing: border-box;
            line-height: 50px;
            text-align: center;
            font-size: 16px;
            border: 1px solid lightblue;
            background: lightblue;
        }
        /* 定位1 */
        body{
            position: relative;
        }
        .box{
            position: absolute;
            left: 50%;
            top: 50%;
            margin-top: -25px;
            margin-left: -50px;
        }
    </style>
</head>
<body>
    <div class="box">
        哒哒哒哒
    </div>
</body>

注意:这种方式要设置了html,body{ height: 100%; overflow: hidden; }才会生效

第二种

第二种的方法考虑到box没有宽高或者是在页面中自适应的情况
此时又该怎么办呢?

.box{
     position: absolute;
     top:0;
     left:0;
     right: 0;
     bottom: 0;
     margin: auto;
     }

第三种

还可以使用下面这一种,但是兼容性不是很好

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

使用display:flex

该方法兼容性也不是很好

 <style>
        html,body{
            height: 100%;
            overflow: hidden;
        }
        .box{
            width: 100px;
            height: 50px;
            box-sizing: border-box;
            line-height: 50px;
            text-align: center;
            font-size: 16px;
            border: 1px solid lightblue;
            background: lightblue;
        }
        body{
            display: flex;
            justify-content: center;
            align-items: center;
        }
    </style>
</head>
<body>
    <div class="box">
        哒哒哒哒
    </div>
</body>

使用JavaScript方法

       html,body{
            height: 100%;
            overflow: hidden;
            position: relative;
        }
        .box{
            width: 100px;
            height: 50px;
            box-sizing: border-box;
            line-height: 50px;
            text-align: center;
            font-size: 16px;
            border: 1px solid lightblue;
            background: lightblue;
        }    
<div class="box" id="box">
        哒哒哒哒
    </div>    
<script>
        let HTML = document.documentElement,
            box = document.getElementById('box'), 
            winH = HTML.clientHeight,
            winW = HTML.clientWidth,
            boxW = box.offsetWidth,
            boxH = box.offsetHeight;
            box.style.position = 'absolute';
            box.style.top = (winH-boxH)/2+'px';
            box.style.left = (winW-boxW)/2+'px';
    </script>

使用display:table-cell

但是使用这个是需要在父级上加上该属性,并且父级要有固定的宽高

.wrapper{
            display: table-cell;
            vertical-align: middle;
            text-align: center;
            /* 固定宽高 */
            width:500px;
            height: 500px;
            background: chartreuse;
        }
        .box{
            display: inline-block;
        }
<div class="wrapper">
     <div class="box" id="box">
          哒哒哒哒
      </div>
</div>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值