无法理解"CSS The Definitive Guide 3rd Edition"中的一段

mer*_*lin 3 css

在"CSS The Definitive Guide 3rd edition",第166页中,有一段描述了关于水平边距的行为:

请注意,由于水平边距不会折叠,因此父元素的填充,边框和边距会影响其子元素.效果是间接的,因为元素的边距(等等)可以导致子元素的偏移.

我也无法理解本书为此行为提供的示例:

http://jsfiddle.net/PjTA3/

HTML:

<div>
    <p>A paragraph</p>
    <p>Another paragraph</p>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

div {padding: 30px; background: silver;}
p {margin: 20px; padding: 20px; background: white;}
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释一下吗?非常感谢.

Bar*_*ney 6

我创建了一个小提琴,提供了正在讨论的代码的实例.如果您使用的是Chrome或类似的现代浏览器,则可以右键单击示例中的段落,然后选择"检查元素"以查看填充和边距的交互方式.

我同意,该段是可怕的.它首先说明"水平边距不会崩溃",然后提供一个示例,其中没有相邻的水平边距来演示断言.这个例子的确具备相邻的垂直虽然利润率(第一段的底部边缘,以及第二段落的上边距),我们可以看到,这些崩溃(它们占据相同的空间:检查一个元素,然后对方看到这一点).

然而,这与示例中演示的非堆叠偏移无关,即段落的非相邻边距从包含div 的填充边缘偏移它们- 因此为什么第一段的顶部,左边,右边缘50px来自div的外边缘(20px边距来自<p>+ 30px填充<div>).

我认为这个例子的准确标题最好写成

通常,边距,填充和边框不会崩溃 - 除了块级元素的垂直边距(在规范中定义了例外).内联元素的定位不受垂直尺寸的影响.

编辑:

修正了替代标题中的轻微不准确性:例外情况以及原始段落"水平边距不崩溃"的断言仍未得到证实:我在这里创建了一个类似的小提示来证明这一点.

在第二个例子中,我们用s 替换了内联<span>元素<p>,这允许我们看到水平地相互自然流动的元素:与第一个例子不同 - 第二个段落的上边距折叠成第一个段落的下边距 - 第二个段落的左边距不会折叠到第一个右边距,而是立即开始 - 将它们40px分开.

顺便提一下,这也表明内联元素的垂直填充,边框和边距确实崩溃:这些跨度的顶部和底部填充和边距不会影响它们与容器的偏移.

  • 刚刚意识到我遗漏了可怕段落的第一个断言的演示,并且在我修改的标题中也出现了技术上的不准确 - 请参阅编辑后的帖子. (2认同)