【发布时间】:2019-08-26 16:42:27
【问题描述】:
问题 1: 有没有办法让一个元素自动填充两个边缘折叠的兄弟之间的空间,而不增加两者之间的空间?
问题 2:如果没有,有没有办法知道当边距折叠时两个元素之间的实际(边距折叠后)空间?
背景:我有一个包含垂直项目列表的页面。这些项目具有不同的垂直间距(即边距),具体取决于它们的内容——即图像项目的顶部和底部边距为100px,文本项目的垂直边距为50px。为了有良好的垂直节奏,故意使用了margin collapsing。
现在,我需要“填充”元素,每个元素占据每个项目之间的所有垂直空间。例如,在图像项和文本项之间,“填充”需要为100px 高才能填充两个项之间的边距折叠空间。这是一个示例,粉色填充物填充了所有空间:
问题:项目列表是动态的,所以我不知道项目之间会有多少空间。因为边距塌陷,我无法提前知道填充元素的高度。我希望避免必须根据项目组合的每个排列来拼出填充高度,每个组合都有自己的两种项目类型之间的间距值。
我不能让填充元素影响两个元素之间的空间(所以它是position: absolute)。因为它是position: absolute,所以我看不到将它锚定到它上面和下面的项目的方法(仅限于其中一个)。
这里是手动设置填充器高度以填充空间的示例:https://jsfiddle.net/41pgv63s/
有没有其他方法可以填充两个边缘折叠的元素之间的空间,而不增加它们之间的空间?我不想手动查看上一个/下一个项目并据此计算填充物的高度。我希望有一种纯 CSS 的方式来填充两个项目之间的空间,因此在设置填充项目的高度之前,我不需要知道列表中每个相邻项目之间的上下文。
【问题讨论】:
-
@ObsidianAge 据我了解,OP 不想禁用折叠功能。
-
你的意思是;例如,您在
<p>标记中有一个<img/>,并且您的图像标记和文本混合在一起,您想填充<p>标记和<img/>中的文本之间的空间? -
@ObsidianAge 我不想禁用边距折叠。
-
@pegasusspect 图像和段落位于不同的容器中,因此它们不会混合。