浮动与文本显示

box1左浮动,脱离了文档流。
box2无视它的存在占据了它的空间。
但是box1已经解析,所以背景是yellow,box2的颜色不显示了,为何box2的字体被挤出到outer外面了。
按照背景的解析方式,应当被覆盖在box1中,根本不显示。

<html>
    <head>
        <style>
        #outer{
        width:400px;
        border:1px solid black;
        }
        #box1{    
        width:100px;
        height:100px;
        margin:10px;
        float:left;
        background-color:yellow;
        }
        #box2{
        width:100px;
        height:100px;
        background-color:red;
        margin:10px;
        border:1px solid black;
        }
        p{
        margin:0px;
        padding:0px;
        }
        </style>
    </head>
    <body>
    <div id="outer">
            <div id="box1">box1</div>
            <div id="box2">
            <p>box2</p>
            <p>box2</p>
        </div>
    </div>
    </body>
</html>

请解释?

图片描述

阅读 2.5k
3 个回答

都用100px哪看的出来谁是谁啊……你把box1的高度改成小于100px的值(最好幅度大点比如50px)就明白了。

简单点说就是,浮动虽然脱离了文档流,但还是会影响正常流中inline元素的布局(注意不会影响block元素)

于是结果就显而易见了

  1. box1不会影响box2(因为box2block元素),所以box2无视box1的存在,布局到box1的下方(宽高一样,直接被盖住了)。

  2. 同时box2内文字的布局(文字也是inline元素)会受box1影响(意味着文字不会出现在box1内)

  3. box1box2的宽高都一样,所以文字超出了父容器box2,被挤到下方

如果增加box2的宽度,文字就会位于box1的右边。如图所示是将宽度改为150px

另:关于浮动更深入的理解,可查看张鑫旭前辈的系列文章

谢谢查到文档,标准用语对于float,normal flow中的inline box和block box受到的影响不一致。
国内技术界使用文档流对应 block box;文本流 对应 inline box。
没有document flow ,text flow的说法。只有normal flow的说法。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题