Answers:
最简单的方法是放在overflow:hidden
父div上,而不指定高度:
#parent { overflow: hidden }
另一种方法是也浮动父div:
#parent { float: left; width: 100% }
另一种方法使用明确的元素:
<div class="parent">
<img class="floated_child" src="..." />
<span class="clear"></span>
</div>
的CSS
span.clear { clear: left; display: block; }
overflow:hidden
部队的浏览器,它可以将最好包含父的子元素,这就是为什么它修复它。
overflow: hidden
这只会隐藏从父容器流出的元素的任何部分。对我来说,这导致文本的某些位变得不可读。
问题是浮动元素流出了:
如果一个元素是浮动的,绝对定位的或者是根元素,则该元素被称为流出。
因此,它们不会像流入元素那样影响周围的元素。
这在9.5 Floats中有解释:
由于浮动中没有浮动,因此在浮动框之前和之后创建的未定位块框将垂直流动,就好像浮动不存在一样。但是,根据需要缩短在浮点数旁边创建的当前和后续行框,以便为浮点数的边距框腾出空间。
这在10.6计算高度和边距中也有规定。对于“正常”区块,
仅考虑正常流程中的子级(即,忽略浮动框和绝对定位的框[…])
解决该问题的一种方法是将一些流入元素强制置于所有浮子下方。然后,父级的高度将增加以包装该元素(因此,浮点数也将增加)。
这可以通过使用来实现的clear
属性:
此属性指示元素框的哪些边可能不 与较早的浮动框相邻。
所以一个解决方案是添加一个空元素clear: both
作为浮点数的最后一个兄弟
<div style="clear: both"></div>
但是,这不是语义。因此最好在父级末尾生成一个伪元素:
.clearfix::after {
clear: both;
display: block;
}
此方法有多种变体,例如,使用不赞成使用的单冒号语法:after
来支持旧的浏览器,或使用其他块级显示,例如display: table
。
开头定义的问题行为有一个例外:如果一个块元素建立了一个块格式化上下文(是BFC根),那么它还将包装其浮动内容。
如果元素具有任何浮动后代,其后边缘的边缘低于元素的底部内容边缘,则高度会增加以包括这些边缘。
此外,如9.5 Floats所述,由于以下原因,BFC根也很有用:
表的边框,块级替换的元素或正常流程中建立新块格式上下文的元素[…]不得与该元素本身在同一块格式上下文中的任何浮点数的空白框重叠。
通过以下方式建立块格式化上下文
overflow
除以外的方块盒visible
,例如hidden
.bfc-root {
overflow: hidden;
/* display: block; */
}
块容器未阻止盒:当display
设置为inline-block
,table-cell
或table-caption
。
.bfc-root {
display: inline-block;
}
浮动元素:何时float
设置为left
或right
。
.bfc-root {
float: left;
}
绝对定位的元素:when position
设置为absolute
或fixed
。
.bfc-root {
position: absolute;
}
请注意,这些可能具有不希望的附带影响,例如剪切溢出的内容,使用“ 缩小以适合”算法计算自动宽度或变得流出。因此,问题在于不可能有一个具有可见溢出的流内块级元素来建立BFC。
显示器L3解决了这些问题:
创建了
flow
和内部显示类型,以更好地表达流程布局显示类型,并创建用于使元素成为BFC根的显式开关。(这样应该可以消除像黑客需要和[...])flow-root
::after { clear: both; }
overflow: hidden
可悲的是,尚无浏览器支持。最终我们也许可以使用
.bfc-root {
display: flow-root;
}
将您的内容div(s)
放在a div
和CSS中,即可overflow:hidden;
正常使用。
W3Schools建议:
放在overflow: auto
父元素上,它将为整个背景(包括元素边距)“着色”。浮动元素也将留在边界内。
http://www.w3schools.com/css/tryit.asp?filename=trycss_layout_clearfix
没有什么丢失。Float是为希望将图像(例如)放置在文本的几段旁边而设计的,以便文本在图像周围流动。如果文本“拉伸”了容器,那将不会发生。您的第一个段落将结束,然后您的下一个段落将在图像下方开始(可能在下面几百个像素处)。
这就是为什么您得到自己的结果。
谢谢LSerni,您为我解决了这个问题。
为达到这个 :
+-----------------------------------------+
| +-------+ +-------+ |
| | Text1 | | Text1 | |
| +-------+ +-------+ |
|+----------------------------------------+
您必须这样做:
<div style="overflow:auto">
<div style="display:inline-block;float:left"> Text1 </div>
<div style="display:inline-block;float:right"> Text2 </div>
</div>
正如卢卡斯所说,您所描述的是float属性的预期行为。令许多人感到困惑的是,为了弥补CSS布局模型中的缺陷,float已被远远超出了其最初的预期用途。
如果您想更好地了解此属性的工作原理,请查看Floatutorial。
首先,您可以轻松地进行操作,可以使div flex并向左或向右应用证明内容,并且可以解决问题。
<div style="display: flex;padding-bottom: 8px;justify-content: flex-end;">
<button style="font-weight: bold;outline: none;background-color: #2764ff;border-radius: 3px;margin-left: 12px;border: none;padding: 3px 6px;color: white;text-align: center;font-family: 'Open Sans', sans-serif;text-decoration: none;margin-right: 14px;">Sense</button>
</div>