CSS flexbox 包装未调整大小以适应内容[重复]

2024-03-31

一个简化的 plunkr 来显示问题:https://plnkr.co/edit/mHTHLEumQ04tInFVAz3z?p=preview https://plnkr.co/edit/mHTHLEumQ04tInFVAz3z?p=preview

如果调整右视口的大小直到两个容器不再适合同一行,则右视口将移动到新行。

但是,父级 inline-flex 容器宽度不会改变,从而将顶部的“标题”元素关闭 - “标题”中的“按钮”应与下面容器中的最后一个项目右对齐。

两个(或多个)项目具有固定宽度,但它们之间没有空间。这些是唯一具有固定宽度或高度的元素。

当项目换行到新行时,如何强制 Flex 容器宽度适应/收缩(不使用 js,纯 HTML/CSS)?

.main-flex {
  display: -webkit-inline-flex;
  display: inline-flex;
  -webkit-flex-direction: column;
  flex-direction: column;
}

.flex-container {
  flex-grow: 1;
  display: -webkit-inline-flex;
  display: inline-flex;
  -webkit-flex-direction: row;
  flex-direction: row;
  flex-wrap: wrap;
}
<div style="margin-top: 100px;" class="main-flex">
  <div>
    <span>header</span>
    <span style="float:right">button</span>
  </div>
  <div class="flex-container">
    <div style="height: 400px; width:250px; border: 1px solid black;"></div>
    <div style="height: 400px; width:250px; border: 1px solid black;"></div>
  </div>
</div>

在 CSS 中,父容器不知道其子容器何时换行。因此,它继续扩大其规模,而忽略了内部发生的情况。

换句话说,浏览器在初始级联上呈现容器。当子级换行时,它不会重排文档。

这就是为什么容器不会收缩包装较窄的布局。它只是继续下去,就好像没有任何东西被包裹一样,正如右侧的保留空间所证明的那样。

更多详细信息请参见此处:使容器在包裹子元素时收缩以适合它们 https://stackoverflow.com/q/37406353/3597276


但您不需要缩小容器即可使布局正常工作。只需对 HTML 和 CSS 进行一些调整即可构建它。

.main-flex {
  display: inline-flex;
  flex-wrap: wrap;
}

.flex-container {
  display: flex;
  flex-direction: column;
}

.flex-container>div {
  height: 400px;
  width: 250px;
  border: 1px solid black;
}

.flex-container:nth-child(2)>span {
  align-self: flex-end;
}
<div class="main-flex">
  <div class="flex-container">
    <span>header</span>
    <div></div>
  </div>
  <div class="flex-container">
    <span>button</span>
    <div></div>
  </div>
</div>

修改后的演示 https://plnkr.co/edit/iRRoh4UoLYMM4MXqWqok?p=preview

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS flexbox 包装未调整大小以适应内容[重复] 的相关文章

随机推荐