更新:一篇关于浮动的更全面的文章现已发布:浮动详解
您可能听说过“清除浮动”,但您真的理解它吗?整个问题在于,浮动对象无法正确地添加到其所在对象的高度。如下所示,这些具有“floated_box”类的 div 位于“main_container” div 内,但在页面上它们却在该容器 div 之外。
#main_container {
width: 400px;
margin: 20px auto;
border: 2px solid #cccccc;
padding: 5px;
}
.floated_box {
float: left;
width: 100px;
height: 100px;
border: 1px solid #990000;
margin: 10px;
}
<div id="main_container">
<p>Some content.</p>
<div class="floated_box"></div>
<div class="floated_box"></div>
<div class="floated_box"></div>
<div class="floated_box"></div>
<div class="floated_box"></div>
</div>
我们只需要**清除浮动**,这个问题就解决了。将这个空 div 放到最后一个浮动对象**之后**
<div style="clear: both;"></div>
然后您将得到以下结果
此修复确实添加了一些无用的标记,这与 CSS 的道义背道而驰,但它是一个简单的跨浏览器修复,不会让您失望。
有一种比使用无意义的空 div 元素来清除浮动更好的方法,事实上,有几种方法,但我将列出最简单的一种。我使用换行符来清除浮动。
.brclear {
clear:both;
height:0;
margin:0;
font-size: 1px;
line-height: 0;
}
在 HTML 中,它将变为
它不占用任何空间,并且比使用空 div 更可取。
我明白你的意思,但我认为它们各有优劣。如果你问我,一个无用的 HTML 元素与另一个无用的 HTML 元素没什么区别,而且这种方法不会使 CSS 混乱。
#main_container {overflow: auto}
这样应该就可以做到,无需添加任何额外的标记。
#main_container {overflow: auto} 解决了我的问题,无需添加任何其他 div!谢谢!!!!
我一直使用 {overflow: auto;} 来解决这个问题。我为什么要使用 div 来清除而不是使用它呢?Overflow 看起来有点像 hack,但清除 div 似乎也是如此……
overflow: auto 的问题
在加载页面时效果很好。但是,当您调整页面大小或使用 ajax 向包含元素添加其他内容时,auto 不会适应额外的高度。在这种情况下,您会在分配了 :auto overflow 属性的元素内看到一个滚动条出现。
我目前正在寻找解决方案。
我尝试使用 #container{overflow:auto;},但它在我的容器中给我一个水平滚动条。Clear div 则不会。当然,我的 CSS 现在有点乱,但我正在努力掌握它。
这篇文章中没有“为什么”。
我现在正在搜索其他文章,以了解为什么这样做有效。
也许您应该完成这篇文章来解释“为什么”部分?
这里有更多信息:https://css-tricks.cn/all-about-floats/
谢谢 Chris!