一个子盒在父盒中实现水平垂直居中的方法!

让盒子在父盒中是很经典的问题,自己整理了以下这些方法参考:

1.利用子绝父相+margin实现。

  • 给子元素相对定位,父元素绝对定位
  • 给子元素设置left:50%;top:50%;
  • 利用margin-left:-自身宽度的一半,-自身高度的一半;
<style>
        .fa {
            position: relative;
            width: 500px;
            height: 500px;
            background-color: rgb(122, 247, 236);
            border: 1px solid black;
            margin: 50px auto 0;
        }
        .son {
            position: absolute;
            top: 50%;
            left: 50%;
            margin-top: -100px;
            margin-left: -100px;
            width: 200px;
            height: 200px;
        }
 </style>
<body>
    <div class="fa">
        <div class="son"></div>
    </div>
</body>

2.子绝父相+margin:auto;

  • 设置子元素绝对定位,父元素相对定位
  • 子元素设置top: 0;left: 0;right: 0;bottom: 0;
  • 在给子元素设置margin: auto;实现水平垂直居中
<style>
        .fa {
            position: relative;
            width: 500px;
            height: 500px;
            background-color: rgb(122, 247, 236);
            border: 1px solid black;
            margin: 50px auto 0;
        }
        .son {
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            margin: auto;
            width: 200px;
            height: 200px;
            background-color: rgb(235, 238, 73);
        }
</style>
<body>
    <div class="fa">
        <div class="son"></div>
    </div>
</body>

3.利用transform属性实现

注意:transform是css3添加的属性,IE10及以上和标准浏览器最新版本才可以使用,IE9使用兼容写法也可以使用。

  • 给子元素相对定位,父元素绝对定位
  • 给子元素设置left:50%;top:50%;
  • 在给子元素设置transform: translate(-50%,-50%);
<style>
        .fa {
            position: relative;
            width: 500px;
            height: 500px;
            background-color: rgb(122, 247, 236);
            border: 1px solid black;
            margin: 50px auto 0;
        }
        .son {
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);
            width: 200px;
            height: 200px;
            background-color: rgb(235, 238, 73);
        }
</style>
<body>
    <div class="fa">
        <div class="son"></div>
    </div>
</body>

4.利用弹性盒模型实现

注意:弹性盒模型在IE11及以上和标准浏览器才可以使用(设置写移动端)

  • 给父盒设置弹性盒模型
  • 设置justify-content: center;实现子盒水平居中
  • 设置align-itmes: center;实现子盒垂直居中
<style>
        .fa {
            display: flex;
            justify-content: center;
            align-items: center;
            width: 500px;
            height: 500px;
            background-color: rgb(122, 247, 236);
            border: 1px solid black;
            margin: 50px auto 0;
        }
        .son {
            width: 200px;
            height: 200px;
            background-color: rgb(235, 238, 73);
        }
</style>
<body>
    <div class="fa">
        <div class="son"></div>
    </div>
</body>

5.利用margin与transform方法

  • 给子元素设置margin: 50% auto 0;*【注意:这个地方会出现父子上外边距合并问题,给父元素设置overflow: hidden;或者设置边框都可以解决】
  • 给子元素设置transform: translateY(-50%);
<style>
        .fa {
            width: 500px;
            height: 500px;
            background-color: rgb(122, 247, 236);
            border: 1px solid black;
            margin: 50px auto 0;
            /* overflow: hidden; */
        }
        .son {
            width: 200px;
            height: 200px;
            margin: 50% auto 0;
            transform: translateY(-50%);
            background-color: rgb(235, 238, 73);
        }
</style>
<body>
    <div class="fa">
        <div class="son"></div>
    </div>
</body>

6.transform实现视觉上水平垂直居中;

  • 给子元素设置transform: translate((父盒宽度-子盒宽度)/2, (父盒高度-子盒高度)/2);
  • 这种方法只适合父盒子盒宽度好算的情况下,实现视觉上的居中。
<style>
        .fa {
            width: 500px;
            height: 500px;
            background-color: rgb(122, 247, 236);
            border: 1px solid black;
            margin: 50px auto 0;
        }
        .son {
            width: 200px;
            height: 200px;
            transform: translate(150px,150px);
            background-color: rgb(235, 238, 73);
        }
</style>
<body>
    <div class="fa">
        <div class="son"></div>
    </div>
</body>

*[以上方法由自己总结,欢迎各位大佬补充和指正,谢谢]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值