折叠宽度高度和边距对于块级元素意味着啥?

Posted

技术标签:

【中文标题】折叠宽度高度和边距对于块级元素意味着啥?【英文标题】:What does collapsing width height and margin mean for block level elements?折叠宽度高度和边距对于块级元素意味着什么? 【发布时间】:2018-01-24 01:46:13 【问题描述】:

块级元素的宽度不能折叠但高度可以折叠是什么意思?

您能否解释一下W3.org规范中的这段文字:

在 CSS 中,两个或多个框(可能是兄弟,也可能不是兄弟)的相邻边距可以组合成一个边距。以这种方式组合的边距称为折叠边距,由此产生的组合边距称为折叠边距。

collapse 这个词的含义在这里引起了很多混乱。

【问题讨论】:

请参考您在上面获得这些 qoutes 的链接 【参考方案1】:

collapsed margin 是当两个不同元素的边距占据相同空间时赋予实例的名称。

考虑以下示例:

.box 
  height: 50px;
  width: 50px;


.box1 
  background: red;
  margin-bottom: 25px;


.box2 
  background: blue;
  margin-top: 50px;
<div class="box box1"></div>
<div class="box box2"></div>

很难说,但两个框之间的空格只有50px。您可能认为它应该75px,因为我在顶框上指定了margin-bottom25px,并在底框上指定了margin-top50px25 + 50 = 75,那为什么空白只有50px?

好吧,边距中不能有任何内容;边距专门表示缺少内容。考虑到没有内容可以显示在边距中,解析器认为不妨将它们组合起来以优化空间。

collapsed”这个词的出现是因为从技术上讲,有两个不同的边距“段”同时存在于同一个地方,彼此“折叠”。

请注意,margin-leftmargin-right 不会发生这种情况

.box 
  height: 50px;
  width: 50px;
  float: left;


.box1 
  background: red;
  margin-right: 25px;


.box2 
  background: blue;
  margin-left: 50px;
<div class="box box1"></div>
<div class="box box2"></div>

上面的空格确实是75px。这可能是一个让您难以理解的概念,但重要的是要注意它只影响垂直边距。有关折叠边距的更多信息,请访问 CSS TricksMozilla

还需要注意的是,默认情况下,块级元素占据其父级宽度100%,但0% 高度

这里有一个例子来说明这一点:

.parent 
  background: blue;
  border: 10px solid purple;
  height: 50px;
  width: 200px;


.child 
  background: red;
<div class="parent">
  <div class="child">Text</div>
</div>

在上面的示例中,我在父级上同时指定了widthheight,尽管我没有在子级上指定任何一个。如您所见,子元素继承了200px 的宽度,但 继承了50px 的高度。

希望这有助于澄清这一点!

【讨论】:

感谢您的解释。能否请您详细说明相邻的保证金案例。 哦等等!一开始我完全误解了这一点。我很抱歉;我现在将更新我的答案以更正此问题 =] 我现在已经大幅修改了我的答案以更好地涵盖这个=] 非常感谢,它拯救了我的一天。

以上是关于折叠宽度高度和边距对于块级元素意味着啥?的主要内容,如果未能解决你的问题,请参考以下文章

CSS内联元素可以设置宽度和高度?请解释下内联元素和块级元素的区别吧!!

h5行/块级标签的区别和注意

关于行类元素与块级元素的一些搜集整理

什么是块级元素和内联级元素

具有填充和边距以及 100% 宽度的 HTML CSS 框? [复制]

HTML面试题