【问题标题】:Make flex child element occupy 100% height of parent flex [duplicate]使flex子元素占据父flex的100%高度[重复]
【发布时间】:2015-11-01 02:12:58
【问题描述】:

我有一个带有内容弹性的容器弹性。如何让内容 flex 占据容器 flex 的全宽和高度。

<div id="main">
<div id="main-nav">
</div>
<div class="container">
    <div class="content"></div>
    <div class="content"></div>
</div>
</div>

#main{
   display: flex;
   flex-direction: column;
   height: 100vh;
   width: 100vw;
}
#main-nav{
    width: 100%
    height: 50px; 
}
.container{
display: flex;
flex-direction: row;
flex-wrap: wrap;
flex: 1;
}
.content{
display: flex;
width: 100%;
height: 100%;
}

上面的代码使内容占据容器的 100% 宽度,但高度基于内容中的文本。我尝试了类似问题中提到的解决方案,但没有运气,它仍然是一样的。

基本上,我希望每个内容在视口高度中占据与容器所占据的高度相同的高度。我也试过 jQuery,

var rht = $("#container").height();
$(".content").height(rht);

它会适当地改变高度,但会增加一个随着宽度增加的水平滚动条。

【问题讨论】:

  • 下面的答案不能解决这个问题吗..?

标签: css flexbox


【解决方案1】:

您不能将 flex 子项的宽度或高度设置为更大(flex 的大小)/(flex 子项的数量),但您可以将 position: absolute 添加到 .contentposition: relative.container 然后设置 widthheight.content。第一个.content在第二个.content下面,可以使用propetyz-index或者display: none来控制。

* {
  box-sizing: borderbox;
  margin: 0;
  padding: 0;
}
#main {
  display: flex;
  flex-direction: column;
  background: red;
  min-height: 100vh;
}
#main-nav {
  flex: 0 0 50px;
}
.container {
  position: relative;
  display: flex;
  flex: 1;
  background: green;
}
.content {
  position: absolute;
  left: 0px;
  top: 0px;
  height: 100%;
  width: 100%;
  flex: 1;
  background: orange;
}
<div id="main">
  <div id="main-nav"></div>
  <div class="container">
    <div class="content">left</div>
    <div class="content">right</div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    在对原始问题进行了几次更新后:

    * {
      box-sizing: borderbox;
      margin: 0;
      padding: 0;
    }
    #main {
      display: flex;
      flex-direction: column;
      border: 1px solid red;
      min-height: 100vh;
    }
    #main-nav {
      flex: 0 0 50px;
    }
    .container {
      display: flex;
      flex-direction: column;
      flex: 1;
      border: 1px solid green;
    }
    .content {
      flex: 1;
      border: 1px solid orange;
    }
    <div id="main">
      <div id="main-nav"></div>
      <div class="container">
        <div class="content"></div>
        <div class="content"></div>
      </div>
    </div>

    JSfiddle Demo

    【讨论】:

    • 请找到更新后的代码。那是我的实际情况。我哪里出错了?
    • 再次更新。它需要完整的视口高度。
    • 对这么多编辑感到抱歉。我想让内容占据容器 flex 的整个宽度和高度,一个在另一个之下。
    猜你喜欢
    • 2018-01-08
    • 2015-05-22
    • 2021-06-10
    • 2020-12-27
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2015-04-03
    • 2018-06-11
    相关资源
    最近更新 更多