微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么内联块容器在仅包含浮动项目时不会折叠?

如何解决为什么内联块容器在仅包含浮动项目时不会折叠?

在此布局中,我将 3 个框排成一行,将 float: left; 应用于每个框。 这些盒子在另外 2 个容器内。通常,这些容器会崩溃,因为当内容仅由浮动项目构成时会发生这种情况。 不过,将 2 个容器的 display 属性更改为 inline-block 可避免折叠。

这是为什么?

另外:我很清楚我们不应该使用 float 将元素放在一行中,现代正确的方法是使用 flexBoxgrid,但是我偶然发现了这个,很想知道为什么

.container {
  background: tomato;
  display: inline-block;
  text-align: center;
  width: 100%;
}

ul {
  background: yellow;
  display: inline-block;
  list-style-type: none;
  padding: 1.5rem;
}

.Box {
  border: 3px solid black;
  float: left;
  height: 100px;
  width: 100px;
}

.Box-1 {
  background: aquamarine; 
}
.Box-2 {
  background: yellowgreen; 
}

.Box-3 {
  background: pink; 
}
<div class="container">
  <ul>
  <li class="Box Box-1"></li> 
  <li class="Box Box-2"></li> 
  <li class="Box Box-3"></li> 
  </ul>
</div>

解决方法

因为 inline-block 生成块格式上下文

浮动、绝对定位元素、不是块框的块容器(例如inline-blocks、表格单元格和表格标题),以及带有“溢出”而不是 ' 的块框可见”(除非该值已传播到视口)为其内容建立新的块格式上下文ref

你可以在the MDN中阅读:

格式化上下文会影响布局,但通常情况下,我们会为定位和清除浮动创建一个新的块格式化上下文,而不是更改布局,因为建立新块格式化上下文的元素将:

  • 包含内部浮动。
  • 排除外部浮动。
  • 抑制边距折叠。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。