Skip to content

标准文档流&脱离文档流

文档流(Normal Flow) 是 HTML 元素按照默认规则排列 的方式,主要包括:

  • 块级元素(block):占满一整行,从上到下排列(如 div、p)。
  • 行内元素(inline):按行排列,不会换行(如 span、a)。
  • 行内块元素(inline-block):像 inline 一样排列,但可以设置 width 和 height(如 img)。

某些 CSS 规则会使元素脱离文档流,从而影响布局:

  • float
  • position: absolute 或 position: fixed
  • display: none(不显示元素)

重绘重排

在浏览器的渲染过程中,重绘(Repaint) 和 重排(Reflow) 是两个关键的性能优化概念。它们会影响页面的渲染效率,从而影响用户体验和页面流畅度

重绘发生在元素的外观(颜色、阴影等)发生变化,但不影响布局时。

重排发生在元素的几何属性(宽、高、位置)发生变化时,浏览器需要重新计算布局,重新渲染页面

BFC

BFC(Block Formatting Context,块级格式化上下文) 是 CSS 视觉渲染中的一种独立的布局环境,它决定了子元素如何排列,以及如何与其他元素相互影响。

如果一个元素创建了 BFC,它的 内部元素 会独立于外部元素进行布局,不会受到外部元素的影响,也不会影响外部元素。

BFC 的特点:

  • 内部的 Box 不会影响外部(避免外边距塌陷问题)。
  • 不会与浮动元素重叠(常用于清除浮动)。
  • BFC 区域不会与外部的浮动元素重叠(防止文本环绕浮动元素)。
  • BFC 内部元素不会被外部 float 覆盖(用于自适应布局)。

以下几种情况会创建 BFC:

  • display: flow-root
  • float: left | right
  • overflow: hidden | auto | scroll
  • position: absolute | fixed
  • display: flex | inline-flex
  • display: grid | inline-grid
  • display: table-cell | table-caption

CSS 盒模型

在 CSS 中,所有的 HTML 元素都被看作是一个矩形的“盒子”,这个盒子由多个部分组成,包括 内容(content)、内边距(padding)、边框(border)和外边距(margin)。这就是 CSS 盒模型(Box Model)