外边距塌陷问题

  外边距塌陷的问题,在工作的过程中经常性遇到,也是让前端开发人员比较讨厌的一个问题,那么什么是外边距塌陷呢?常遇见的外边距塌陷共有两个现象:

  现象一:

  两个同级盒子,上下排列,上面的盒子给margin-bottom 下面的盒子给margin-top,那么他们两个的间距会重叠,以大的那个计算。案例如下,首先我先写两个盒子,代码如下:

1 <div class="box1">
2     我是盒子1
3 </div>
4 <div class="box2">
5     我是盒子2
6  </div>

  然后我对两个盒子写样式,为这两个盒子指定宽高和一些文字属性,代码如下:

div {
    font-size: 30px;
    font-weight: bold;
    text-align: center;
    line-height: 200px;
    width: 200px;
    height: 200px;
}

  然后我分别给box1和box2写相应样式,为其添加背景色及设置上下宽度,代码如下:

.box1 {
    background: pink;
    margin: 100px auto;
}
.box2 {
    background: skyblue;
    margin: 50px auto;
}

  这时候,我们运行,观察效果,发现这两个盒子的垂直距离并没有按照我写的那样为150px,而是100px,效果图如下:

  而此时,我调整box2盒子margin值,值只要小于100px,他么俩的间距都不会发生变化,仍然为100px,当值大于100px时,两个盒子的间距根据我调整值得大小而发生变化,从而验证了上述的现象。

  解决方案

  那么这种情况,如何避免发生呢?我们只需要让这两个盒子的外边距不同时出现即可,把两者之间的距离给一个盒子,即可完美解决。

  现象二:

  两个父子元素,内部的盒子给margin-top,其父级也会受到影响,同时产生上边距,父子元素会进行粘连。案例如下:首先我先写两个父子关系的盒子,代码如下:

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

  然后我分别对两个盒子写样式,代码如下:

div {
    font-size: 20px;
    font-weight: bold;
    text-align: center;
}
.box1 {
    width: 200px;
    height: 200px;
    background: pink;
    line-height:200px;
}
.box2 {
    width: 100px;
    height: 100px;
    background: skyblue;
    line-height:100px;
    margin-top:20px;
}

  运行效果如图所示:

  不难发现,子盒子乡下移动20px的同时,父盒子也随着子盒子乡下移动20px,形成粘连的效果。

  解决方案:

  那么,当出现这种情况时,如何解决呢?需要给父盒子增加一个overflow: hidden;属性,修改代码如下:

.box1 {
    width: 200px;
    height: 200px;
    background: pink;
    line-height:200px;
    overflow: hidden;
}

  运行效果如图所示:完美解决上述问题。

  总结:

  外边距塌陷共有两种情况,第一种情况:两个同级元素,垂直排列,上面的盒子给margin-bottom 下面的盒子给margin-top,那么他们两个的间距会重叠,以大的那个计算。解决这种情况的方法为:两个外边距不同时出现。第二种情况:两个父子元素,内部的盒子给margin-top,其父级也会受到影响,同时产生上边距,父子元素会进行粘连,决绝这种情况的方法为:父级添加一个css属性,overflow:hidden,禁止超出。

时间: 2024-10-11 06:42:21

外边距塌陷问题的相关文章

关于清除浮动 外边距 塌陷的问题

一.html <div class="left">div1</div> <div class="left">div2</div> <footer> <p>66666666666666666666666</p> </footer> 二.css .left{ width: 200px; height: 200px; color: #fff; background: red;

关于CSS外边距塌陷的问题

关于CSS外边距塌陷(合并)的问题主要资料来源:https://developer.mozilla.org... 定义 块的顶部外边距和底部外边距有时被组合(折叠)为单个边框,其大小是组合到其中的最大外边距,这种行为称为外边距塌陷(合并) 发生外边距塌陷的三种情况 相邻的兄弟姐妹元素 <style> * { margin: 0; } .box1 { width: 150px; height: 100px; margin-bottom: 50px; /* border: 1px solid #0

CSS外边距合并(塌陷/margin越界)

原文 简书原文:https://www.jianshu.com/p/5f18f12cd162 大纲 1.什么是外边距合并?(折叠外边距) 2.外边距带来的影响 3.折叠的结果 4.产生折叠的原因 5.出现的情况 1.什么是外边距合并?(折叠外边距) 外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者.而左右外边距不合并. 在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距.这种

CSS之盒模型边框,内边距,外边距,阴影,圆角

盒子模型 盒子模型 盒子模型有元素内容.边框(border).内边距(padding).外边距(margin)组成: 盒子里面的文字和图片等元素是内容区域: 盒子的厚度 我们称为 盒子的边框: 盒子内容与盒子之间的距离是内边距: 盒子与盒子之间的距离是外边距: 标准盒子模型 盒子边框(border) border: border-width || border-style || border-color 属性 作用 border-width 定义边框粗细,单位是 px border-style

&quot;margin塌陷现象&quot;div盒子嵌套盒子外边距合并现象

问题描述:原型大概是“一个div嵌套了两个 div,给main设定了background="pink" ,header1设定background=“red” .header2 设定background=“blue” ,同时给heder1 设定margin-top:10px; 预想的是内层 heder1div 的上边距 maindiv 上边有10px的距离 但事实上 出现一个问题 ,内层div 并没有出现他所预想的那种效果,实际效果是 maindiv 仍然紧贴内层div 整个maindi

BFC与垂直外边距合并问题

一.什么情况下发生外边距的合并 1)必须处于普通文档流中(不能脱离文档流),并且处于同一个BFC中 2)相邻的外边距,不能有间隙和边框 3)垂直方向上 二.如何合并 1)兄弟元素之间,外边距合并会去最大的那个外边距而不是取和 2)父子元素之间,外边距合并会将子元素的外边距设置给父元素 3)空元素 三.如何解决垂直外边距重叠问题? 1)父元素添加透明上边框或者内边距 2)父元素前面块元素隔开 3)开启BFC, *设置 display:table/table-cell/table-captions/

CSS 定位 (Positioning) CSS 外边距合并 CSS 相对定位

CSS 定位 (Positioning) 属性允许你对元素进行定位. CSS 定位和浮动 CSS 为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多年来通常需要使用多个表格才能完成的任务. 定位的基本思想很简单,它允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的位置.显然,这个功能非常强大,也很让人吃惊.要知道,用户代理对 CSS2 中定位的支持远胜于对其它方面的支持,对此不应感到奇怪. 另一方面

IE下的双外边距浮动bug

最常见且最容易发现的额一个bug是IE 6和最低版本中的双外边距浮动bug.这个bug是任何浮动元素上的外边距加倍. 上面代码中,div盒子向左边浮动,设置的margin-left的值是10px.在chrome浏览器,Firefox浏览器中: 在ie6中,距离为20px: 这个bug很容易修复,就是设置元素的display属性为inline就行,元素本身是浮动,设置inline不会影响显示方式. 显示样式:

[ css 外边距 margin ] css中margin外边距合并问题讲解及实例演示

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距;合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者 外边距合并外边距合并(叠加)是一个相当简单的概念.但是,在实践中对网页进行布局时,它会造成许多混淆.简单地说,外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距.合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者.当一个元素出现在另一个元素上面时,第一个元素的下外边距与第二个元素的上外边距会发生合并.请看下图: CSS 外边距合并实例 1 亲自试一试