【问题标题】:Keep height of children div constant保持儿童 div 的高度不变
【发布时间】:2017-02-02 20:57:57
【问题描述】:

我希望保持两个子 div 的高度 abcdef 不变,并且每个 div 的高度都是其父级 xyz 的一半。我可以在 CSS 中使用 flex 来做到这一点,但是在每个子 div abcdef 中,我都有动态添加行的表。这会导致 div abcdef 扩展以容纳行。

当添加太多行时,我希望它们中的每一个都可以滚动。

我尝试了很多解决方案,但似乎都没有。

这是我的代码:

#xyz {
  flex: 1 1 auto;
  display: flex;
  flex-flow: column;
}
#abc {
  width: 100%;
  flex: 1;
}
#def {
  width: 100%;
  flex: 1;
}
<div id="xyz" class="row">
  <div id="abc" class="col-border-bottom container-fluid">
    <h2>ABC details</h2>
    <table id="abc-table"></table>
  </div>
  <div id="def" class="container-fluid">
    <h2>DEF details</h2>
    <table id="def-table"></table>
  </div>
</div>

提前致谢。

【问题讨论】:

  • 也许使用最大高度?
  • 对,如果我理解正确,您希望 #abc 和 #def 保持 constant 高度,因此您必须定义 #xyz 的高度/最大高度或 # abc, #def height's / max-height's,否则它真的没有任何意义,因为您将无法在表格中看到任何清晰的行,因为 #abc 和 #def 太小了!
  • 你真正想要实现什么?
  • 是的,我想要的和你描述的完全一样。我现在根据视口定义了高度。它有效:)

标签: javascript html css flexbox


【解决方案1】:

给子 div 'overflow:scroll' 和 'height:[something]'。

【讨论】:

    【解决方案2】:

    如果您使用flexbox 来获取溢出,则应将 flexbox 子项的内容包装到 absolutely 定位的容器中,以便它可以在溢出时滚动。

    以下是我在您的代码中所做更改的摘要:

    1. 为了演示溢出,为xyz 容器设置一个特定的高度。您可以根据需要更改此高度。

    2. position: relativeoverflow-y: auto 添加到 flexbox 子组件 - abcdef

    3. abcdef 的内容包装到一个绝对定位的框中:

      .flex-inner {
        position: absolute;
        height: 100%;
        width: 100%;
        top: 0;
        left: 0;
      }
      
    4. 在框中添加了一些边框和表格以进行说明。

    * {
      box-sizing: border-box;
    }
    #xyz {
      flex: 1 1 auto;
      display: flex;
      flex-flow: column;
      height: 250px;
      border: 1px solid;
    }
    #abc {
      width: 100%;
      flex: 1;
      border: 1px solid;
      position: relative;
      overflow-y: auto;
    }
    #def {
      width: 100%;
      flex: 1;
      border: 1px solid;
      position: relative;
      overflow-y: auto;
    }
    .flex-inner {
      position: absolute;
      height: 100%;
      width: 100%;
      top: 0;
      left: 0;
    }
    table {
      border-collapse: collapse;
      width: 100%;
    }
    table td {
      border: 1px solid red;
    }
    <div id="xyz" class="row">
      <div id="abc" class="col-border-bottom container-fluid">
        <div class="flex-inner">
          <h2>ABC details</h2>
          <table id="abc-table">
            <tr>
              <td colspan="2">Title</td>
            </tr>
            <tr>
              <td>row</td>
              <td>row</td>
            </tr>
            <tr>
              <td>row</td>
              <td>row</td>
            </tr>
            <tr>
              <td>row</td>
              <td>row</td>
            </tr>
            <tr>
              <td>row</td>
              <td>row</td>
            </tr>
          </table>
        </div>
      </div>
      <div id="def" class="container-fluid">
        <div class="flex-inner">
          <h2>DEF details</h2>
          <table id="def-table">
            <tr>
              <td colspan="2">Title</td>
            </tr>
            <tr>
              <td>row</td>
              <td>row</td>
            </tr>
            <tr>
              <td>row</td>
              <td>row</td>
            </tr>
            <tr>
              <td>row</td>
              <td>row</td>
            </tr>
            <tr>
              <td>row</td>
              <td>row</td>
            </tr>
          </table>
        </div>
      </div>
    </div>

    【讨论】:

    • 但是在这种情况下,您要向#xyz 声明一个静态高度,这可能是不可取的,尽管不声明没有任何意义!
    • 如果你愿意,它可以是动态的——甚至是视口的高度...... OP 希望孩子们的高度是 xyz 的一半 :)
    • 对不起,我没有明确表示,不是关于在#xyz 上具有静态高度是关于定义高度!例如,OP 可能希望 #xyz 的高度是最高孩子的两倍,并且每个孩子的高度都是 #xyz 的一半!否则我看不出有任何理由使用 display: flex!
    • 好吧,我认为静态高度就足够了,你不觉得吗?
    • 我当然同意你的观点,不定义一个就没有意义了!
    猜你喜欢
    • 2012-05-25
    • 2020-10-03
    • 2016-06-17
    • 2019-10-30
    • 1970-01-01
    • 2023-01-09
    • 1970-01-01
    • 2020-04-20
    • 2021-04-24
    相关资源
    最近更新 更多