此问题在此处已有答案:
How to disable margin-collapsing?(12个答案)
三年前就关门了。
在CSS中折叠边距:http://www.w3.org/TR/CSS21/box.html#collapsing-margins
我理解purpose of the feature,但我正在尝试布局,我不知道如何关闭它。
CSS教程中通常解释的方法是:
1.添加边框
1.添加填充
所有这些都有副作用,当您处理具有背景图像和固定填充的完美像素布局时,这些副作用会变得很明显。
有没有什么方法可以简单地禁用折叠,而不必将额外的像素推到布局中?对我来说,必须在视觉上影响文档才能像这样改变行为是没有任何意义的。
5条答案
按热度按时间xiozqbni1#
那么你需要一些东西在中间“打破”崩溃。
我第一个想法是使用一个div,中间设置
display:none
,但这似乎不起作用。所以我试着:
这似乎很好地完成了这项工作(至少在Firefox中,不要在这里安装Internet Explorer来测试它...)
r9f1avp52#
在IE8中,您可以:
使用CSS:
oxcyiej73#
使用Flex或网格布局。
在Flex和网格容器中,没有边距折叠这回事。
更多详细信息请参见规格:
3.弹性容器:
flex
和inline-flex
display
的值Flex容器为其内容建立新的Flex上下文。这与建立块格式上下文相同,只是使用Flex布局而不是块布局。例如,浮动不会侵入Flex容器,Flex容器的边距不会随其内容的边距折叠。
5.1.建立网格容器:
grid
和inline-grid
显示值网格容器为其内容建立新的网格格式上下文。这与建立块格式上下文相同,只是使用网格布局而不是块布局:浮动不会侵入网格容器,并且网格容器的边距不会随其内容的边距折叠。
643ylb084#
Eric Meyer在他的文章Uncollapsing margins中提到了你的确切观点。
他提到1 px填充/边框是一种典型的方法,但是对于添加额外像素没有灵活性的情况,他提供了一个非常简单的解决方案。
它涉及手动覆盖每个元素的边距,所以我不确定它是否适用于您的特定情况。
ojsjcaue5#
据我所知,禁用边距折叠的一个巧妙技巧是将父对象的填充设置为
0.05px
,但它没有视觉效果:填充不再为0,因此不会再发生折叠,但同时填充足够小,在视觉上将向下舍入为0。
如果需要某些其他填充,则仅对不需要边距折叠的“方向”应用填充,例如
padding-top: 0.05px;
。工作示例:
第一次
**编辑:**将值从
0.1
更改为0.05
。从this small test,Firefox似乎考虑了0.1px
填充。尽管0.05px
似乎可以做到这一点。