如何使 flexbox 孩子的高度适合内容而不是其容器的 100% 高度

新手上路,请多包涵
 #container {
  display:flex;
  height:300px;
  background:#333;
}
#child1 {
  width:30%;
  background:#3cf;
}
#child2 {
  width:30%;
  background:#3fc;
}
#child3 {
  width:40%;
  background:#cf3;
}
#child1_child {
  width:100%;
  background:#fc3;
}
pre {
  margin:0px;
}
     <div id="container">
    <div id="child1"><div id="child1_child"><pre>CONTENT<BR>CONTENT<BR>CONTENT<BR>CONTENT</pre></div></div>
    <div id="child2"></div>
    <div id="child3"></div>
    </div>

#child1 的高度自动设置为 #container 的相同高度,我怎样才能使它适合 #child1_child 而不是 #container 的 100% 高度 --- ?

#child1_child 的高度不是静态的,可以通过里面的内容来改变, #child1 的高度没有用静态值。

原文由 Fei Sun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 421
2 个回答

fit-content 支持有限; IE 永远不会支持它,Firefox 仍然需要前缀。此解决方案具有仅用于演示目的的 jQuery,并且不是该解决方案所必需的。有四种选择:

  1. NONE: 没有额外的样式在 .A
  2. FIT-CONTENT:fit-content .A
  3. MAX-CONTENT: 在 上添加 CSS 属性 max-content .A
  4. 表:display:table .A

选项 2 和 3 的行为相同,因此总而言之,最简单的解决方案是应用 display:table 并且它非常简单,非常兼容。 height: fit-contentmax-content 几乎与一个小警告兼容,即 IE 不支持它(IE 正在走恐龙的道路,所以这几乎不是问题)。


演示

 $('.rad').on('change', switchStyle);

function switchStyle(e) {
  var pick = $(this).val();
  switch (pick) {
    case 'nil':
      $('.A').removeClass('fit max tab');
      break;
    case 'fit':
      $('.A').addClass('fit').removeClass('max tab');
      break;
    case 'max':
      $('.A').addClass('max').removeClass('fit tab');
      break;
    case 'tab':
      $('.A').addClass('tab').removeClass('fit max');
      break;
    default:
      break;
  }
}
 .box {
  display: flex;
  height: 300px;
  background: #333;
}
.A {
  width: 30%;
  background: #3cf;
}
.B {
  width: 30%;
  background: #3fc;
}
.C {
  width: 40%;
  background: #cf3;
}
.A1 {
  width: 100%;
  background: #fc3;
}
pre {
  margin: 0px;
}
.set {
  position: relative;
  z-index: 1;
  bottom: 300px;
  left: 30%;
  width: 30ch;
  font: 400 16px/1.428 Verdana;
}
.A.fit {
  height: -moz-fit-content;
  height: -webkit-fit-content;
  height: -fit-content;
}
.A.max {
  height: max-content;
}
.A.tab {
  display: table;
}
 <div class="box">
  <div class="A">
    <div class="A1"><pre>
    CONTENT
    CONTENT
    CONTENT
    CONTENT</pre>
    </div>
  </div>
  <div class="B"></div>
  <div class="C"></div>
</div>

<fieldset class='set'>
  <label>NONE
    <input class='rad' name='rad' type='radio' value='nil' checked>
  </label>
  <label>FIT-CONTENT
    <input class='rad' name='rad' type='radio' value='fit'>
  </label><br>
  <label>MAX-CONTENT
    <input class='rad' name='rad' type='radio' value='max'>
  </label>
  <label>TABLE
    <input class='rad' name='rad' type='radio' value='tab'>
  </label>
</fieldset>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

原文由 zer00ne 发布,翻译遵循 CC BY-SA 4.0 许可协议

尝试设置 min-heightmin-width …魔术。

 #container {
  display: flex;
  height: 100%;
  min-height: 0;
}

默认情况下,弹性项目不会缩小到其最小内容大小(最长单词或固定大小元素的长度)以下。要更改此设置,请设置 min-width 或 min-height 属性。 (参见 §4.5 弹性项目的自动最小尺寸。) https://www.w3.org/TR/css-flexbox-1/#propdef-flex

原文由 Austen Stone 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题