详解css外边距折叠(margin collapsing)

yizhihongxing

详解CSS外边距折叠

什么是外边距折叠?

在 CSS 中,相邻的两个块级元素垂直方向的外边距会发生重叠,这种行为叫做外边距折叠。当发生外边距折叠时,相邻两个元素之间将会只有一个外边距,而不是两个外边距之和。

外边距折叠只会发生在块级元素上,行内元素没有外边距,不会发生外边距折叠。

哪些情况会发生外边距折叠?

  1. 相邻兄弟元素之间的外边距会发生折叠。

  2. 父元素和第一个/最后一个子元素之间的外边距会发生折叠。

  3. 空块级元素的外边距会被折叠(一个空块级元素是指没有任何内容或内部元素的块级元素)。

如何避免外边距折叠?

  1. 使用 padding 或 border 代替外边距。

  2. 给元素添加 overflow: auto; 或 overflow: hidden;,可以防止外边距折叠。

示例

示例一

在以下示例中,两个相邻兄弟元素之间的外边距发生了折叠,box1 的外边距被折叠到了 box2 上。

<div class="box1">Box 1</div>
<div class="box2">Box 2</div>
.box1 {
  margin-bottom: 20px;
}

.box2 {
  margin-top: 30px;
}

在这里,box1 的下边距为 20pxbox2 的上边距为 30px,但实际上它们之间的间距只有 30px

示例二

在以下示例中,一个父元素和子元素之间的外边距发生了折叠,parent 的底边距被折叠到了 grandchild1 上。

<div class="parent">
  <div class="child1">Child 1</div>
  <div class="child2">Child 2</div>
  <div class="child3">
    <div class="grandchild1">Grandchild 1</div>
    <div class="grandchild2">Grandchild 2</div>
  </div>
</div>
.parent {
  margin-bottom: 20px;
}

.grandchild1 {
  margin-top: 30px;
}

在这里,parent 的下边距为 20px,但它与 grandchild1 之间的距离只有 30px,原因是 parent 和它的第一个子元素 child1 之间的外边距折叠了,导致 parent 的底边距被折叠到了 grandchild1 上。我们可以给 parent 添加一个 padding 或 border 来避免这种情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解css外边距折叠(margin collapsing) - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • CSS3+font字体文件实现圆形半透明菜单具体步骤(图解)

    以下是详细的攻略步骤: 一、创建HTML结构 首先,我们需要在HTML中创建菜单的结构。如下所示: <div class="menu-container"> <div class="menu-item">Item 1</div> <div class="menu-it…

    css 2023年6月9日
    00
  • jq给页面添加覆盖层遮罩的实例

    下面是详细讲解如何使用jq给页面添加覆盖层遮罩的实例。本攻略假设您已经熟悉JavaScript和jQuery。 添加覆盖层遮罩 覆盖层遮罩常用于在页面中添加弹出框或模态框时,防止用户操作页面上其他元素。以下是添加覆盖层遮罩的方法: 步骤一:创建遮罩 首先,在页面中添加一个遮罩层,可以使用以下代码。 <div class="overlay&qu…

    css 2023年6月10日
    00
  • 20 个 CSS 高级技巧汇总(推荐)

    20 个 CSS 高级技巧汇总(推荐) 本篇文章从以下几个方面介绍了 20 项 CSS 高级技巧: CSS 渐变 多列布局 background-clip 透明度 混合模式 CSS 坐标系统 CSS 形状 文字阴影 overflow 自定义下划线 格子背景 CSS 动画 filter border-radius CSS 变量 边栏布局 伸缩容器 text-o…

    css 2023年6月9日
    00
  • CSS实现文字环绕图片效果

    下面就是CSS实现文字环绕图片效果的完整攻略,分为以下几个步骤: 1.准备工作 首先,在HTML文档中添加一张图片和一段文本。例如: <img src="example.jpg" alt="Example Image"> <p>Lorem ipsum dolor sit amet, consec…

    css 2023年6月10日
    00
  • vue项目中使用lib-flexible解决移动端适配的问题解决

    下面是详细的“vue项目中使用lib-flexible解决移动端适配的问题”的攻略: 什么是lib-flexible lib-flexible是淘宝移动端开发团队出品的一个移动端适配方案,它的主要作用是实现移动端页面的等比缩放,使得页面能够在不同的设备上保持一致的显示效果。lib-flexible使用了viewport和rem等技术,对于移动端适配非常有用。…

    css 2023年6月9日
    00
  • Bootstrap CSS组件之输入框组

    下面就为大家详细讲解Bootstrap CSS组件之输入框组的完整攻略。 Bootstrap CSS组件之输入框组 在网页的开发中,输入框组(Input Group)是非常常见的一个组件。Bootstrap提供的输入框组组件可以帮助我们方便地创建出各种样式的输入框组,从而提高开发效率。 基本结构 Bootstrap输入框组组件的基本结构如下(注意:下面的代码…

    css 2023年6月10日
    00
  • javascript实现显示和隐藏div方法汇总

    JavaScript 实现显示和隐藏 div 方法有多种方式,这里我为大家总结了一些常见的实现方式。 方式一:使用display属性来控制div的显示和隐藏 可以通过设置div的style.display属性来显示或隐藏这个div元素。下面是示例代码: <!DOCTYPE html> <html> <head> <t…

    css 2023年6月10日
    00
  • JS使用定时器与事件监听实现轮播图切换功能

    JS使用定时器与事件监听实现轮播图切换功能,是一个比较常见的前端开发需求,下面是一个完整的攻略: 步骤一:HTML结构 首先,我们需要用HTML搭建轮播图的基本结构。基本上,一个轮播图的结构通常是由一个容器元素,若干个图片轮播元素和若干个轮播导航元素组成的。以下是一个典型的轮播图HTML结构示例: <div class="slider&quo…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部