我有两个div:
<div><label for="1">Some really loooong text... Which breaks the second div. Which then appears shifted to the right.</label><input type="text" id="1" name"1"></div>
<div><label for="2">Shifted.</label><input type="text" id="2" name"2">
我使用以下css浮动输入文本字段左侧的标签:
label{
width:200px;
float:left;
}
第二个div向左移动而不是出现在第一个div之下。它应该作为第一个对齐到左边。
以下是示例:http://jsfiddle.net/qh37Y/
现在如果我插入一个 clear:both; div它可以工作,但这是最佳实践吗?
.clearer {
clear:both;
}
<div class="clearer"><label for="2">Shifted.</label><input type="text" id="2" name"2">
答案 0 :(得分:12)
看起来这实际上是div的高度问题。
由于内容是浮动的,因此不会影响div的高度。因此,第二个div中的内容(不是div本身)包裹着来自第一个div的浮动标签。
clear: both
是可以接受的,但如果(例如),您想将这些div用作两列布局的一列,则会破坏布局。
我建议改为div { overflow: hidden; }
。这为div提供了一个新的盒子上下文,它不允许重叠边框,从而使浮动内容的高度有助于div的高度。
修改:Fixed fiddle
答案 1 :(得分:6)
明确:两个div都可以完全接受使用。
答案 2 :(得分:3)
是的,clear: both
通常是您最终使用的内容。请注意,您也可以使用clear: left
等
答案 3 :(得分:3)
首先,你不能使用以数字开头的标识符 - 只是说';')
如果我理解您的问题,解决方法是将clear: both
添加到您的div:
div {
clear: both
}
将代码放在标签定义下。
答案 4 :(得分:0)
我注意到,如果我们要处理flex
显示类型的div,那么常规解决方案可能不够用。如果要在块下面显示flex
div,即使使用了width: 100%
或clear: both
块,flex仍将显示在其侧面。解决方案是将flex元素的宽度也指定为100%,例如:
CSS:
.top_div {
display: block;
}
.bottom_div {
display: flex;
justify-content: center;
width: 100%; /*key*/
}
HTML:
<div class="replies_container">Your block content</div>
<div class="flex_container">
Your flex content</div>
旁注:也许这不是OP的问题的直接解决方案,但对可能偶然发现它的未来Google员工(例如我自己)有用。