# 文档流

https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Positioning

块级元素

display: block

块级元素在视口中垂直布局——每个都将显示在上一个元素下面的新行上,并且它们的外边距将分隔开它们。

# 脱离文档流

float的原始作用是为了实现文字环绕的作用,可以理解为部分脱离文档流。

  • 完全脱离文档流:例如position:absolute,使用绝对定位的盒子,其他盒子无论是其本身还是里面的任何元素都会无视这个绝对定位的盒子进行布局。
  • 部分脱离文档流:即float盒子,使用float属性后,其他block盒子会无视float盒子进行布局,但是其他盒子内的inline元素和inline-block元素依旧会为这个浮动的盒子让出位置。

# 外边距重叠

https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Box_Model/Mastering_margin_collapsing

如果两个相邻元素都在其上设置外边距,并且两个外边距接触,则两个外边距中的较大者保留,较小的一个消失——这叫外边距折叠 (opens new window),

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        box-sizing: border-box;
        margin: 0;
        padding: 0;
      }
      div {
        border: 1px solid tomato;
      }
      div:nth-child(1) {
        margin-bottom: 10px;
      }
      div:nth-child(2) {
        margin-top: 20px;
      }
    </style>
  </head>
  <body>
    <div>123</div>
    <div>456</div>
  </body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

# 定位 (opens new window)

# 绝对定位

绝对定位的元素不再存在于正常文档布局流中。定位的元素会脱离标准文档流(简称脱标)。

可以将css布局理解为ps中的图层,默认大家都是在背景层上排列的,一旦文档定位脱标后,相当于新建一个图层,图层1在背景层上。

绝对定位元素在HTML源代码中,是被放在<body>中的

改变定位上下文—— 绝对定位的元素的相对位置元素。

通过设置其中一个父元素的定位属性 —— 也就是包含绝对定位元素的那个元素(如果要设置绝对定位元素的相对元素,那么这个元素一定要包含绝对定位元素)。

**注意:**margins 仍会影响定位的元素。 然而margin collapsing不会。

flow-root

flow-root 会创建一个块级格式化上下文。

由此可以解决浮动所带来的元素遮挡影响

display: flow-root 之前

image-20210923143355859

display: flow-root 之后

image-20210923143300435

上面的元素盒子123 float: left,在给盒子456设置flow-root之前,456会覆盖住123。

而设置了flow-root后,456产生了一个块级格式化上下文。