块格式化上下文是由带边框的元素创建的吗?

问题描述 投票:0回答:3

W3CMDN我知道块格式化上下文是由以下之一创建的:

  • 根元素或包含它的元素
  • 浮动(浮动不为无的元素)
  • 绝对定位元素(位置为绝对或固定的元素)
  • 内联块(带有
    display: inline-block
    的元素)
  • 表格单元格(带有
    display: table-cell
    的元素,这是 HTML 表格单元格的默认值)
  • 表格标题(带有
    display: table-caption
    的元素,这是 HTML 表格标题的默认设置)
  • 溢出的值不是
    visible
  • 的元素
  • 弹性框(带有
    display: flex
    inline-flex
    的元素)

但是我对以下代码有疑问:

<div style='background:grey;border:black 1px dotted;width:400px'>
    <div style='margin:20px;background:red;'>the parent create a bfc</div>
</div>
<div style='background:grey;width:400px'>
    <div style='margin:20px;background:red;'>why?</div>
</div>

第一个 div 元素创建了一个 BFC,但它们之间唯一的区别是第一个 div 有边框。为什么?

html css border
3个回答
2
投票

两个

div
元素都没有创建自己的 BFC。您的代码中绝对没有任何内容表明第一个
div
元素正在创建自己的 BFC — 仅具有边框不会导致元素建立自己的 BFC。

边界所做的就是阻止边缘崩溃。这意味着子元素的边距不会与父元素的边距合并;它们被限制在父元素框中。


1
投票

我完全同意@BoltClock

边界所做的就是阻止边缘崩溃。这意味着子元素的边距不会与父元素的边距合并;它们被限制在父元素框中。

但是如果你想按照你想要的方式解决这个问题,我在这里给你解决方案。只需将

overflow: hidden;
添加到第二个 div 即可,这样不会折叠边距。

<div style='background:grey;border:black 1px dotted;width:400px'>
    <div style='margin:20px;background:red;'>the parent create a bfc</div>
</div>
<div style='background:grey;width:400px; overflow: hidden;'>
    <div style='margin:20px;background:red;'>why?</div>
</div>

0
投票

我认为你被MDN误导了。

根据接受的答案,这是不正确的。我也这么认为,因为它与BFC

的定义冲突

© www.soinside.com 2019 - 2024. All rights reserved.