html - 填充高度元素内的滚动元素

标签 html css flexbox css-grid

我需要创建一个带有页眉和主要区域的网页布局。标题的高度将随着内容的增加而增长,主要区域将填充剩余的垂直空间。很酷,这很容易用 flex 或 grid 完成。但!在主要区域中,我需要另一个元素(让我们称他为 badboy),它可以包含很多内容并且我需要它滚动,而不是将我的主要区域延伸到页面的下边框之外。

对于主要区域,我尝试使用 flex-grow: 1 或 grid row 大小为 auto 进行 flex。但是由于这些元素没有特定的高度,所以 badboy 总是会拉伸(stretch)主要元素,因此不会在任何地方发生溢出。

我的 HTML:

<div class="app">
  <header></header>
  <main>
    <div class="badboy"></div>
  </main>
</div>

布局:

the layout

如果我能将标题的高度固定为特定高度,我就可以使用 calc 准确设置主要区域的高度并解决问题。但是我的标题需要随着内容的增长而增长。已经有类似问题here说这是不可能的,但它已经有 5 年历史了,从那时起 CSS 已经取得了长足的进步。

最佳答案

好的,通过深入挖掘,我想出了这个带有 CSS 网格的解决方案。我不知道这是 hacky 还是普通的东西,但它似乎有效。

.app {
  width: 100vw;
  height: 100vh;
  grid-template-columns: 100%;
  grid-template-rows: fit-content(1px) minmax(1px, auto);
  display: grid;
}

header {
  background: lightgray;
}

main {
  background: gray;
}

.badboy {
  max-width: 40rem;
  margin: 0 auto;
  max-height: 100%;
  overflow-y: auto;
  background-color: white;
}

关于html - 填充高度元素内的滚动元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54569109/

相关文章:

javascript - 修改子类时,Firefox 似乎会放弃自动换行样式

html - 将 h1 对齐到 float 图像的右侧

html - 在移动设备上垂直居中元素

html - div的溢出区域没有样式

html - Flex-box 并排显示子 div

html - CSS 和 Flexbox 布局问题

javascript - 使用 anchor 可以使用 Javascript/不同方法处理浏览器后退按钮?

javascript - 错误: TypeError: Cannot set property 'innerHTML' of null in phonegap

jquery - 如何让页面在 Chrome 和 IE 中显示相同?

jquery - 增加 Bootstrap 下拉菜单宽度