html盒模型中margin外边距特性问题(塌陷问题)

1,617 阅读1分钟

一、父子关系,给子盒子加外边距,但作用到了父身上,怎么解决呢?

    <style>
    .box1 {
        width: 500px;
        height: 500px;
        background: yellow;
    }
    
    .box2 {
        width: 200px;
        height: 200px;
        background: red;
         margin-top: 100px;
    }
     </style>
     
     <body>
       <div class="box1">
           <div class="box2"></div>
       </div>
    </body>
    
    

image.png

image.png

根据上面的两张图我们会发现,给子盒子设置margin-top时,会作用到了父盒子身上。那我们有四种方法可以解决这个问题,如下:

1、给父盒子或者子盒子设置浮动 float: left;
2、给父盒子设置 overflow: hidden; 溢出隐藏、清除浮动、解决外边距塌陷、触发BFC规则等等。
3、给父盒子设置 padding-top: 100px; 设置内边距了,但是padding会撑开盒子,会使用盒子变大,所以我们在给父元素设置padding-top: 100px;的同时,父元素的高我们要减100px。这样设置的话,你的盒子就还是宽为500px,高为500px。
4、给父盒子设置边框 border: 1px solid green; 设置有颜色的话,就看得很明显有点丑,我们可以将外边框的颜色设置为透明色 border: 1px solid transparent;记住高度也需要重新计算,高和宽都需要减2px,这样设置的话,你的盒子就还是宽为500px,高为500px。

二、兄弟关系,两个盒子垂直外边距与水平外边距问题。

   <style>
    .box1,
    .box2,
    .box3,
    .box4 {
        width: 200px;
        height: 200px;
    }
    
    .box1 {
        background: red;
        margin-bottom: 100px;
    }
    
    .box2 {
        background: yellowgreen;
        margin-top: 50px;
    }
    
    .box3 {
        float: left;
        background: blue;
        margin-right: 100px;
    }
    
    .box4 {
        float: left;
        background: blueviolet;
        margin-left: 50px;
    }
</style>

<body>
    <div class="box1">box1</div>
    <div class="box2">box2</div>
    <div class="box3">box3</div>
    <div class="box4">box4</div>
</body>

image.png image.png

(1)、垂直方向:给box1设置了margin-bottom: 100px;给box2设置了 margin-top: 50px;那此时外边距是取最大值(也就是会取我们的100px)。
(2)、水平方向:给box3设置了 margin-right: 100px;给box4设置了 margin-left: 50px;同时给它们都设置了左浮动,那此时外边距会进行合并处理(也就是会将我们的两个外边距值相加,最后外边距是150px。)