我想让主体有100%的浏览器高度。我可以用CSS来做吗?

我试着设置高度:100%,但它不起作用。

我想为页面设置一个背景色来填充整个浏览器窗口,但如果页面内容很少,我就会在底部得到一个丑陋的白色条。


当前回答

html, body
{
  height: 100%;
  margin: 0;
  padding: 0;
}

其他回答

在20多个答案之后,似乎没有一个人提到了我发现的最关键的因素——标记。

在尝试了这个问题和其他一些问题的基本每个答案之后,我重新构造了我的标记,如下所示:

<body>
  <div class="section1">
    <nav>
    </nav>
    ...
  </div>
  <div class="section2">
  </div>
</body>

本质上,它需要两个不同的外部容器。第一个容器用于包含导航栏,并将背景色/图像一直扩展到浏览器的高度,第二个容器用于包含“折叠以下”的所有内容——包括第二个背景色/图像。

这个解决方案允许第一个容器的背景一直扩展到底部,同时保持第二个容器的自由,以占用尽可能多的空间。

从这一点开始,唯一需要得到我和原始问题想要的结果的CSS如下:

body {
  height: 100%;
}

.section1 {
  height: 100%;
  background: black; /* for demo purposes */
}

.section2 {
  background: white; /* for demo purposes */
}

在测试了各种场景后,我认为这是最好的解决方案:

html {
    width: 100%;
    height: 100%;
    display: table;
}

body {
    width: 100%;
    display: table-cell;
}

html, body {
    margin: 0;
    padding: 0;
}

它是动态的,因为如果html和body元素的内容溢出,它们将自动展开。我在最新版本的Firefox、Chrome和IE 11中进行了测试。

在这里看到完整的小提琴(对于你讨厌桌子的人,你可以随时改变它使用div):

https://jsfiddle.net/71yp4rh1/9/


话虽如此,这里公布的答案有几个问题。

html, body {
    height: 100%;
}

使用上面的CSS会导致html和body元素不会自动展开,如果它们的内容溢出,如下所示:

https://jsfiddle.net/9vyy620m/4/

当你滚动时,注意到重复的背景了吗?这是因为body元素的高度没有增加,因为它的子表溢出了。为什么它不像其他块元素那样展开?我不确定。我认为浏览器不正确地处理了这个问题。

html {
    height: 100%;
}

body {
    min-height: 100%;
}

如上所示,在body上设置最小高度为100%会导致其他问题。如果你这样做,你不能指定子div或表占用一个百分比高度,如下所示:

https://jsfiddle.net/aq74v2v7/4/

希望这能帮助到一些人。我认为浏览器没有正确地处理这个问题。如果子节点溢出,我希望身体的高度能够自动调整。然而,当你使用100%的高度和100%的宽度时,这似乎不会发生。

我设计了div容器-通常是主体的唯一子元素,带有以下css

.body-container {
    position: fixed;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    height: 100%;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
}

Try

<html style="width:100%; height:100%; margin: 0; padding: 0;">
<body style="overflow:hidden; width:100%; height:100%; margin:0; padding:0;">

如果你不想编辑自己的CSS文件并自己定义高度规则,最典型的CSS框架也解决了这个问题,body元素填充整个页面,以及其他问题,轻松地使用多种大小的视口。

例如,Tacit CSS框架解决了这个问题,你不需要定义任何CSS规则和类,你只需要在HTML中包含CSS文件。