CSS 文档流

在学习浮动布局和定位布局之前,我们先来了解 “正常文档流” 和 “脱离文档流”。深入了解这两个概念,是学习浮动布局和定位布局的理论前提。

CSS 正常文档流

什么叫 “文档流”?简单来说,就是指元素在页面中出现的先后顺序。那什么叫 “正常文档流” 呢?

正常文档流,又称为 “普通文档流” 或 “普通流”,也就是 W3C 标准所说的 “normal flow”。我们先来看一下正常文档流的简单定义:“正常文档流,将一个页面从上到下分为一行一行,其中块元素独占一行,相邻行内元素在每一行中按照从左到右排列直到该行排满。” 也就是说,正常文档流指的就是默认情况下页面元素的布局情况。

我们来总结一下,主要有以下 2 点。

  • 元素在正常文档流中,遵循从上到下,从左到右的排列方式。
  • 块级元素独占一行,行内元素在一行内依次排列,直到该行排满。

示例 1:CSS 文档流

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
</head>
<body>
    <div></div>
    <span></span><span></span>
    <p></p>
    <span></span><i></i>
    <img>
    <hr>
</body>
</html>

上面 HTML 代码的正常文档流如下图所示。

CSS 正常文档流

CSS 正常文档流分析

分析:

由于 div、p、hr 都是块元素,因此独占一行。而 span、i、img 都是行内元素,因此如果两个行内元素相邻,就会位于同一行,并且从左到右排列。

CSS 脱离文档流

在 CSS 中,脱离文档流指的是脱离正常文档流。正常文档流就是我们没有使用浮动或者定位去改变的默认情况下的 HTML 文档结构。换一句话说,如果我们想要改变正常文档流,常见的有 2 种方法:

示例 2:CSS 脱离文档流

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        /* 定义父元素样式 */
        #father {
            width: 300px;
            background-color: #0C6A9D;
            border: 1px solid silver;
        }
        /* 定义子元素样式 */
        #father div {
            padding: 10px;
            margin: 15px;
            border: 2px dashed red;
            background-color: #FCD568;
        }
    </style>
</head>
<body>
    <div id="father">
        <div id="son1">box1</div>
        <div id="son2">box2</div>
        <div id="son3">box3</div>
    </div>
</body>
</html>

页面效果如下图所示。

CSS 正常文档流效果

分析:

上面定义了 3 个 div 元素。对于这个 HTML 来说,正常文档流指的就是从上到下依次显示这 3 个 div 元素。由于 div 是块元素,因此每个 div 元素独占一行。

1. 设置浮动

当我们为第 2、3 个 div 元素设置左浮动时,在页面效果如下图所示。

CSS 浮动效果

正常文档流情况下,div 是块元素会独占一行。但是由于设置了浮动,第 2、3 个 div 元素却是并列一行,并且跑到父元素之外,跟正常文档流不一样。也就是说,设置浮动使得元素脱离了正常文档流。

2. 设置定位

当我们为第 3 个 div 元素设置绝对定位的时候,页面效果如下图所示。

CSS 定位效果

由于设置了定位,第 3 个 div 元素跑到父元素的上面去了。也就是说,设置了定位使得元素脱离了文档流。

对于浮动和定位,我们在接下来的两章就给大家详细介绍。

上一篇: CSS 外边距

下一篇: CSS 浮动

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号