Flexbox - 填充剩余空间[重复]

Posted

技术标签:

【中文标题】Flexbox - 填充剩余空间[重复]【英文标题】:Flexbox - Fill remaining space [duplicate] 【发布时间】:2018-11-11 22:28:02 【问题描述】:

我有一个像这样的基本 flexbox 布局..

body,html 
  height:100%;
  width:100%;



#container 
  width:100%;
  background:grey;
  display:flex;
  flex-direction:column;


.top 
  background:red;
  flex:1;
  padding:20px;


.bottom 
  background:yellow;
  flex:1;
  padding:20px;
<div id="container">
	<div class="top">
  Top Content
	</div>
	<div class="bottom">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut venenatis, arcu vitae sollicitudin pellentesque, quam libero imperdiet urna, eu rhoncus lorem dolor sed neque. Donec ex risus, pretium ut maximus fringilla, euismod id mi. Phasellus ligula sem, iaculis ut urna eget, efficitur vulputate sem.
  </div>
</div>

我试图让顶部 div 填充剩余空间,底部 div 是动态的,因此高度会根据文本而变化。我的结果是这样的..

在这种情况下使用 flexbox 是不是最好的选择?

【问题讨论】:

看起来高度是用chrome和edge填充的。您使用的是什么浏览器,您觉得它是什么样的?可以加个截图吗? 添加了我看到的截图 似乎是:***.com/questions/25098042/… 的副本(flex:1 仅在容器上填充空间和父级上的有效高度,因此它知道要填充什么) 【参考方案1】:

在这种情况下使用 flexbox 是不是最好的选择?

是的,在这种情况下使用 flexbox 是个好主意。

据我了解,要达到您想要的结果,您需要在#container 上设置height: 100%,以便它占据所有可用空间。然后在.bottom 上设置flex-grow: 0,使其不会增长。

所以你的 CSS 应该是:

#container 
  width:100%;
  height:100%;
  background:grey;
  display:flex;
  flex-direction:column;


.top 
  background:red;
  flex: 1 0 auto; // Grow, don't shrink
  padding:20px;


.bottom 
  background:yellow;
  flex: 0 0 auto; // don't grow, take up only needed space
  padding:20px;

【讨论】:

【参考方案2】:

首先,你需要让容器占据垂直空间。 height: 100%; 会这样做。

其次,如果你想让title div 和下面的div一样大,它们不应该都是flex: 1;,实际上你可能希望title是@987654323 @

【讨论】:

【参考方案3】:

容器未设置为100% 高度。它不够高。将容器设置为height: 100% 后,您还必须为每个弹性项目设置flex-basis。底部可以是flex: 1 1 auto,但顶部应该是flex: 0 1 auto

body,html 
  height:100%;
  width:100%;
  margin: 0;


#container 
  width:100%;
  height: 100%;
  background:grey;
  display:flex;
  flex-direction:column;


.top 
  background:red;
  flex:1 1 auto;
  padding:20px;


.bottom 
  background:yellow;
  flex:0 1 auto;
  padding:20px;
<div id="container">
	<div class="top">
  Top Content
	</div>
	<div class="bottom">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut venenatis, arcu vitae sollicitudin pellentesque, quam libero imperdiet urna, eu rhoncus lorem dolor sed neque. Donec ex risus, pretium ut maximus fringilla, euismod id mi. Phasellus ligula sem, iaculis ut urna eget, efficitur vulputate sem.
  </div>
</div>

【讨论】:

以上是关于Flexbox - 填充剩余空间[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使 flexbox 元素填充剩余空间并滚动?

Bootstrap 4 导航栏和内容填充高度 flexbox

Bootstrap - 填充剩余的垂直空间[重复]

拉伸 flexbox 子元素以填充列高

使用 :before 和 :after 元素填充文本元素的剩余空间[重复]

Flex 具有一个固定宽度的列和一个必须填充剩余空间的流体列[重复]