html - 使容器在包裹时收缩以适合子元素

标签 html css flexbox

我正在尝试弄清楚 flexbox 是如何工作的(应该工作?…)对于如下情况:

.holder {
  width: 500px;
  background: lightgray;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  flex-wrap: nowrap;
}
.v2 {
  width: 320px;
}
.child {
  display: inline-block;
  border: 1px solid black;
  padding: 30px 0px;
  text-align: center;
}
<div class="holder">
  <div class="child">At a glance</div>
  <div class="child">After coverage ends</div>
  <div class="child">Forms &amp; documents</div>
</div>
<br>
<br>
<div class="holder v2">
  <div class="child">At a glance</div>
  <div class="child">After coverage ends</div>
  <div class="child">Forms &amp; documents</div>
</div>
<br>
<br>
<div class="holder v2">
  <div class="child">At a
    <br>glance</div>
  <div class="child">After coverage
    <br>ends</div>
  <div class="child">Forms &amp;
    <br>documents</div>
</div>

JSFiddle here

问题是,当有足够的空间来容纳元素时,我会得到一个漂亮的紧身子元素,它们之间的间距均匀。 (首先,顶部 div block )

然而,当没有足够的空间并且 children 中的文本开始换行时,这一切都朝着一个奇怪的方向发展 - children 不再紧密贴合,即使在换行之后,flex children 周围有足够的空间,因为没有不再适合,space-around 真的没有机会工作了(第二个 div block )

但是,如果我在自动换行符出现的地方添加手动换行符,一切都会按“应该”的方式布置......(底部,第三 block )

我想要的是总是让 children 紧紧地放在他们的盒子里(黑色边框),无论剩下什么空间,都会在他们之间平均分配,而我不必添加手动换行符(这不是一个选项在我的例子中)

这有可能吗?...

最佳答案

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

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

这就是容器不收缩较窄布局的原因。正如右侧的保留空间所证明的那样,它就好像没有任何包裹一样继续前进。

水平空白的最大长度是容器期望的元素的长度。

在下面的演示中,随着窗口水平调整大小,可以看到空格来来去去:DEMO

您需要一个 JavaScript 解决方案(参见 herehere)...或 CSS 媒体查询(参见 here)。

在处理环绕文本时,容器上的 text-align: right 在某些情况下可能会有所帮助。

关于html - 使容器在包裹时收缩以适合子元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56906920/

相关文章:

react-native - React原生边距: 'auto' working on web but not on device

php - PHP 在所有浏览器中都是通用的吗?

html - 具有 100% 宽度且列大小相等的表格

css - 将 CSS 类重新格式化为单个条目

css - 更少的 css 混合参数 A 作为参数 B 的默认值

css - 为什么 Flexbox 不能使用 Flex-Direction 进行响应式设计?

html - flex child 从 parent 那里长大

html - 在不更改表单大小的情况下向表单输入添加填充

php - 如何在新标签页中以固定尺寸播放视频

css - 如何验证 SVG 文件是否损坏