当主容器是水平柔性箱时,Flexbox收缩主容器

时间:2017-09-03 14:58:13

标签: html css css3 flexbox

我想为我的SPA创建一个简单的布局,我有一个标题组件,应该一直显示。页脚组件应位于屏幕的底部,或者如果主要内容组件大于屏幕,则它应位于内容组件下方。如果屏幕大于内容,则应该获得剩余空间的主要内容组件,因此页脚组件将在底部呈现。

目前我已在此codepen中重现了我的布局。但是如果你足够缩小codepen的结果窗口,那么你将无法看到Test2文本,因为页脚组件位于它之上。我期望的行为是,我可以看到Test2文本,我可以向下滚动到页脚组件。

如果内容组件不是具有flex-direction: row的弹性框,则它有效。任何想法为什么这不起作用?

在我的SPA中,我使用的是React,因此我不想为此使用任何JavaScript。

* {
  padding: 0;
  margin: 0;
  font-size: 2rem;
}

.page {
  display: flex;
  flex-direction: column;
  height: 100vh;
  width: 100%;
  background: yellow;
}

.container {
  display: flex;
  flex-direction: column;
  flex: 1;
  overflow: scroll;
}

.main {
  flex: 1;
  background: red;
  display: flex;
  flex-direction: row;
  min-height: 30px;
}

.test {
  display: block;
}

.footer {
  background: green;
}
<div class="page">
  <div class="header">Header</div>
  <div class="container">
    <div class="main">
      Main
      <div class="test">Test1<br />Test2<br/></div>
    </div>
    <div class="footer">Footer</div>
  </div>
</div>

2 个答案:

答案 0 :(得分:1)

只需将flex:1 0 auto添加到.main类。柔性特性是柔性增长,柔性收缩和柔性基础。因此,0表示不会缩小。

* {
  padding: 0;
  margin: 0;
  font-size: 2rem;
}

.page {
  display: flex;
  flex-direction: column;
  height: 100vh;
  width: 100%;
  background: yellow;
}

.container {
  display: flex;
  flex-direction: column;
  flex: 1;
  overflow: scroll;
}

.main {
  flex: 1 0 auto;
  background: red;
  display: flex;
  flex-direction: row;
  min-height: 30px;
}

.test {
  display: block;
}

.footer {
  background: green;
}
<div class="page">
  <div class="header">Header</div>
  <div class="container">
    <div class="main">
      Main
      <div class="test">Test1<br />Test2<br/></div>
    </div>
    <div class="footer">Footer</div>
  </div>
</div>

答案 1 :(得分:0)

我得到了它的工作。我需要在我的内容周围添加一个display: block;的div,然后我将justify-content: space-between;添加到我的容器组件中。小hacky,但它的工作......

这是我的最终代码:

&#13;
&#13;
* {
  padding: 0;
  margin: 0;
  font-size: 2rem;
}

.page {
  display: flex;
  flex-direction: column;
  height: 100vh;
  width: 100%;
  background: yellow;
}

.container {
  display: flex;
  flex-direction: column;
  flex: 1;
  justify-content: space-between;
  overflow: scroll;
}

.block {
  display: block;
}

.main {
  background: red;
  display: flex;
  flex-direction: row;
}

.test {
  display: block;
}

.footer {
  background: green;
}
&#13;
<div class="page">
  <div class="header">Header</div>
  <div class="container">
    <div class="block">
    <div class="main">
      Main
      <div class="test">Test1<br />Test2<br/></div>
    </div>
    </div>
    <div class="footer">Footer</div>
  </div>
</div>
&#13;
&#13;
&#13;