margin兼容性问题

1.上下margin重叠问题

HTML:

<div class="box1"></div>
<div class="box2"></div>

CSS:

* {
      margin: 0;
      padding: 0;
        }
.box1 {
       height: 100px;
       width: 100px;
       background-color: pink;
       margin-bottom: 50px;
        }
.box2 {
       width: 100px;
       height: 100px;
       background-color: green;
       margin-top: 100px;
     }

说明:

有两个元素box1和box2, box1元素设置margin-bottom, box2元素margin-top, 此时上下margin会重叠; 谁的取值大以谁为准

image-20220307105516131

解决方案:

1.只给其中一个元素设置margin值

.box1 {
    height: 100px;
    width: 100px;
    background-color: pink;
}
.box2 {
    width: 100px;
    height: 100px;
    background-color: green;
    margin-top: 50px;
}

image-20220307105953378

  1. 给其中一个元素添加父元素,并且给父元素添加overflow:hidden;(BFC(块级格式化上下文) 布局)

HTML:

<div class="box">
    <div class="box1"></div>
</div>
<div class="box2"></div>

CSS:

* {
    margin: 0;
    padding: 0;
}
.box {
    overflow: hidden;
}
.box1 {
    height: 100px;
    width: 100px;
    background-color: pink;
    margin-bottom: 50px;
}
.box2 {
    width: 100px;
    height: 100px;
    background-color: green;
    margin-top: 50px;
}

image-20220307110444618

2.margin-top穿透问题

说明:

给子元素设置的margin-top值,会作用到父元素的身上,这种想象称之为margin-top的穿透问题

image-20220307111320508

解决方案:

1.给父元素添加border

弊端:需要进行盒模型计算,此操作会使父元素宽高各增加2px

.box {
    height: 200px;
    width: 200px;
    background-color: pink;
    border: 1px solid red;
}

image-20220307111539978

2.给父元素添加overflow:hidden

弊端:使用定位时超出盒子的元素,溢出会被隐藏

.box {
    height: 200px;
    width: 200px;
    background-color: pink;
    overflow: hidden;
}

image-20220307111810531

3.使用父元素的padding-top代替子元素margin-top

.box {
    /* 高度减去50px */
    height: 150px;
    width: 200px;
    background-color: pink;
    padding-top: 50px;
}
.box1 {
    width: 100px;
    height: 100px;
    background-color: green;
}

image-20220307111810531

posted @ 2022-03-07 11:23  秋弦  阅读(37)  评论(0编辑  收藏  举报