可滚动的 div 占用剩余高度(Bootstrap 4 Flexbox 网格系统)

Posted

技术标签:

【中文标题】可滚动的 div 占用剩余高度(Bootstrap 4 Flexbox 网格系统)【英文标题】:Scrollable div take up remaining height (Bootstrap 4 Flexbox grid system) 【发布时间】:2017-01-03 19:31:01 【问题描述】:

在 Bootstrap 4 Alpha 3 中启用 flexbox 支持之前,我的代码运行良好:

Working jsfiddle

但是,启用 flexbox 支持后,我无法使其工作。如果有办法使用Bootstrap 4 built-in Flexbox grid system features,那就最好了!

Not working jsfiddle

html

<div class="container wrapper">
  <div class="row header">
      header
  </div>

  <div class="row content">
      content: fill remaining space and scroll<br>
      x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
      x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
      x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
      x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
      x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
  </div>

  <div class="row footer">
      footer
  </div>
</div>

css

.wrapper 
  height: 20rem;
  display: flex;      /* if remove this, the style will be correct, but won't scroll */
  flex-flow: column;  /* if remove this, the style will be correct, but won't scroll */


.header 
  background: tomato;


.content 
  background: gold;
  overflow-y: scroll;


.footer 
  background: lightgreen;

【问题讨论】:

【参考方案1】:

CSS 中的微小变化将帮助您在启用 flexBootstrap 4 中实现相同的效果: 默认情况下,Bootstrap 4 将著名类 .row 的默认属性更改为:

.row 
    display: flex;
    margin-right: -0.9375rem;
    margin-left: -0.9375rem;
    flex-wrap: wrap;

即为什么你的结构和以前不一样,你需要做的就是把它的 CSS 改回原来的:

CSS

.wrapper 
  height: 20rem;
  display: flex;
  flex-flow: column;

.row 
    display: block;
    margin-right: -15px;
    margin-left: -15px;

.row:before, 
.row:after 
  content: " ";
  display: table;

.row:after 
  clear: both;

这是更新后的JSFiddle

【讨论】:

谢谢,但如果有办法不覆盖引导 css,那就太好了【参考方案2】:

受@vivekkupadhyay 启发,换一种方式,只需将display: block; 添加到页眉和页脚即可。

jsfiddle

html

<div class="container wrapper">
  <div class="row header">
      header
  </div>

  <div class="row content">
      content: fill remaining space and scroll<br>
      x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
      x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
      x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
      x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
      x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
  </div>

  <div class="row footer">
      footer
  </div>
</div>

css

.wrapper 
  height: 20rem;
  display: flex;
  flex-flow: column;


.header 
  background: tomato;
  display: block;


.content 
  background: gold;
  overflow-y: scroll;


.footer 
  background: lightgreen;
  display: block;

【讨论】:

以上是关于可滚动的 div 占用剩余高度(Bootstrap 4 Flexbox 网格系统)的主要内容,如果未能解决你的问题,请参考以下文章

使用 CSS 将 div 设置为剩余高度,上下 div 高度未知

Bootstrap 3 - 可滚动的内容 div

如何获取bootstrap滚动条的高度

如何使用 Bootstrap(我猜)让 iframe 填充剩余屏幕区域的宽度和高度?

Bootstrap div 边框占用空间

使两列分别可滚动和视口剩余长度的高度