css 如何取消收合边界?[duplicate]

lb3vh1jj  于 2022-11-19  发布在  其他
关注(0)|答案(5)|浏览(154)

此问题在此处已有答案

How to disable margin-collapsing?(12个答案)
三年前就关门了。
在CSS中折叠边距:http://www.w3.org/TR/CSS21/box.html#collapsing-margins
我理解purpose of the feature,但我正在尝试布局,我不知道如何关闭它。
CSS教程中通常解释的方法是:
1.添加边框
1.添加填充
所有这些都有副作用,当您处理具有背景图像和固定填充的完美像素布局时,这些副作用会变得很明显。
有没有什么方法可以简单地禁用折叠,而不必将额外的像素推到布局中?对我来说,必须在视觉上影响文档才能像这样改变行为是没有任何意义的。

xiozqbni

xiozqbni1#

那么你需要一些东西在中间“打破”崩溃。
我第一个想法是使用一个div,中间设置display:none,但这似乎不起作用。
所以我试着:

<div style="overflow: hidden; height: 0px; width: 0px;">.</div>

这似乎很好地完成了这项工作(至少在Firefox中,不要在这里安装Internet Explorer来测试它...)

<html>
    <body>
        <div style="margin: 100px;">.</div>
        <div style="overflow: hidden; height: 0px; width: 0px;">.</div>
        <div style="margin: 100px;">.</div>
    </body>
</html>
r9f1avp5

r9f1avp52#

在IE8中,您可以:

<div class="uncollapse-margins">
    <p>Lorem ipsum dolor sit amet.</p>
</div>
<div class="uncollapse-margins">
    <p>Lorem ipsum dolor sit amet.</p>
</div>

使用CSS:

.uncollapse-margins:before,
.uncollapse-margins:after
{
    content: "\00a0"; /* No-break space character */
    display: block;
    overflow: hidden;
    height: 0;
}
oxcyiej7

oxcyiej73#

使用Flex或网格布局。
在Flex和网格容器中,没有边距折叠这回事。
更多详细信息请参见规格:

3.弹性容器:flexinline-flexdisplay的值

Flex容器为其内容建立新的Flex上下文。这与建立块格式上下文相同,只是使用Flex布局而不是块布局。例如,浮动不会侵入Flex容器,Flex容器的边距不会随其内容的边距折叠。

5.1.建立网格容器:gridinline-grid显示值

网格容器为其内容建立新的网格格式上下文。这与建立块格式上下文相同,只是使用网格布局而不是块布局:浮动不会侵入网格容器,并且网格容器的边距不会随其内容的边距折叠。

643ylb08

643ylb084#

Eric Meyer在他的文章Uncollapsing margins中提到了你的确切观点。
他提到1 px填充/边框是一种典型的方法,但是对于添加额外像素没有灵活性的情况,他提供了一个非常简单的解决方案。
它涉及手动覆盖每个元素的边距,所以我不确定它是否适用于您的特定情况。

ojsjcaue

ojsjcaue5#

据我所知,禁用边距折叠的一个巧妙技巧是将父对象的填充设置为0.05px,但它没有视觉效果:

.parentClass {
    padding: 0.05px;
}

填充不再为0,因此不会再发生折叠,但同时填充足够小,在视觉上将向下舍入为0。
如果需要某些其他填充,则仅对不需要边距折叠的“方向”应用填充,例如padding-top: 0.05px;

工作示例:

第一次

**编辑:**将值从0.1更改为0.05。从this small test,Firefox似乎考虑了0.1px填充。尽管0.05px似乎可以做到这一点。

相关问题