我有一个背景颜色为绿色的容器。在绿色<div>
内,我有一个<div>
,它是黑色的,并且被设置为一个方框(50px x 50px) - 这个<div>
浮动到左边。
现在,如果我在灰色<p>
之后向我的标记添加<div>
,我希望它会在灰色<div>
周围浮动。确实如此。然而,当我用另一个<div>
取代
时,它被设置为方框(设置高度和宽度),它不会再浮动,但会在浮动div后面消失。
即使我有第一段正确浮动的段落,然后我添加div(框),段落也会停止浮动并出现在另一条线上。
HTML:
<div id="greencontainer">
<div id="blackbox"></div> <!--this one is float:left;-->
<p>A paragraph that floats around the previous div</p>
<div id="anotherbox"></div> <!-- if I add another div with set width and height, it disappears behind the floated one, and even prevents the paragraph from floating around.-->
</div>
CSS:
#blackbox {
width:50px;
height:50px;
background-color:black;
float:left;
}
#p {
margin:0px;
padding:0px;
}
#anotherbox {
width:50px;
height:50px;
background-color:grey;
}
答案 0 :(得分:3)
实际上,<p>
本身的一部分,也就是一个阻止框,也隐藏在你的第一个<div>
之后。那是因为它没有被浮动,所以它正在正常流中布局,好像第一个<div>
不存在,因为floating一个框从{{3}中取出}}
您的<p>
包含内联内容(其文字),但内联内容可以绕过您的第一个<div>
,因为内联内容就是这样做的。这就是为什么你能够将图像左右对齐,文本能够在图像周围流动而不会妨碍图像。
你的第二个<div>
,就像你的<p>
一样,没有浮动,所以再次将它放在正常的流程中,好像你的第一个<div>
不存在一样。由于它们都具有相同的尺寸,看起来好像一个完全隐藏在另一个之后。
在您的代码中,<div>
之后会有第二个<p>
,因此不应影响该文本。但是,如果您打算在 <p>
之前添加:
<div id="greencontainer">
<div id="blackbox"></div>
<div id="anotherbox"></div>
<p>A paragraph that floats around the previous div</p>
</div>
然后,在阅读上面的解释之后,文本停止在第一个<div>
周围流动的原因变得很明显:因为你的第二个<div>
挡住了,隐藏在第一个<p>
后面。这是推动{{1}}向下的第二个因素。
答案 1 :(得分:2)
非浮动div不会原生地围绕浮动分区。您应该做的是在margin-left: 50px
div上添加anotherbox
以使其正确流动(如果它位于浮动容器旁边)。我不确定这是否是最好的解决方案,但如果你知道div 总是在浮动的div旁边,它通常会运行良好。如果它不在它旁边,那么它将自动正确流动。
看看这个小提琴。
答案 2 :(得分:0)
我最近也遇到过这个问题并且纯粹偶然发现添加溢出:自动(或隐藏)到div,会导致它浮动浮动div(就像你期望的那样)。
将#anotherbox
的css更改为这样......
#anotherbox {
width:50px;
height:50px;
background-color:grey;
overflow: auto;
}
以下是测试此内容的链接:https://jsfiddle.net/kh3pdbtx/
至于为什么这是有效的 - 老实说我不知道。如果有人可以对这个问题有所了解并解释其背后的原因,我真的很感激。
这似乎与Block formatting context有关。