css浮动元素的奇怪行为

Bla*_*ake 3 css css-float

我对css浮动规则感到困惑.有人可以解释这背后的机制,而不仅仅是使它们看起来更好的解决方案.这是我的代码:

<!doctype html>
<html>
<head>
<!-- <link rel="stylesheet" type="text/css" href="style.css"> -->
<style type="text/css">
    div{
        width:400px;
    }
    ul{
        list-style-type: none;
    }
    li{
        float: left;
        margin: 4px;
    }

</style>

</head>
<body>
    <div>
    <ul>
        <li><img src="http://placehold.it/100x50&text=1"/></li>
        <li><img src="http://placehold.it/100x200&text=2"/></li>
        <li><img src="http://placehold.it/100x120&text=3"/></li>
        <li><img src="http://placehold.it/100x100&text=4"/></li>
        <li><img src="http://placehold.it/100x100&text=5"/></li>
        <li><img src="http://placehold.it/100x100&text=6"/></li>
    </ul>
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述

为什么地球上第4个元素属于第3个元素但不属于第1个元素?

Bol*_*ock 6

规范说:

2.如果当前框是左浮动的,并且源文档中较早的元素生成了任何左浮动框,则对于每个此类较早的框,要么当前框的左外边缘必须位于右侧,前一个框的右外边缘,或其顶部必须低于前一个框的底部.类似的规则适用于右浮箱.

和:

8.浮动箱必须尽可能高.

由于所有元素都浮动到左侧,因此第4个元素不能浮动到第2个元素的左侧,因为第2个元素位于源代码之前.它仍然可以保持在容器的约束范围内,并且其前面的浮点数位于第3个元素的下方,因为它在高度方面比第2个元素短.因此第4个元素浮动在第3个元素下面.