浮动流的半脱标性
浮动流是一种半脱离标准流的排版方式,之所以这么说,是因为浮动元素浮动之后的位置取决于它在浮动之前的标准流中的位置,跟标准流还是有一定的关系,比如说浮动的元素在浮动之前处于标准流的第二行,那么他浮动之后也是处于浮动流的第二行,不会去找其他行的浮动元素去贴靠,打一个比方就是:浮动流就是在标准流上面覆盖的一层透明薄膜,元素浮动之后就会被从标准流中扔到浮动流这个薄膜上,他在这个薄膜上的位置还是以前在标准流的位置上找同方向的浮动元素进行贴靠,贴靠的准则就是:
(1)、同一个方向上谁先浮动,谁在前面
(2)、左浮动找左浮动,右浮动找右浮动
写一段代码来感受一下,
1、下面是四个简单的div,没有浮动,先看一下他们在标准流中的排版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
}
.box1{
width: 100px;
height: 100px;
background-color: red;
}
.box2{
width: 150px;
height: 150px;
background-color: blue;
}
.box3{
width: 200px;
height: 200px;
background-color: green;
}
.box4{
width: 250px;
height: 250px;
background-color: yellow;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
<div class="box4"></div>
</body>
</html>
结果就是这样的,这个不用解释,div块级元素,在标准流中垂直排版
2、接下来我们给4个div都添加样式float:left,结果就是四个div一字排开
原因:浏览器渲染的时候,是从上至下渲染的,当渲染到第一个div时,发现是左浮动,这个时候就将该div从标准流扔到浮动流中,下面三个div顶上来占据标准流的空余位置,浮动流中的这个div浮动之前在标准流的第一行,那么它也会在浮动流的第一行找左浮动的元素进行贴靠,没有找到它就贴靠在父元素的左边,第一个div渲染好之后,到了第二个div,此时第二个div处于标准流的第一行,当它浮动时被扔到浮动流中,后面两个div顶上去占据标准流的空余位置,第二个div浮动之前在标准流的第一行,那么它也会在浮动流的第一行找左浮动的元素进行贴靠,这个时候就找到了前面已经左浮动的红色div,紧跟在红色div的后面,完成浮动,其他两个以此类推。。。
3、现在稍微复杂一点儿,只要第一个和第三个左浮动,第二个和第四个不浮动,你猜结果是什么样子的?没错,你可能猜错了,结果是这样
为什么是这样,还是一样的原理:
先分析第一个,同上,当渲染到第一个div时,发现是左浮动,这个时候就将该div从标准流扔到浮动流中,下面三个div顶上来占据标准流的空余位置,浮动流中的这个div以前在标准流是第一行,那么它也会在浮动流的第一行找左浮动的元素进行贴靠,没有找到它就贴靠在父元素的左边,第一个div渲染好之后,到了第二个,第二个不浮动,还保留在标准流的第一行,第一个div浮在他的上面,接下来是第三个div(绿色的),浮起来,第四个顶上去,占据标准流的空白位置,第三个div浮动之前是在标准流的第二行,它在浮动流也开始从第二行开始找左浮动的元素,没找到,自己贴靠到父元素的左边,最后是第四个,不浮动,保持原样,结果就是上面所示
文字功底比较差,感觉叙述的婆婆妈妈的样子,不知道你的小脑袋有没有把精华提炼出来并吸收