参考文章
什么时候出现外边距塌陷
外边距塌陷,也叫外边距折叠,在普通文档流中,在垂直方向上的2个或多个相邻的块级元素(父子或者兄弟)外边距合并成一个外边距的现象,不过只有上下外边距才会有塌陷,左右外边距不会出现这种问题。
两种情况:
- 父子元素:子元素添加
margin-top
,但子元素并没有和父元素产生间隔,margin-top
作用在了父盒子上
<template><div class="father"><div class="son"></div></div>
</template><script setup>import { ref, reactive } from 'vue'
</script>
<style lang="scss" scoped>.father {width: 500px;height: 300px;background-color: pink;.son {width: 100px;height: 100px;margin-top: 200px;background-color: skyblue;}}
</style>
或者父盒子和子盒子都添加margin-top
,最后合并为一个margin-top
取最大值,而不是2者之和
.father {width: 500px;height: 300px;margin-top: 200px; //!!!background-color: pink;.son {width: 100px;height: 100px;margin-top: 100px; //!!background-color: skyblue;}}
- 兄弟元素:margin-bottom和margin-top合并,取最大值
<template><div class="box1"></div><div class="box2"></div>
</template><script setup>import { ref, reactive } from 'vue'
</script>
<style lang="scss" scoped>.box1 {width: 100px;height: 100px;margin-bottom: 100px;background-color: skyblue;}.box2 {width: 100px;height: 100px;margin-top: 100px;background-color: orange;}
</style>
具体的外边距计算方式
1.两个都是正数,取较大的值
2.两个都是负数,取绝对值较大的值
3.一正一负,取两个值得和
为什么会出现外边距塌陷
怎么解决外边距塌陷
父子关系
让他们不在同一个BFC中
1. 父元素不用margin,用padding
2. 给父元素添加border
相当于加了一堵墙不让margin-top冲出去
3. 给父元素开启BFC
开启BFC共有7种方式,具体介绍,点击进入
4. 给父元素添加clearfix
注意这里是before,换成after不好用
&::before {
display: grid;
content: ‘’;
}
<style lang="scss" scoped>.father {width: 500px;height: 400px;// overflow: hidden;background-color: pink;&::before {display: grid;content: '';}.son1 {width: 100px;height: 100px;margin-top: 100px;background-color: skyblue;}}
</style>
兄弟关系
加上BFC外壳
1. 只给一个元素设置边距
2.
1.给下面的元素
position设置为absolute或者fixed
2.下面的元素设置左浮动
(1,2)会影响后面的元素
3.给下面的元素设置display:inline-block
4.其中一个元素外套一个div并设置overflow:hidden;