【问题标题】:How to make a div fill the remaning vertical space using css如何使用css使div填充剩余的垂直空间
【发布时间】:2016-04-04 18:19:22
【问题描述】:

我正在尝试使用 标题导航栏和正文(在导航栏的右侧)制作标准网站布局) 和一个页脚

到目前为止,我已经这样做了:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Test</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <style type="text/css" media="screen">

            .header {
                float: top;
                width: 100%;
                height: 75px;
            }

            .navbar {
                float: left;
                width: 20%;
                height: 100%;
                height: 100%;
                min-height:100%;
                overflow: scroll;
            }

            .body {
                float: right;
                width: 80%;
                height: 100%;
                min-height:100%;
                overflow: scroll;
            }
            .footer {
                float: bottom;
                width: 100%;
            }
        </style>
    </head>
    <body>
        <div class="header"> Header </div>
        <div class="navbar"> Nav Bar </div>
        <div class="body"> Body </div>
        <div class="footer"> Footer</div>
    </body>
</html>

产生这个:

现在如果我们检查 CSS:

.navbar {

    float: left;
    width: 20%;
    height: 100%;
    min-height: 100%;
    overflow: scroll;
}

.body {
    float: right;
    width: 80%;
    height: 100%;
    min-height: 100%;
    overflow: scroll;
}

如您所见,我尝试设置主体和 导航栏heightmin-height 以填充剩余部分垂直空间,即:

但它不影响它。但是,如果我这样做 height: 500px 它会按预期调整大小(当然这现在不是很好的做法,因为不同的屏幕尺寸等会显示页面的不同部分或视图):

所以基本上我在问我如何能够使divs 填充剩余的垂直空间而不使用一些硬编码值,即100px,而不是我想以百分比来做到这一点,因此页面将在所有浏览器上看起来都一样

【问题讨论】:

  • 你可以使用display:table-cell,但它不支持糟糕的IE 7或更低版​​本。否则,可怕的&lt;table&gt; 可能会替代 div。这是兼容性与语义。
  • @TheBronx 老实说,我在 HTML 中有点胡思乱想,我已经搜索过,但我找不到确切的操作。另一个问题是 JQuery 但我不想添加更多依赖项(因为我正在做 XHTML 和 PHP)...
  • @AramKocharyan 我看得很清楚,我的目标是兼容性,因此是 div ......但我只是找不到任何解决方案来解决我认为height:100% 可以解决的问题?!​​?
  • @DavidKroukamp 好吧,真正的答案是“你不能用 CSS 填充剩余的垂直空间”。这就是为什么您可能找不到好的解决方案。你会发现尝试解决部分问题的 javascript hack 和奇怪的 css 组合。

标签: css html


【解决方案1】:

将此代码添加到您的正文中,html:

body,html{
  height:100%;
}

并让您的导航栏&lt;div id="navbar"&gt; 而不是&lt;div class="navbar"&gt; 然后添加高度:100%;到您的导航栏

#navbar{
  height:100%
// rest of your code
}

与您的内容相同 称它为 content 之类的东西,因为 body 已经被使用了。

#content{
  height:100%
// rest of your code
}

现在所有 div 的高度都为 100%,因此是整个浏览器的高度。

编辑:您的完整代码如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Test</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <style type="text/css" media="screen">

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

            #header {
                width: 100%;
                height: 75px;
            }

            #navbar {
                float: left;
                width: 20%;
                height: 100%;
                min-height:100%;
                overflow: scroll;
            }

            #content {
                float: right;
                width: 80%;
                height: 100%;
                min-height:100%;
                overflow: scroll;
            }
            #footer {
                width: 100%;
            }
        </style>
    </head>
    <body>
        <div id="header"> Header </div>
        <div id="navbar"> Nav Bar </div>
        <div id="content"> Body </div>
        <div id="footer"> Footer</div>
    </body>
</html>

【讨论】:

  • 我已经尝试添加更改,但它不起作用我的输出变得混乱:(
  • OMW 感谢帮助了这么多的人,非常感谢 +1。还有一个问题,我通过命名 div body 是否犯了一个错误,因此它与 css body,html 关键字发生冲突,因为我看到您将 body 的名称更改为 content 并添加body,html ?
  • @DavidKroukamp body.body 是不同的,但对于语义而言,避免将标签名称重复为类名是有意义的。
  • 很高兴我能帮上忙,感谢@AramKocharyan 指点他 :)
  • 没有float:top和float:bottom这样的东西。
【解决方案2】:

对每个内容块(页眉、页脚、侧边栏、正文)使用绝对定位,对于正文和导航栏 div,设置顶部和底部位置属性,而不是指定高度属性。这将强制它们填充剩余的视口高度。

More detail here

...为了支持 IE5 和 IE6,here's an improved version 仅使用 CSS(无 javascript)。

【讨论】:

  • 应该注意这个答案只有在你的页眉和页脚是静态大小时才有效,因为你使用绝对定位。如果您想使用可变高度的页眉和页脚来完成同样的事情,这种方法将不起作用。您需要使用 javascript 修改顶部和底部值。