子盒子在父盒子中水平垂直居中显示的几种方式

绝对定位方式-子盒子必须有宽高

先通过设置子盒子的left、top为50%,让子盒子左上角处于中间位置,再通过设置子盒子的
margin-left、margin-top 把盒子移动到居中的位置

 <style type="text/css">
    *{
        padding: 0;
        margin: 0;
    }
    .wrapper{
        width: 800px;
        height: 800px;
        background-color: #eee;
        margin: 0 auto; /*让父盒子水平居中*/
        position: relative;
    }
    .inner{
        width: 400px;
        height: 400px;
        background-color: red;
        position: absolute;
        left: 50%;
        top: 50%;
        margin-left: -200px;
        margin-top: -200px;
    }
 </style>

 <div class="wrapper">
     <div class="inner"></div>
 </div>

通过定位方式 - 子盒子必须有宽高

给子盒子设置left、right、top、bottom都为0,再设置margin:auto让子盒子居中显示,是不是有一种弹性盒子的感觉

 <style type="text/css">
    *{
        padding: 0;
        margin: 0;
    }

    .wrapper{
        width: 800px;
        height: 800px;
        background-color: #eee;
        margin: 0 auto;
        position: relative;
    }
    .inner{
        width: 400px;
        height: 400px;
        background-color: red;
        position: absolute;
        left: 0;
        right: 0;
        top: 0;
        bottom: 0;
        margin: auto;
    }

 </style>

 <div class="wrapper">
     <div class="inner"></div>
 </div>

绝对定位方式-子盒子不必写宽高

先通过设置子盒子的left、top为50%,让子盒子左上角处于中间位置,再通过设置子盒子的
transform: translate(-50%, -50%)把盒子移动到中间位置,这种方式当子盒子没有宽高也可实现居中显示

 <style type="text/css">
    *{
        padding: 0;
        margin: 0;
    }

    .wrapper{
        width: 800px;
        height: 800px;
        background-color: #eee;
        margin: 0 auto;
        position: relative;
    }
    .inner{
        width: 400px;
        height: 400px;
        background-color: red;
        position: absolute;
        left: 50%;
        top: 50%;
        transform: translate(-50%, -50%);
        /*transform: translate(-200px, -200px); 有宽高时可设置具体值*/
    }
 </style>
 <div class="wrapper">
     <div class="inner">
     </div>
 </div>

通过flex弹性盒子 - 子盒子不必写宽高

 <style type="text/css">
    * {
        padding: 0;
        margin: 0;
    }
    .wrapper {
        width: 800px;
        height: 800px;
        background-color: #eee;
        margin: 0 auto;
        display: flex;
        justify-content: center;
        align-items: center;
    }
    .inner {
        /*width: 400px; 有宽高时可设置具体值*/
        /*height: 400px; 有宽高时可设置具体值*/
        background-color: red;
    }
 </style>

 <div class="wrapper">
     <div class="inner">
     </div>
 </div>

使用js方式居中

子盒子是块元素 不指定宽高

 <style type="text/css">
    * {
        padding: 0;
        margin: 0;
    }

    .wrapper {
        width: 800px;
        height: 800px;
        background-color: #eee;
        margin: 0 auto;
    }

    .inner {
        background-color: red;
        word-break: break-all;
    }
 </style>

 <div id="wrapper" class="wrapper">
     <div id="inner" class="inner">123456789</div>
 </div>

 <script>

   let wrapper = document.getElementById('wrapper');
   let inner = document.getElementById('inner');

   let wrapperWidth = wrapper.offsetWidth;
   let wrapperHeight = wrapper.offsetHeight;

   inner.style.display = 'inline-block';
   inner.style.maxWidth = inner.offsetWidth;
   inner.style.maxHeight = inner.offsetHeight;
   let innerWidth = inner.offsetWidth;
   let innerHeight = inner.offsetHeight;
   wrapper.style.overflow = 'hidden';
   inner.style.marginLeft = (wrapperWidth - innerWidth) / 2 + "px";
   inner.style.marginTop = (wrapperHeight - innerHeight) / 2 + "px";
 </script>

若指定宽高则去掉inner.style.display = ‘inline-block’ 即可,当然也有很多边界需要处理

子盒子是行内元素,不指定宽高

 <style type="text/css">
    * {
        padding: 0;
        margin: 0;
    }

    .wrapper {
        width: 800px;
        height: 800px;
        background-color: #eee;
        margin: 0 auto;
    }

    .inner {
        background-color: red;
        word-break: break-all;
    }
 </style>
 <div id="wrapper" class="wrapper">
     <span id="inner" class="inner">123456789</span>
 </div>

 <script>
     let wrapper = document.getElementById('wrapper');
     let inner = document.getElementById('inner');

     let wrapperWidth = wrapper.offsetWidth;
     let wrapperHeight = wrapper.offsetHeight;

     //需要把行内元素转换成行内块元素
     inner.style.display = 'inline-block';
     let innerWidth = inner.offsetWidth;
     let innerHeight = inner.offsetHeight;
     wrapper.style.overflow = 'hidden';
     inner.style.marginLeft = (wrapperWidth - innerWidth) / 2 + "px";
     inner.style.marginTop = (wrapperHeight - innerHeight) / 2 + "px";
 </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值