使div填充flexbox中的剩余*水平*空间


203

我在Flexbox中并排有2个div。右手应始终具有相同的宽度,我希望左手仅抓住剩余空间。除非我专门设置宽度,否则它不会。

因此,现在将其设置为96%,直到您真正按下屏幕为止,它看起来还可以-右手div有点饿了它所需的空间。

我想我可以保留原样,但感觉不对,就像必须要说的那样:

正确的人永远是相同的;你在左边-你得到剩下的一切

.ar-course-nav {
  cursor: pointer;
  padding: 8px 12px 8px 12px;
  border-radius: 8px;
}
.ar-course-nav:hover {
  background-color: rgba(0, 0, 0, 0.1);
}
<br/>
<br/>
<div class="ar-course-nav" style="display:flex; justify-content:space-between;">
  <div style="width:96%;">
    <div style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">
      <strong title="Course Name Which is Really Quite Long And Does Go On a Bit But Then When You Think it's Stopped it Keeps on Going for even longer!">
                Course Name Which is Really Quite Long And Does Go On a Bit But Then When You Think it's Stopped it Keeps on Going for even longer!
            </strong>
    </div>
    <div style="width:100%; display:flex; justify-content:space-between;">
      <div style="color:#555555; margin-right:8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;" title="A really really really really really really really really really really really long department name">
        A really really really really really really really really really really really long department name
      </div>
      <div style="color:#555555; text-align:right; white-space:nowrap;">
        Created: 21 September 2016
      </div>
    </div>
  </div>
  <div style="margin-left:8px;">
    <strong>&gt;</strong>
  </div>
</div>

Answers:


324

使用该flex-grow属性可以使弹性项目消耗主轴上的可用空间。

此属性将尽可能扩展项目,调整长度以适应动态环境,例如调整屏幕大小或添加/删除其他项目。

一个常见的示例是flex-grow: 1或使用缩写属性flex: 1

因此,请使用而不是width: 96%div flex: 1


你写了:

因此,现在将其设置为96%,直到您真正按下屏幕为止,它看起来还可以-右手div有点饿了它所需的空间。

固定宽度div的压缩与另一个flex属性有关: flex-shrink

默认情况下,flex项目设置为flex-shrink: 1使它们能够收缩以防止容器溢出。

要禁用此功能,请使用flex-shrink: 0

有关更多详细信息,请参见答案中flex-shrink因子部分:


在此处了解有关沿主轴对齐的更多信息:

在此处了解有关沿十字轴对齐的更多信息:


1
我有相同的情况,使用flex-grow: 1效果不如flex: 1。您是否知道为什么会有所不同?(我解决了后者的问题,谢谢)
WhGandalf

4
使用flex-grow: 1,该flex-basis属性将保留auto为其默认值。使用flex: 1,该flex-basis属性更改为0。请在此处查看我的答案以进行深入审查:stackoverflow.com/q/43520932/3597276 @WhGandalf
Michael Benjamin

flex-shrink是我的关键:)
pixelearth '19

25

基本上,我试图使我的代码在“行”上有一个中间部分,以自动调整到两侧的内容(在我的情况下是虚线分隔符)。就像@Michael_B建议的那样,键是display:flex在行容器上使用,并且至少确保行上的中间容器的flex-grow值比外部容器至少高1(如果外部容器未flex-grow应用任何属性,则中间容器只需1 flex-grow)。

这是我正在尝试做的图片,以及如何解决该问题的示例代码。

编辑:根据浏览器的显示方式,虚线底部边框可能看起来很怪异。我个人建议使用黑色圆圈SVG作为重复的背景图像,并适当调整大小并将其放置在中间容器的底部。我有时间时将添加此替代解决方案。

在此处输入图片说明

.row {
  background: lightgray;
  height: 30px;
  width: 100%;
  display: flex;
  align-items:flex-end;
  margin-top:5px;
}
.left {
  background:lightblue;
}
.separator{
  flex-grow:1;
  border-bottom:dotted 2px black;
}
.right {
  background:coral;
}
<div class="row">
  <div class="left">Left</div>
  <div class="separator"></div>
  <div class="right">Right With Text</div>
</div>
<div class="row">
  <div class="left">Left With More Text</div>
  <div class="separator"></div>
  <div class="right">Right</div>
</div>
<div class="row">
  <div class="left">Left With Text</div>
  <div class="separator"></div>
  <div class="right">Right With More Text</div>
</div>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.