盒模型andGFCandBFC

63 阅读2分钟

盒模型

盒模型类型

盒模型分为两种,如下图所示: 一是标准盒模型:box-sizing: content-box,width height + padding + margin + border = 盒子大小

二是IE盒模型:box-sizing: border-box width 和 height 决定了整个盒子的大小,后续的操作都是在width和height的范围以内

image.png

行内与块级

读者可以观察下图:

image.png 这里我们让div成为行内元素,span成为块级元素,由于inline元素的宽度和高度属性不会生效div元素的实际高度由内边距和其内容决定,所以span会突破了div的border

浮动

image.png

  • 这段代码将 .flex 元素设置为一个 Flex 容器,使其子元素(即 .box 元素)按照 Flexbox 布局模型排列。

网格GFC

image.png

  • display: grid;:将 .grid-container 设置为网格容器。
  • grid-template-columns: auto auto auto;:定义了三列等宽的网格布局。
  • gap: 10px;:设置网格单元格之间的间隔为 10px。
  • padding: 10px;:设置网格容器的内边距为 10px

BFC Block Formating Context

image.png

BFC 的作用

BFC(块级格式化上下文)是一个独立的渲染区域,具有以下特性:

  1. 内部的盒子会在垂直方向,一个接一个地放置
  2. BFC 内部的盒子垂直方向的距离由 margin 决定
  3. BFC 的区域不会与浮动元素的盒子重叠
  4. BFC 是一个独立的容器,外面的元素不会影响里面的元素,反之亦然
  5. 计算 BFC 的高度时,浮动元素也会参与计算

外边距重叠(Margin Collapsing)

在没有 BFC 的情况下,相邻块级元素的垂直外边距会发生重叠,重叠后的外边距等于其中较大的一个。例如,如果没有 BFC,.box1 的 margin-bottom: 50px 和 .box2 的 margin-top: 30px 会重叠,结果是两个盒子之间的距离为 50px。

结果

由于设置了 overflow: hidden; 触发了 BFC,.box2 的父元素成为一个新的 BFC,这样 .box1 和 .box2 的外边距不会重叠。因此,两个盒子之间的距离是 .box1 的 margin-bottom: 50px