gpt4 book ai didi

CSS 2.1 规范 : 8. 3.1 折叠边距:无法正确解释特殊情况:寻求澄清

转载 作者:技术小花猫 更新时间:2023-10-29 11:03:30 25 4
gpt4 key购买 nike

Section 8.3.1 of the CSS 2.1 spec关于崩溃的边距状态:

If the top and bottom margins of an element with clearance areadjoining, its margins collapse with the adjoining margins offollowing siblings but that resulting margin does not collapse withthe bottom margin of the parent block.

这是我试图从这个陈述中得到一些东西的尝试,这肯定是不稳定的:

该语句考虑了一个元素 X,其中:

  • X 有间隙,因此“clear: left;”、“clear: right;”中的任一个或“明确:两者;”属性已应用于它。

  • 由于 X 的顶部和底部边距相邻,在正常流程的情况下,我们正在考虑以下情况:

    • X 在上面有一个 parent ,在下面有一个 sibling ,或者
    • X 在上面有一个 sibling ,在下面有一个 sibling ,或者
    • X在上面有一个 sibling ,在下面有一个 parent
  • 然后规范说,“它的边距与相邻的边距一起折叠以下 sibling ”,但最多只能有一个以下 sibling ,如上所述,所以这基本上意味着如果有然后 margin 崩溃。

  • “但由此产生的边距不会与底部边距一起折叠父 block 的。” - 我不明白这一点:如果底部边距与 sibling 的上边距相邻,那么它不能与父 block 的底部边距,除非兄弟 block 的高度为零。

我完全糊涂了。有人可以用更好的方式解释这个陈述吗?也许用一些说明性的例子?

最佳答案

首先,澄清几点:

  • 带间隙的元素是指将 clear 设置为 none 以外的元素 并且实际上是在清除 float 。

  • 顶部和底部边距相邻的元素意味着彼此相邻,而不是与兄弟相邻。我们谈论的是一个没有边框或填充的 0 高度元素,因此元素的上边距和下边距相互接触。发生这种情况时,它们一起坍塌,这种情况称为坍塌

现在,让我们看一个例子:

body {
border:solid;
}
#container {
margin: 20px;
background: blue;
}
#floated {
float: left;
width: 20px;
height: 20px;
background: red;
}
#cleared {
clear: left;
margin-top: 10px;
margin-bottom: 20px;
}
#following {
margin-top: 30px;
}
<body>
<div id=container>
<div id=floated></div>
<div id=cleared></div>
<div id=following></div>
<div>
</body>

在这里玩:http://jsbin.com/wuvilu/1/edit?html,css,output

由于主体上有边框,您可以看到蓝色#container 周围有 20px 的边距。红色的#floated 也是明显的 20px x 20px。

然后,由于它的高度为 0,没有填充也没有边框,#cleared 的顶部和底部边距相互折叠。它们也与#following 的上边距相邻。这个折叠边距的大小是 30px,是三个中最大的。

由于#following 的高度为 0 并且没有填充和边框,因此我们的 30px 边距与#container 的底部边距相邻,并且会与它一起折叠。只是现在您引用的规则生效了,但事实并非如此。

由于它不会与容器的底部边距一起折叠,因此必须将其放置在其中的某个位置。在哪里?它从#floater 底部边缘上方 10px 开始,并延伸到下方 20px。为什么? #cleared 的顶部边距是参与此折叠边距的最顶部边距,因此我们从它开始的地方开始。因为它是 10px,所以我们折叠的边距从 #floater 的底部边缘上方 10px 处开始,即紧邻它之前的元素。

是的,这太疯狂了,大多数涉及折叠的场景都是疯狂的。通过 折叠是一个糟糕的想法,它永远不应该进入 CSS,但它在人们了解之前就已经出现了,现在我们必须处理它,以及所有疯狂的后果。

关于CSS 2.1 规范 : 8. 3.1 折叠边距:无法正确解释特殊情况:寻求澄清,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19754939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com