一、外边距塌陷共有两种情况
①第一种情况:
两个同级元素,垂直排列,上面的盒子给 margin-bottom 下面的盒子给
margin-top,那么他们两个的间距会重叠,以大的那个计算。
解决这种情况的方法为:两个外边距不同时出现
②第二种情况:
两个父子元素,内部的盒子给 margin-top,其父级也会受到影响,同时产生
上边距,父子元素会进行粘连。
解决这种情况的方法为:父级添加一个 css 属性,overflow:hidden,禁止超出外边距重叠就是外边距塌陷(margin-collapse)
<style>* {margin: 0;padding: 0;}.box {width: 300px;height: 300px;background-color: pink;margin: 0 auto;}.box1 {width: 100px;height: 100px;background-color: red;margin-top: 100px;text-align: center;font: 18px/100px "楷体";}
</style>
解决方案:
1、为父盒子设置 border,为外层添加 border 后父子盒子就不是真正意义上的贴合(可以设置成透明:border:1px solid transparent);
2、为父盒子添加 overflow:hidden;
3、为父盒子设定 padding 值;
4、为父盒子添加 position:fixed;
5、为父盒子添加 display:table;
6、利用伪元素给父元素的前面添加一个空元素
<style>* {margin: 0;padding: 0;}.box {width: 300px;height: 300px;background-color: pink;margin: 0 auto;/* 解决方案: *//* 1、为父盒子设置 border,为外层添加 border 后父子盒子就不是真正意义上的贴合(可 以设置成透明:border:1px solid transparent); *//* border: 1px solid transparent; *//* 2、为父盒子添加 overflow:hidden; *//* overflow: hidden; *//* 3、为父盒子设定 padding 值; *//* padding: 1px; *//* 4、为父盒子添加 position:fixed; *//* position: fixed; *//* 5、为父盒子添加 display:table; *//* display: table; */}/* 6、利用伪元素给父元素的前面添加一个空元素 */.box::before {content: '';display: table;}.box1 {width: 100px;height: 100px;background-color: red;margin-top: 100px;text-align: center;font: 18px/100px "楷体";}</style>