父子关系盒子居中方法

(1)第1居中方法  (定位+margin回移法)

1.html结构

/* 结构 */
<body>
    <div class="father">
        <div class="son"></div>
    </div>
</body>

2.css样式 

 <style>     
       .father {
            /* 相对定位 */
            position: relative;
            width: 500px;
            height: 500px;
            margin: 100px auto;
            background-color: pink;
        }
       .father .son {
            /* 绝对定位 */
            position: absolute;
            width: 200px;
            height: 200px;
            background-color: skyblue;

            /* 第1居中方法  (定位+margin)*/

            /* 向下移动父元素(.father )的一半 */
            top: 50%;
            /* 向上移动自身(.son)高度的一半  负值上*/
            margin-top: -100px;

            /* 向右移动父元素(.father )的一半 */
            left: 50%;
            /* 向左移动自身(.son)高度的一半 */
            margin-left: -100px;
        }
    </style>

原理: 使用简单的父相子绝定位法,利用left和top控制子元素的左上角垂直水平居中。然后使用margin-top和margin-left进行盒子位置的回移。

缺陷: 上面的方法完美实现了小盒子在大盒子中间垂直水平居中,但是有一个缺陷是必须提前知道小盒子的宽高,如果不知晓则无法精准居中。而真实项目里元素样式很多时候数据源来自后台请求,所以拿不到元素的具体宽高。

效果如下

 

(2) 第2居中方法  (定位+transfrom)

1.html结构

/* 结构 */
<body>
    <div class="father">
        <div class="son"></div>
    </div>
</body>

2.css样式 

<style> 
    
       .father {
            /* 相对定位 */
            position: relative;
            width: 500px;
            height: 500px;
            margin: 100px auto;
            background-color: pink;
        }
       .father .son {
            /* 绝对定位 */
            position: absolute;
            width: 200px;
            height: 200px;
            background-color: skyblue;

         /* 第2居中方法   定位+transfrom 
            移动父元素宽度的一半,小盒子左边框居中 */
            left: 50%;

         /* 移动的父元素高一半,小盒子上边框居中 */
            top: 50%;
            transform: translate(-50%, -50%);  
        }

    </style>

                                                                    效果如下

原理: 跟第一种定位方法一样,先将左上角定位到大盒子中间位置。然后使用transform属性里面的translate方法,该方法表示平移自身元素的多少位置。translateX为平移横坐标,translateY平移纵坐标,translate则平移横纵坐标。参数一为横坐标,参数二为纵坐标。使用-50%表示向左向上平移自身一半位置,达到居中效果。 

缺陷: 因为使用了css3,所以有一点兼容问题,但是定位方案内还是最推荐此方法。

(3) 第3居中方法  (定位+方位名词0) 

 1.html结构

/* 结构 */
<body>
    <div class="father">
        <div class="son"></div>
    </div>
</body>

 2.css样式 

<style> 
    
       .father {
            /* 相对定位 */
            position: relative;
            width: 500px;
            height: 500px;
            margin: 100px auto;
            background-color: pink;
        }
       .father .son {
            /* 绝对定位 */
            position: absolute;
            width: 200px;
            height: 200px;
            background-color: skyblue;

          /* 第3居中方法  (定位+方位名词0 )*/
            top: 0;
            right: 0;
            bottom: 0;
            left: 0;
            margin: auto;
         /* 这个技巧子元素必须设置宽高 */
         /* 外边距在标准流情况下,只能让盒子水平居中,无法垂直居中 */
         /* 盒子脱离标准流,绝对定位4个方向为0,即可让小盒子水平垂直居中 */
        }

    </style>

                                                                    效果如下 

原理: 让小盒子四个方向的定位都为0,此时小盒子还位于原位,使用margin: auto让他上和下,左和右的外边距保持一致。由于小盒子四个方向的定位值都为0,所以会自动将小盒子拉到正中间,不会是右上角在正中间。

缺陷: 上面的方法虽然可以不知道小盒子的宽高就进行居中显示,但是小盒子宽高必须存在。如果不设置宽高,会自动铺满全屏(绝对定位后,四个方位值为0的效果,不设置宽,则宽铺满,不设置高则高铺满,都不设置则宽高铺满) 

(4) 第4居中方法  (flex布局)

 1.html结构 

/* 结构 */
<body>
    <div class="father">
        <div class="son"></div>
    </div>
</body>

2.css样式  

<style> 
    
       .father {
            width: 500px;
            height: 500px;
            margin: 100px auto;
            background-color: pink;

            /* 第4居中方法  flex布局*/

           /* 弹性容器 */
            display: flex;
           /* 水平居中 */
            justify-content: center;
           /* 垂直居中 */
            align-items: center; 
        }
       .father .son {
            width: 200px;
            height: 200px;
            background-color: skyblue;
        }
    </style>

         效果如下 

原理: flex的流动布局也是非常推荐的一种解决布局的方法,直接设置为flex流动布局,然后让大盒子内的元素位于x轴,y轴居中即可。

缺陷: 好的东西总有相同的问题存在,那就是兼容问题(其实现在依旧可以不考虑兼容问题了)

总结: 目前本人学习掌握的布局就这几种,还没学到js.若有不足或错误,随时欢迎补充.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值