ChatGPT解决这个技术问题 Extra ChatGPT

Twitter Bootstrap:容器中的 div 高度为 100%

使用 twitter bootstrap (2),我有一个带有导航栏的简单页面,在 container 内我想添加一个高度为 100% 的 div(到屏幕底部)。我的 css-fu 生锈了,我无法解决这个问题。

简单的 HTML:

<body>
  <div class="navbar navbar-fixed-top">
   <!-- Rest of nav bar chopped from here -->
  </div>
  <div class="container fill">
    <div id="map"></div> <!-- This one wants to be 100% height -->
  </div>
</body>

当前的 CSS:

#map {
    width: 100%;
    height: 100%;
    min-height: 100%;
}

html, body {
    height: 100%;
}

.fill { 
    min-height: 100%;
}

编辑 *

我已经按照下面的建议为填充类添加了高度。但是,问题是我在 body 中添加了一个 padding-top 来说明顶部的固定导航栏。这会影响“地图”div 的 100% 高度,并意味着添加了滚动条 - 如下所示:http://jsfiddle.net/S3Gvf/2/ 谁能告诉我如何解决?

所以你只想向各个方向拉伸那个 div?
是的,我希望它填充导航 div 之后留下的空间

R
R3tep

将类 .fill 设置为 height: 100%

.fill { 
    min-height: 100%;
    height: 100%;
}

JSFiddle

(我为 #map 设置了一个红色背景,因此您可以看到它占据了 100% 的高度)


谢谢,稍后会尝试并报告。不敢相信我错过了那个简单的修复:)
谢谢,这种工作方式,但是固定位置的 twitter bootstrap nav 会使地图脱离底部 - 您需要滚动到底部。我不知道如何使 div 跨越整个可用屏幕空间减去导航栏。
jsfiddle.net/S3Gvf/4 在带有填充(body 标签)的元素上使用 box-sizing:border-box; 以获得简单的解决方法
我不太确定那个 css3 voodoo 是如何工作的,但它确实有效:) 非常感谢!
在此示例中,#map 实际上隐藏在导航栏后面。
Z
Zim

2019 年更新

在 Bootstrap 4 中,flexbox 可用于获得填充剩余空间的全高布局。

首先,容器(父级)需要是全高的:

选项 1_ 为 min-height: 100%; 添加一个类。请记住,如果父级具有定义的高度,则 min-height 起作用:

html, body {
  height: 100%;
}

.min-100 {
    min-height: 100%;
}

https://codeply.com/go/dTaVyMah1U

选项 2_ 使用 vh 单位:

.vh-100 {
    min-height: 100vh;
}

https://codeply.com/go/kMahVdZyGj

同样在 Bootstrap 4.1 中,vh-100min-vh-100 类包含在 Bootstrap 中,因此不需要额外的 CSS

然后,在容器上使用 flexbox 方向列 d-flex flex-column,并在要填充剩余高度的任何 child div(即:row)上使用 flex-grow-1

另请参阅:
Bootstrap 4 Navbar and content fill height flexbox
Bootstrap - Fill fluid container between header and footer
How to make the row stretch remaining height


为什么这两种方法似乎与简单地创建第二个容器来占据窗口底部高度的其余部分相反?开发人员应该可以灵活地在上述给定空间中使用引导程序做任何他们想做的事情。
你真的认为这值得一票否决吗? “只需创建第二个容器,它占据了窗口底部高度的其余部分”......你有一个如何工作的例子吗?重点是 height:100% 不仅消耗了底部高度的其余部分,而且消耗了 100% 的视口高度,从而创建了一个垂直滚动条。这就是为什么地图需要在接受的答案中滑到底部的原因。
您是 BootStrap 的这些表单上受人尊敬的开发人员。我没有对你投反对票,是别人投的。我只是对您的回答感到惊讶,因为您的大多数回答都得到了高度评价。我希望我有一个例子来说明它是如何工作的。我还没有找到任何东西,但是如果 flexbox 确实有一种简单的方法可以将元素的其余部分填充到页面底部,那就太好了。感谢您尝试提供答案,我只是假设我们在那里很容易实现这一点。我猜不是 :)
好的,如答案“在容器上使用 flexbox 方向列 d-flex flex-column,在要填充剩余高度的任何子 div(即:行)上使用 flex-grow-1”中所述...父母是 100% 高度解释
S
Sumit Kumar Gupta

这很简单。您可以使用

.fill .map 
{
  min-height: 100vh;
}

您可以根据需要更改高度。


m
mamezito

您需要将 padding-top 添加到“填充”元素,并添加 box-sizing:border-box - 此处示例 bootply