HTML 文档流和文本流的理解

文本流,概括地说其实就是一系列字符,是文档的读取和输出顺序,也就是我们通常看到的由左到右、由上而下的读取和输出形式,在网页中每个元素都是按照这个顺序进行排序和显示的,而position属性可以将元素从文本流脱离出来显示。

文档流,英文原版文档为"normal flow",翻译成常规流、普通流也就更好理解它了。

从直观上理解,常规流指的是元素按照其在 HTML 中的位置顺序决定排布的过程,主要的形式是自上而下(块级元素),一行接一行,每一行从左至右(行内元素)。

定位类型包括三种:

常规流:又包含三种类型:块级元素的块级格式、行内元素的行内格式以及两种元素的相对定位方式。

浮动(float)

绝对定位(position:absolute/position:fixed)

W3C的文档:

9.3 Positioning schemes

In CSS 2.1, a box may be laid out according to three positioning
schemes:

  1. Normal flow. In CSS 2.1, normal
    flow includes block formatting
    of block-level boxes,
    inline formatting
    of inline-level boxes, and relative positioning of
    block-level and inline-level boxes.
  2. Floats. In the float model,
    a box is first laid out according to the normal flow, then
    taken out of the flow and shifted
    to the left or right as far as possible. Content may
    flow along the side of a float.
  3. Absolute positioning.
    In the absolute positioning model, a box is removed from
    the normal flow entirely (it has no impact on later siblings)
    and assigned a position with respect to a containing block.

An element is called out of
flow if it is floated, absolutely positioned, or is the
root element. An element is called in-flow if it is not out-of-flow. The
flow of an element
A is the set consisting of A and all in-flow
elements whose nearest out-of-flow ancestor is A.

1 脱离文档流

所以说,脱离文档流只有两种情况,float和绝对定位。

1.1 浮动脱离文档流

利用float脱离文档流的时候,其他盒子元素会无视这个元素,但是其他盒子内的文字依然会为它让出位子,环绕在其周围,也就是说不脱离文本流。下面是在常规流中的代码及效果(只展示body中的内容):

<div class="outOfNormal">
  This is outofNormal content area.
</div>
<h2>normal contentnormal contentnormal contentnormal contentnormal content</h2>
<p>This is normal content area.This is normal content area.This is normal content area.This is normal content area.</p>

CSS:

.outOfNormal{
  height: 200px;
  width: 220px;
  background-color: #000000;
  color:#FFFFFF;
  text-align:center;
  line-height:200px;
  overflow:hidden;
}

效果图:

给div加上浮动属性之后:

.outOfNormal{
  height: 200px;
  width: 220px;
  background-color: #000000;
  color:#FFFFFF;
  text-align:center;
  line-height:200px;
  overflow:hidden;
  float:left;
}

可以发现,div脱离了文档流,h2元素和p元素都定位不到div,所以顶了上来。但是其中的文字却还是定位在div的右边,说明此时脱离了文档流,并没有脱离文本流。

但是值得注意的是,如果一个浮动元素的上一个元素也是浮动的,那么它会跟在上一个元素的后面。

1.2 绝对定位脱离文档流(absolute)

将浮动改为绝对定位(absolute):

.outOfNormal{
  height: 200px;
  width: 220px;
  background-color: #000000;
  color:#FFFFFF;
  text-align:center;
  line-height:200px;
  overflow:hidden;
  position:absolute;
}

可以发现此时的文字也顶到最左侧,忽略了div,脱离了文档流同时也脱离了文本流。

1.2 绝对定位脱离文档流(fixed)

再用position:fixed;试试:

.outOfNormal{
  height: 200px;
  width: 220px;
  background-color: #000000;
  color:#FFFFFF;
  text-align:center;
  line-height:200px;
  overflow:hidden;
  position:fixed;
}

发现效果相同。

总结:也就是说使用float可以使元素脱离文档流而不脱离文本流(元素无视它的存在,但是元素中的文字会围绕在它周围,但是不会脱离dom树,用浏览器的审查元素就可以看到脱离文档流的元素、),而使用绝对定位可以使元素脱离文档流和文本流(元素和其中的文字都定位不到它的存在)。

参考:https://www.zhihu.com/question/24529373/answer/29135021

    https://www.zhihu.com/question/21911352

原文地址:https://www.cnblogs.com/xiaokeai0110/p/9184983.html

时间: 2024-08-01 12:49:54

HTML 文档流和文本流的理解的相关文章

python help文档输出到文本中

