在容器包装时使容器缩小到适合的子元素

Mik*_*nko 23 html css css3 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;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

JSFiddle在这里

问题是,当有足够的空间来容纳元素时,我会得到一个很好的紧身儿童,两者之间的距离均匀.(首先,顶部div块)

然而,当没有足够的空间和儿童内部的文字开始包装时,这一切都在一个奇怪的方向 - 儿童不再紧密贴合,即使在包装后,柔性儿童周围有足够的空间,因为不再适合,空间也没有机会工作(第二个div块)

但是,如果我在自动换行发生的地方添加手动换行符,那么所有内容都会按"应该"排列...(底部,第三个块)

我想要的是始终将孩子紧紧地装在他们的盒子里(黑色边框),无论剩下什么空间,都会在它们之间均匀分布,而不必添加手动换行符(在我的情况下不是一个选项) )

有可能吗?...

Mic*_*l_B 19

在CSS中,父容器不知道其子项何时换行.因此,它继续扩大其规模,无视内部正在发生的事情.

换句话说,浏览器在初始级联上呈现容器.当孩子包裹时,它不会回流文件.

这就是为什么容器不收缩包装较窄的布局.它只是继续,似乎没有任何包裹,正如右边的保留空间所证明的那样.

水平空白区域的最大长度是容器期望在那里的元素的长度.

在下面的演示中,当窗口水平重新调整大小时,可以看到空白进出:DEMO

您需要一个JavaScript解决方案(请参阅此处此处)...或CSS媒体查询(请参阅此处).

在处理包装文本时,text-align: right在某些情况下,容器可能会有所帮助.

  • 容器不知道其内容在宽度方面的换行,但在高度方面却知道它是如何发生的?(容器确实会相应地改变其高度以适应其包装的内容) (4认同)
  • 为什么说“父容器不知道它的子容器何时换行”?为什么它不知道?如果这是规范,那就有意义了。但并不是说“它不知道”。浏览器开发人员可以获取子项的内容宽度并相应地调整其容器宽度。 (2认同)

Ren*_*nde 6

好好看看我改变的小提琴

  • .holder widthmax-width(在.v课堂上)
  • 修改.holderwrapspace-around它的孩子
  • .v为清晰起见,增加了 2 个类
  • 删除了 <br>'s
  • 并且,最重要的是,添加flex: 0 0.child

Flexbox 几乎总是需要max-width设置,比width. 根据您需要.children 的行为方式,修改flex-growflex-shrinkinflex: 0 0以满足您的需要。(结果flex: 1 0看起来也不错)

...不需要Javascript...

UPDATECodrops Flexbox的参考真的帮了我很多理解FBL ...

  • 请问“FBL”是什么意思?缩写使事情比现在更令人困惑。我怀疑 Flex 是 F,Box 是 B,但我无法弄清楚其余的.. (5认同)
  • 对于任何想知道的人来说,`flex: 0 0;`没有达到OP的要求;即使有足够的空间,它也会强制 Flex 子项将文本换行。比较两个小提琴中的顶部 Flex 父级,其中有足够的水平空间,但每个元素的文本仍然换行。 (5认同)