考虑以下测试用例,其中一个float元素和一个inline元素放置在a <fieldset>与a之内<div>:
<fieldset>
<div>
<!DOCTYPE html> <html> <head> <style type="text/css"> .float {float:right; background-color:red; height:200px;} </style> </head> <body> <fieldset> <span>Inline!</span> <div class="float">Float!</div> </fieldset> <fieldset> <span>Inline!</span> <div class="float">Float!</div> </fieldset> <div> <span>Inline!</span> <div class="float">Float!</div> </div> <div> <span>Inline!</span> <div class="float">Float!</div> </div> </body> </html>
呈现时,字段集的高度为200像素(它们清除浮点数了吗?),而div的高度仅与内联元素一样高。造成这种现象的原因是什么,是否有一种解决方法可以使这些字段集像div一样起作用?
显然,<fieldset>元素应该为其内容生成块格式上下文:
fieldset期望该元素建立新的块格式化上下文。
fieldset
这就是为什么浮动元素不会从其中浮动出来的原因。我想这与字段集作为可视表单控件组的性质有关。可能还有其他原因,但听起来似乎最合理。
似乎没有一种方法可以撤消此操作,但是我不会感到惊讶。创建完块格式化上下文后,您将无法销毁它。
顺便说一句,<fieldset>s不会 清除 浮点数(除非您给它们赋予clear以外的其他样式none)。当元素清除浮点数(或说具有间隙)时,它仅清除在相同格式上下文中与之接触的 先前的 浮点数。父元素也不会清除其子元素的浮点数,但是它可以为它们的浮动对象建立一个格式化上下文。这是在中看到的行为<fieldset>,当您设置overflow为除visible父元素之外的其他值时,也会发生这种情况。
clear
none
overflow
visible
从规格(重点是我的):
此属性指示元素框的哪些边可能 不 与较早的浮动框相邻。 ‘clear’属性不考虑元素本身内部或其他 块格式化上下文中的 浮点数 。
此外,如评论中所述,浏览器没有为该元素定义清除样式,因此默认清除样式将已经是的默认值none。此演示中对此进行了展示,其中仅将浮点框之后的字段集定义为具有清除属性,而实际上是清除浮点的域集。