y偶时候,相差个对象的帮助,但是内容太多了,一直按回车..... 搜到高手修改系统重定向的代码了,果然可行.... import os import sys out = sys.stdout sys.stdout = open("help.txt", "w") help(os) sys.stdout.close() sys.stdout = out

理解文档流

这个暑假里的实习是真正让我体会到了做前端一定要理解文档流.之前一直处于必须给元素加边框才能看到我讲元素放置在了文档中的什么位置.理解了文档流,脑海中就会定位到相应的元素. 文档流,其实本没有这样的定义,有的是普通流的概念.简单说就是元素按照其在HTML中的位置顺序决定排布的过程.并且这种过程遵循标准的描述. 即将窗体自上而下的分成一行一行,并在每行中按照从左至右的顺序排放,即为文档流.所有的HTML都在块框或者行内框中. 当浏览器开始渲染HTML文档,它从窗口的顶端开始,经过整个文档内容的过程中

文本流与二进制流

一. 基本知识: 1. 二进制文件与文本文件的区别:    将文件看作是由一个一个字节(byte) 组成的, 那么文本文件中的每个字节的最高位都是0,也就是说文本文件使用了一个字节中的七位来表示所有的信息,而二进制文件则是将字节中的所有位都用上了,这就是两者的区别:接着,第二个问题就是文件按照文本方式或者二进制方式打开,两者会有什么不同呢?其实不管是二进制文件也好,还是文本文件也好,都是一连串的0和1,但是打开方式不同,对于这些0和1的处理也就不同.如果按照文本方式打开,在打开的时候会进行tra

python 解析docx文档的方法,以及提取插入的文本对象和图片

首先安装docx模块,通过pip install docx或者在docx官方链接上下载安装都可以 下面来看下如何解析docx文档:文档格式如下 有3个部分组成 1 正文:text文档 2 一个表格. 3一个插入的文件对象.4 一个图片 这4个部分是我们在docx文档中最常见的几种格式.解析代码如下 import docx def docx_try():     doc=docx.Document(r'E:\py_prj\test.docx')     for p in doc.paragraph

Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)

对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过 Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档.本文上篇中,我们介绍了一个可以帮助简化打开 位于本地和Web上的HTML文档的Python模块.在本文中,我们将论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的 内容,如链接.图像和Cookie等.同时还会介绍如何规范HTML文件的格式标签

【python】使用HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies

一.从HTML文档中提取链接 模块HTMLParser,该模块使我们能够根据HTML文档中的标签来简洁.高效地解析HTML文档. 处理HTML文档的时候,我们常常需要从其中提取出所有的链接.使用HTMLParser模块后,这项任务将变得易如反掌.首先,我们需要定义 一个新的HTMLParser类,以覆盖handle_starttag()方法,我们将使用这个方法来显示所有标签的HRef属性值. 定义好新的HTMLParser类之后,需要创建一个实例来返回HTMLParser对象.然后,就可以使用u

使用Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)(转)

对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过 Python语言提供的各种模块,我们无需借助Web服务器或者Web浏览器就能够解析和处理HTML文档.本文上篇中,我们介绍了一个可以帮助简化打开 位于本地和Web上的HTML文档的Python模块.在本文中,我们将论述如何使用Python模块来迅速解析在HTML文件中的数据,从而处理特定的 内容,如链接.图像和Cookie等.同时还会介绍如何规范HTML文件的格式标签

文档对象模型操作xml文档

简介 :文档对象模型(DOM)是一种用于处理xml文档的API函数集. 2.1文档对象模型概述 按照W3C的定义,DOM是“一种允许程序或脚本动态地访问更新文档内容,结构和样式的.独立于平台和语言的规范化接口.DOM是表示文档(比如HTML和XML)和访问.操作构成文档的各种元素的应用程序接口,它以树状结构表示HTML和XML文档,定义了遍历这个树和检查.修改树的节点的方法和属性. DOM的核心API还允许你创建和填充文件.加载文档并保存. 2.2DOM实现 微软的net框架在Systemx.x

复合文档的二进制存储格式研究(word,xls,ppt...)[转]

复合文档文件格式研究   前 言 复合文档(Compound Document) 是一种不仅包含文本而且包括图形.电子表格数据.声音.视频图象以及其它信息的文档.可以把复合文档想象成一个所有者,它装着文本.图形以及多媒体信息如 声音和图象.目前建立复合文档的趋势是使用面向对象技术,在这里,非标准信息如图像和声音可以作为独立的.自包含式对象包含在文档中.Microsoft Windows就是使用这种技术,叫做“OLE2 storage file format”或“Microsoft Office