【问题标题】:How to prevent a flex box from growing with content如何防止弹性盒随内容增长
【发布时间】:2016-07-11 00:19:57
【问题描述】:

在下面的代码和 jsfiddle 中,flexbox 的比例随着内容的变化而变化。我觉得我不明白 flexbox 的真正用途。如果我们为我们想要的比例提供flex-grow 属性,为什么框会随着内容而增长?

请注意,当dataDiv 中有新的 span 内容时,内容会破坏比例。当你删除dataDiv里面的span时,你可以观察到它是怎样的预期比例。为什么会出现这种情况?

https://jsfiddle.net/4shaz5oy/

.container {
  display: flex;
  flex-flow: row wrap;
  height: 100vh;
}
.mapBox {
  flex: 2;
  background-color: red;
}
.controlBox {
  flex: 1;
  display: flex;
  flex-direction: column;
  background-color: green;
}
.controlPanel {
  flex: 1;
  max-height: 33%;
  background-color: yellow;
  padding: 5px;
  text-align: center;
}
.dataPanel {
  flex: 2;
  max-height: 66%;
  background-color: blue;
  padding: 5px;
}
<div class="container">
  <div class="mapBox"></div>
  <div class="controlBox">
    <div class="controlPanel">
      <div class="buttonDiv"></div>
      <div class="buttonDiv"></div>
      <div class="buttonDiv"></div>
    </div>
    <div class="dataPanel">
      <div class="dataDiv">
        <span>yoyoyoyasdasdadsadasdasdasdasdasdasdasdadada</span>
      </div>
    </div>
  </div>
</div>

【问题讨论】:

标签: html css flexbox


【解决方案1】:

flex-grow 定义了应如何在弹性项目之间分配剩余空间,而不是项目本身。

对于它们的大小,您使用flex-basis

html, body {
  margin: 0;
}
.container {
    display: flex;
    flex-flow: row wrap;
    height: 100vh;
}

.mapBox {
    flex: 2;
    flex-basis: 66%;
    background-color: red;
}

.controlBox {
    flex: 1;
    flex-basis: 33%;
    display: flex;
    flex-direction:column;
    background-color:green;
}

.controlPanel {
    flex: 1;
    max-height: 33%;
    background-color: yellow;
    padding: 5px;
    text-align: center;
}

.dataPanel {
    flex: 2;
    max-height: 66%;
    background-color: blue;
    padding: 5px;
}
<div class="container">
  <div class="mapBox">

  </div>

  <div class="controlBox">
    <div class="controlPanel">
      <div class="buttonDiv">

      </div>
      <div class="buttonDiv">

      </div>
      <div class="buttonDiv">

      </div>
    </div>

    <div class="dataPanel">
      <div class="dataDiv">
        <span>yoyoyoy as da sd ad sa da sd as da sd as da sd as da sd ad ada</span>
      </div>
    </div>
  </div>
</div>

基于cmets,这里有一个如何保持大小的简化示例

html, body{
  margin: 0;
}
.flex, .left, .right {
  display: flex;
}
.left, .right {
  flex: 1;
  flex-direction: column;
}
.left {
  background: red;
  flex-basis: 66.66%;
}
.right {
  flex-basis: 33.33%;
}
.item1 {
  background: yellow;
  overflow: auto;
  height: 33.33vh;
}
.item2 {
  background: lightblue;
}
<div class="flex">
  <div class="left">
    Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 Bla 0 <br>
    Bla 0<br>
    Bla 0<br>
    Bla 0<br>
    Bla 0<br>

  </div>
  <div class="right">
    <div class="item1">
      Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 Bla 1 <br>
      Bla 1<br>
      Bla 1<br>
      Bla 1<br>
      Bla 1<br>

      Bla 1<br>
      Bla 1<br>
      Bla 1<br>
      Bla 1<br>
      Bla 1<br>

    </div>
    <div class="item2">
      Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 Bla 2 <br>
      Bla 2<br>
      Bla 2<br>
      Bla 2<br>
      Bla 2<br>

      Bla 2<br>
      Bla 2<br>
      Bla 2<br>
      Bla 2<br>
      Bla 2<br>

      Bla 2<br>
      Bla 2<br>
      Bla 2<br>
      Bla 2<br>
      Bla 2<br>

    </div>
  </div>  
</div>

【讨论】:

  • Basis 解决了水平增长的问题,我知道它会。但是最后,当您将内容添加到 dataDiv 时,conrolPanel 和 dataPanel 的高度仍然会发生变化。我想这就是 flex 的用途,没有办法改变它。大概只是我对它的看法。如果我想要固定高度,也许我应该绝对定位而不是控制框的 flex。
  • @OzumSafa flex 有一些缺陷,我用绝对定位的内部 div 解决了很多次,设置为 overflow: auto。这样它就不会垂直增长,而是开始滚动。
  • @OzumSafa 用新的 2:nd 样本更新了我的答案。
  • 也适用于野生动物园。这是一个有趣的解决方案,但有点 hack。我会将其标记为已回答。谢谢。
  • @OzumSafa 谢谢,我刚刚更新了......现在可以跨浏览器工作,不那么hacky :)
【解决方案2】:

看起来一切都按预期进行,问题是yoyoyoyasdasdadsadasdasdasdasdasdasdasdadada 之间没有空间让盒子专注于增长。

如果您设置.dataPanel {word-break: break-all;},您会看到差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 2015-11-18
    • 2015-09-02
    • 1970-01-01
    • 2011-11-02
    相关资源
    最近更新 更多