盒子塌陷和外边距合并

96 阅读2分钟

盒子塌陷/高度塌陷

什么是盒子塌陷?

当父元素没设置足够大小的时候,而子元素设置了浮动的属性,子元素就会跳出父元素的边界(脱离文档流)。尤其是当父元素的高度为auto时,而父元素中又没有其它非浮动的可见元素时,父盒子的高度就会直接塌陷为零, 我们称这是CSS高度塌陷

jsbin.com/yubeleq/edi…

解决盒子塌陷的办法

  1. 写死固定的width 和 height
  2. 给父元素盒子添加浮动
  3. 给父盒子添加overflow属性,值为hidden,auto
  4. 在父元素最下方引入清除浮动块
  5. 用after伪元素清除浮动

外边距合并/父子边距合并/外边距重叠

块的上外边距 (margin-top)下外边距 (margin-bottom)有时合并 (折叠) 为单个边距,其大小为单个边距的最大值 (或如果它们相等,则仅为其中一个),这种行为称为边距折叠

形成边距折叠的几种情况:

jsbin.com/wawulah/2/e…

  1. 同一层的相邻元素

  2. 没有内容将父元素和子元素分隔开

如果没有边框border,内边距padding,行内内容,也没有创建块级格式上下文清除浮动来分开一个块级元素的上边界margin-top 与其内一个或多个后代块级元素的上边界margin-top;或没有边框,内边距,行内内容,高度height,最小高度min-height或 最大高度max-height 来分开一个块级元素的下边界margin-bottom与其内的一个或多个后代后代块元素的下边界margin-bottom,则就会出现父块元素和其内后代块元素外边界重叠,重叠部分最终会溢出到父级块元素外面。

  1. 空的块级元素

当一个块元素上边界margin-top 直接贴到元素下边界margin-bottom时也会发生边界折叠。这种情况会发生在一个块元素完全没有设定边框border、内边距padding、高度height、最小高度min-height 、最大高度max-height 、内容设定为 inline 或是加上clear-fix的时候。

解决办法:触发BFC

参考链接:juejin.cn/post/684490…