【发布时间】:2018-03-04 01:26:40
【问题描述】:
在 CSS 中,相邻的垂直边距通常会相互“折叠”(即元素之间的垂直间距将等于最大边距,而不是边距之和)。
但是,fieldset 元素与大多数其他元素不同,它不允许其子元素的边距与其兄弟元素的边距一起折叠:
<div>Before div</div>
<div style="margin:0; border:0; padding:0; background:#ccc;">
<div style="margin:20px 0;">This div has a top and bottom margin, which has collapsed outside of the parent div.</div>
</div>
<div>After div</div>
<div>Before fieldset</div>
<fieldset style="margin:0; border:0; padding:0; background:#ccc;">
<div style="margin:20px 0;">This div has a top and bottom margin, but the parent fieldset prevents it from collapsing.</div>
</fieldset>
<div>After fieldset</div>
我认为(但不确定)这是因为字段集正在创建一个新的块格式化上下文——the CSS spec doesn’t currently define whether fieldsets should or not,但the HTML5 spec says it “expects” them to。
有什么方法可以防止字段集阻止他们的孩子和他们的兄弟姐妹之间的边距折叠?
【问题讨论】:
-
看起来我的浏览器 (Chrome) 通常会使用一些默认填充来呈现
fieldset元素,这可能会阻止边距折叠。您最好的方法可能是简单地使用div。 -
@Blazemonger:“我的浏览器 (Chrome) 通常会使用一些默认填充来呈现字段集元素”——确实如此,但正如您在我的示例中所注意到的,如果填充为删除。 “你最好的方法可能是简单地使用 div”——可能不是,因为
fieldset向屏幕阅读器表明表单字段是分组的,而divindicates nothing。 -
我的意思是,有默认属性
-webkit-padding-start和-webkit-padding-before需要与padding分开覆盖。但即使我这样做了,利润也不会崩溃,所以我不确定它们是否真的发挥了作用。 -
看起来你的理论是对的:“