使嵌套的 div 拉伸到剩余容器 div 高度的 100%

新手上路,请多包涵

我有一个容器 div,我想至少将其拉伸到整个窗口的高度。如果容器 div 中有很多内容,我希望它伸展到超过窗口的高度。这行得通。

在容器 div 中,我有一个图像。在图片之后/下方,我有第二个 div。我希望这个嵌套的 div 垂直拉伸以填充容器 div 的剩余空间。这是行不通的。

我试图说明 这张图片 中的问题。我希望 div 以右图 左侧 所示的方式拉伸,而不是它在 右图右侧 的样子。

以下是我的代码。如您所见,在这段代码中,我什至没有尝试使图像下的 div 垂直拉伸,因为没有任何效果。 “高度:100%”不起作用,因为我默认将“100%”定义为窗口的高度,以使容器 div 至少拉伸到窗口的高度。

 * {
  margin: 0;
  padding: 0;
}

body {
  overflow-y: scroll;
  overflow-x: hidden;
}

body,
html {
  height: 100%;
}

.container {
  display: block;
  overflow: auto;
  min-height: 100%;
  height: 100%;
  height: auto;
}

.bottom {
  width: 100%;
}
 <div class="container">

  <img src="image.jpg" width="100%">

  <div class="bottom">
    LOREM IPSUM
  </div>

</div>

原文由 Magnus the Swede 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 391
2 个回答

我花了太多时间试图弄明白,但是乔治,我明白了!

“尤里卡”时刻正在阅读其他问题,人们会问“我怎样才能 使用表格来做到这一点?”因为当然,这种布局对于表格来说很容易。但这让我想到了 display:table

正如 这篇博文很好地论证的 那样,使用 display:table 可以为您提供表格布局,而无需像 HTML 表格布局那样令人讨厌的标记开销,从而使您可以针对不同的媒体查询使用语义代码和不同的布局。

我最终不得不对标记进行 一项 更改:图像周围的包装器 <div> 。此外,在处理 表格显示 时,最大/最小高度都很奇怪: height 考虑到父元素和子元素的约束,设置被视为首选高度。因此,在 display:table-row 包装器 div 上设置高度为零,使该行完全适合内容图像。在内容 div 上设置 100% 的高度可以很好地填充图像和父容器的最小高度之间的空间。

瞧!

仅压缩基本代码:

 body {
  overflow-y: scroll;
  overflow-x: hidden;
}

body,
html {
  height: 100%;
}

.container {
  display: table;
  width: 100% height: 100%;
  /* this will be treated as a Minimum! It will stretch to fit content */
}

div.wrapper {
  display: table-row;
  height: 0px;
  /* take as little as possible, while still fitting content */
}

img {
  display: table-cell;
  width: 100%;
  /*scale to fit*/
}

.bottom {
  display: table-cell;
  height: 100%;
  /* take as much as possible */
}
 <div class="container">
  <div class="wrapper">
    <img src="http://placekitten.com/600/250" />
  </div>
  <div class="bottom" contentEditable="true">
  </div>

适用于 Firefox 25、Chrome 32、Opera 18 和 IE10。在 IE 8 中不起作用,但那又怎样呢?它在 IE8 中看起来并没有 _损坏_,只是无法拉伸以适应。

如果您可以在 Safari、IE9 或移动浏览器中测试它,请发表评论。

原文由 AmeliaBR 发布,翻译遵循 CC BY-SA 4.0 许可协议

当 Flex 盒子得到广泛支持时,它们会很好。

更好的是规范中的更改,这样如果您在父级上指定 min-height ,您可以使用子对象的百分比值 min-height ,而不是要求父级高度值必须明确设置儿童身高百分比才有意义。但我离题了…

与此同时,使用 “假列” 可以得到你想要的效果。概念很简单:让子 div 具有自动高度,然后绘制父级的背景,使子 div 的背景看起来一直延伸到全高。

该链接中的示例使用背景图像,但如果您不介意 牺牲对 Safari 和 IE9- 的支持, 则可以使用背景渐变。 (请记住,缺乏支持就意味着不那么漂亮,一切在功能上都是一样的。)

这里的例子:

http://fiddle.jshell.net/y6ZwR/3/

原文由 AmeliaBR 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题