【CSS面试题】外边距折叠的原因和解决

参考文章

什么时候出现外边距塌陷

外边距塌陷,也叫外边距折叠,在普通文档流中,在垂直方向上的2个或多个相邻的块级元素(父子或者兄弟)外边距合并成一个外边距的现象,不过只有上下外边距才会有塌陷,左右外边距不会出现这种问题。
两种情况:

  1. 父子元素:子元素添加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;
    }
  }

在这里插入图片描述

  1. 兄弟元素: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;

相关推荐

  1. CSS外边重叠:原理、结果

    2024-03-15 22:20:02       43 阅读
  2. css外边合并BFC

    2024-03-15 22:20:02       33 阅读
  3. css接触

    2024-03-15 22:20:02       34 阅读
  4. css折叠导航栏

    2024-03-15 22:20:02       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-15 22:20:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-15 22:20:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-15 22:20:02       82 阅读
  4. Python语言-面向对象

    2024-03-15 22:20:02       91 阅读

热门阅读

  1. 几种ADG搭建方式,汇总整理!

    2024-03-15 22:20:02       37 阅读
  2. 大量数据的优化之虚拟滚动和web workers

    2024-03-15 22:20:02       39 阅读
  3. 蓝桥集训之奶牛选美

    2024-03-15 22:20:02       39 阅读
  4. 乘积尾零 2018年第九届蓝桥杯省赛

    2024-03-15 22:20:02       37 阅读
  5. 2024.3.9每日一题

    2024-03-15 22:20:02       44 阅读
  6. mysql binlog自动删除与手动删除

    2024-03-15 22:20:02       41 阅读
  7. 老卫带你学---leetcode刷题(189. 轮转数组)

    2024-03-15 22:20:02       39 阅读
  8. 【算法-特征选择】reliefF算法实现

    2024-03-15 22:20:02       42 阅读
  9. 百科 | 光伏电站如何开展运维工作?

    2024-03-15 22:20:02       41 阅读
  10. BUG解决-Modelsim打开许可证件不可用

    2024-03-15 22:20:02       38 阅读