我希望我的容器div可以获取其所有子元素的最大高度,而不需要知道子元素div的实际高度。我在JSFiddle上尝试了一下,但是容器div(红色)没有显示出来。为什么呢?
添加以下属性:
.c{
...
overflow: hidden;
}
这将强制容器尊重其中所有元素的高度,而不考虑浮动元素。
http://jsfiddle.net/gtdfY/3/
最近,我正在开发一个需要此技巧的项目,但需要允许溢出显示,因此,您可以使用伪元素来清除浮动,从而实现相同的效果,同时允许所有元素溢出。
.c:after{
clear: both;
content: "";
display: block;
}
你正在浮动子元素,这意味着它们“浮动”在容器的前面。 为了获取正确的高度,您必须“清除”浮动。
div 样式="clear: both" 清除浮动并为容器提供正确的高度。有关浮动的更多信息,请参见http://css.maxdesign.com.au/floatutorial/clear.htm。
例如:
<div class="c">
<div class="l">
</div>
<div class="m">
World
</div>
<div style="clear: both" />
</div>
这难度不太大吧?
.c {
overflow: auto;
}
尝试在最后一个 </div>
前插入这个清除浮动的 div:
<div style="clear: both; line-height: 0;"> </div>
最好、最可靠的解决方案是向容器添加::before
和::after
伪元素。因此,如果您有例如以下列表:
<ul class="clearfix">
<li></li>
<li></li>
<li></li>
</ul>
如果列表中的每个元素都具有 float:left
属性,则应将以下内容添加到您的 CSS 中:
.clearfix::after, .clearfix::before {
content: '';
clear: both;
display: table;
}
display:inline-block;
属性,这样你就不需要添加任何clearfix。我遇到了同样的问题,我想出了四种可行的解决方案:
display: flex;
(这是我最喜欢的解决方案)overflow: auto;
或 overflow: hidden;
.c:after {
clear: both;
content: "";
display: block;
}
<div style="clear: both;"></div>
我遇到了同样的问题,经过一些研究,我认为在包含元素上使用display: flow-root
是正确的方法。
来自MDN关于clear
属性:
如果一个元素只包含浮动元素,则其高度会折叠为零。如果您希望它始终能够调整大小,以便其中包含浮动元素,请将元素的display属性的值设置为flow-root。
因此,虽然clear: both
可以工作(正如其他答案所建议的那样),但它实际上是设计用来正确定位同一容器内的其他元素内部,并尊重浮动元素的高度。应该使用display: flow-root
来使包含元素尊重其所有子元素的高度,以便其他元素(例如包含元素的兄弟姐妹)可以正确定位。