有没有办法完全禁用边距折叠?我发现的唯一解决方案(称为“不折叠”)需要使用1px边框或1px填充。我觉得这是不可接受的:多余的像素毫无理由地使计算复杂化。是否有更合理的方法来禁用边缘折叠?
当前回答
事实上,有一个完美无缺的方法:
显示:flex; flex-direction:列;
只要你能接受IE10及以上版本
.container { 显示:flex; flex-direction:列; 背景:# ddd; 宽度:15他们; } .square { 保证金:15 px; 高度:3他们; 背景:黄色; } < div class = "容器" > < div class = "广场”> < / div > < div class = "广场”> < / div > < div class = "广场”> < / div > < / div > < div class = "容器" > < div class = "广场”> < / div > < div class = "广场”> < / div > < div class = "广场”> < / div > < / div >
其他回答
Try
{
display:flex;
flex-direction:column;
}
or
{
display:grid;
}
供你参考 网格,但有副作用:)
.parent {
display: grid
}
我知道这是一个非常老的帖子,但只是想说,在父元素上使用flexbox将禁用它的子元素的边距折叠。
为了防止姐妹页边距崩溃,添加display: inline-block;给兄弟姐妹中的一个(一个就足够了,但你可以给两个都加)。
保证金暴跌主要有两种类型:
相邻元素之间的折叠边距 缩小父元素和子元素之间的边距
只有在后一种情况下,使用填充或边框才能防止崩溃。此外,任何溢出值与父对象的默认值(可见)不同,都将防止崩溃。因此,overflow: auto和overflow: hidden具有相同的效果。也许使用hidden的唯一不同之处在于,如果父对象具有固定的高度,则隐藏内容会导致意想不到的后果。
其他属性,一旦应用到父,可以帮助修复这种行为:
浮动:左/右 位置:绝对的 显示方式:inline-block / flex / grid
您可以在这里测试所有这些:http://jsfiddle.net/XB9wX/1/。
我应该补充一点,像往常一样,Internet Explorer是个例外。更具体地说,在IE 7中,当为父元素指定某种布局(比如宽度)时,边距不会折叠。
来源:Sitepoint的文章“崩溃边缘”