代码之家  ›  专栏  ›  技术社区  ›  Mr_Green

通过处理子容器的动态添加,使用Flexbox以相同的空间垂直拉伸多个子容器

  •  1
  • Mr_Green  · 技术社区  · 7 年前

    我有一个父容器 display: flex 和 flex-direction: row . 儿童容器水平伸展良好。问题是子容器可以动态增加,并且它们都需要完美地包含在父容器中,如下图所示:

    enter image description here

    第二种情况

    enter image description here

    在上面的两张图片中,我通过手动将所有子容器的高度设置为 50% 33.33% 分别( 当子容器动态增加时 ). 而不是这样做,我希望flexbox来处理它,并希望这是可能的。

    Codepen ( 移除最后三个子容器并设置 .child 50% 检查第一个病例 )

    1 回复  |  直到 7 年前
        1
  •  0
  •   Temani Afif    7 年前

    检查下面的例子,我把第一个和第二个案例:

    .parent {
      display: flex;
      background-color: yellow;
      height: 400px;
      align-items: stretch;
      flex-wrap: wrap;
      padding: 20px;
    }
    
    .child{
     /* height: 33.33%;*/
    }
    
    .one{
      background-color: red;
      width: 33.33%;
    }
    
    .two{
      background-color: green;
      width: 33.33%;
    }
    
    .three{
      background-color: blue;
      width: 33.33%;
    }
    
    .four{
      background-color: cornflowerblue;
      width: 50%;
      position:relative;
    }
    
    .five{
      background-color: orange;
      width: 50%;
    }
    
    .four-wrapper{
      position:absolute;
      top:0;
      left:0;
      bottom:0;
      right:0;
      overflow: auto;
      display: flex;
      max-height: 100%;
    }
    <div class="parent">
      <div class="child one">
      </div>
      <div class="child two">
      </div>
      <div class="child three">
      </div>
      <div class="child four">
        <div class="four-wrapper">
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          
        </div>
      </div>
      <div class="child five"></div>
    
    <div class="child one">
      </div>
      <div class="child two">
      </div>
      <div class="child three">
      </div>
    </div>
    
    <div class="parent">
      <div class="child one">
      </div>
      <div class="child two">
      </div>
      <div class="child three">
      </div>
      <div class="child four">
        <div class="four-wrapper">
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          
        </div>
      </div>
      <div class="child five"></div>
    
    </div>

    要使其通用,可以使流中的所有内容都包含在所有元素中:

    .parent {
      display: flex;
      background-color: yellow;
      height: 400px;
      align-items: stretch;
      flex-wrap: wrap;
      padding: 20px;
    }
    
    .child{
     /* height: 33.33%;*/
     position:relative;
    }
    .child>* {
      position:absolute;
      top:0;
      left:0;
      right:0;
      bottom:0;
      overflow:auto;
    }
    
    .one{
      background-color: red;
      width: 33.33%;
    }
    
    .two{
      background-color: green;
      width: 33.33%;
    }
    
    .three{
      background-color: blue;
      width: 33.33%;
    }
    
    .four{
      background-color: cornflowerblue;
      width: 50%;
    }
    
    .five{
      background-color: orange;
      width: 50%;
    }
    
    .four-wrapper{
      display: flex;
      max-height: 100%;
    }
    <div class="parent">
      <div class="child one">
      </div>
      <div class="child two">
        <div>
             a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
        </div>
      </div>
      <div class="child three">
      <div>
          b<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb<br>b<br>bbb
      </div>
      </div>
      <div class="child four">
        <div class="four-wrapper">
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          a
          <br>
          a a
          <br>
          a a
          
        </div>
      </div>
      <div class="child five"></div>
    
    <div class="child one">
      </div>
      <div class="child two">
      </div>
      <div class="child three">
      </div>
    </div>