CSS复习-CSS流

2022/7/27 CSS

# 一、文档流

# 1.1基本概念

文档流(Normal flow)也称为常规流,普通流

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

内联元素不会独占一行,而每个非浮动块级元素都独有一行

浮动元素则按规则浮在行的一端,若当时行容不下, 则另起新行再浮动,浮动元素不占任何正常文档流空间

浮动元素的定位照样基于正常的文档流,当一个元素脱离正常文档流后,依然在文档流中的其他元素将忽略该元素并填补其原先的空间

脱离文档流:

元素脱离文档流之后,将不再在文档流中占据空间,而是处于浮动状态(可以理解为漂浮在文档流的上方)

脱离文档流的元素的定位基于正常的文档流

当一个元素脱离文档流后,依然在文档流中的其他元素将忽略该元素并填补其原先的空间

# 1.2脱离文档流的方法

  • 浮动float
p {
	background-color: #ccc;
}
.float {
	float: left;
	font-weight: bold;
	width: 200px;
	border: 2px dotted black;
	padding: 10px;
}
<div class="box">
    <div class="float">I am a floated box!</div>
    <p>One November night in the year 1782, so the story runs, two brothers sat over their winter fire in the little French town of Annonay, watching the grey smoke-wreaths from the hearth curl up the wide chimney. Their names were Stephen and Joseph Montgolfier, they were papermakers by trade, and were noted as possessing thoughtful minds and a deep interest in all scientific knowledge and new discovery.</p>
    <p>Before that night—a memorable night, as it was to prove—hundreds of millions of people had watched the rising smoke-wreaths of their fires without drawing any special inspiration from the fact.”</p>
</div>
image-20220727103507543

可以看到下面的段落的背景颜色在下面运行,只是缩短了该段落的行框,以引起将内容环绕在浮动对象周围的效果

段落的框仍按照正常流程的规则显示。这就是为什么要在浮动项目周围留出空间,必须在该项目上添加边距,以便将线框推离它。

所以就验证了float脱离了“文档流”,没有脱离“文本流”

  • 绝对定位 position: absolute | fixed
p {
	border: 2px solid green;
}
.abspos {
	position: absolute;   //fixed运行结果与absolute结果一致
	background-color: green;
	color: #fff;
	top: 30px;
	right: 30px;
	width: 400px;
}
<div class="box">
    <p>One November night in the year 1782, so the story runs, two brothers sat over their winter fire in the little French town of Annonay, watching the grey smoke-wreaths from the hearth curl up the wide chimney.</p>
    <p class="abspos">Their names were Stephen and Joseph Montgolfier, they were papermakers by trade, and were noted as possessing thoughtful minds and a deep interest in all scientific knowledge and new discovery.</p>
    <p>Before that night—a memorable night, as it was to prove—hundreds of millions of people had watched the rising smoke-wreaths of their fires without drawing any special inspiration from the fact.”</p>
</div>

image-20220727103635174

使用position:absolute; 的元素被从文档流中删除,而且其占用的空间也被删除了,也就是脱离了文档流和文本流

  • 根元素html

根元素不流通,它是文档中所有内容的容器,并为文档建立了块格式上下文

# 二、文本流

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

position属性可以将元素从文本流脱离出来显示

文本流与文档流的区别:

文档流是相对于盒子模型讲的,文本流是相对于文字段落讲的

元素浮动之后,会让它跳出文档流,也就是说当它后面还有元素时,其他元素会无视它所占据了的区域,直接在它身下布局

但是文字却会认同浮动元素所占据的区域,围绕它布局,也就是没有拖出文本流

但是绝对定位后,不仅元素盒子会拖出文档流,文字也会出文本流。那么后面元素的文本就不会在认同它的区域位置,会直接在它后面布局,不会在环绕

简单来说就是float脱离了“文档流”,没有脱离“文本流”;position中的absolute和fixed全部脱离

# 三、定位流

属性position分类:

  • 相对定位 relative
  • 绝对定位 absolute
  • 固定定位 fixed
  • 静态定位 static

# 3.1相对定位relative

唯一一个不脱离文档流的属性值,始终在页面中占位置,相对自身原位置的偏移(加位移向)

特点:

  • 不影响元素本身特性
  • 不是元素脱离文档流(元素其实位置会被保留)
  • 没有定向偏移量时,对元素无影响(相对于自身偏移量)
  • 提高层级

# 3.2绝对定位absolute

特点:

  • 使元素完全脱离文档流
  • 使内联元素支持宽高
  • 块属性标签内容撑开宽度
  • 相对于父元素偏移量,逐层上找,直到document
  • 相对定位一般配合绝对定位使用
  • 提升层级

若无父级没有定位,则会逐层上找。

层级:在没有层级的情况下,谁在后面谁就在上面,z-index(改变定位元素) 值越大,在最顶层

# 3.3固定定位fixed

与绝对定位一致,但相对于可视化区域偏移,且ie6及低版本不兼容。

绝对定位的东西与页面一同运动,但固定定位的只停留在窗口,不随滚动条移动

# 四、浮动流

浮动流是一种半脱离标准流的排版方式, 是水平排版形式,它只能设置某个元素左对齐或者右对齐,它的属性 float ,取值 right/left/none

在浮动流中是不区分行内元素/行内块级/块级元素,都可以设置宽高

实现浮动的例子在脱离文档流第一个例子