如何使 DIV 占满整个浏览器窗口高度而不出现头部的垂直滚动条

12

左右两个面板高度均为100%,但是由于Header div占用了X个像素的空间,所以窗口中会出现一些垂直滚动条,我想要消除这种垂直滚动。

如何去除这个垂直滚动条?

JSFiddle: http://jsfiddle.net/G7unG/1/

CSS和HTML

html, body{
  height: 100%;
  margin: 0;
}
.header{
  background: #333;
  padding: 15px;
  text-align:center;
  font-size: 18px;
  font-family: sans-serif;
  color: #FFF;
}
.leftpanel, .rightpanel{
  height: 100%;
}
.leftpanel{
  float: left;
  width: 70%;
  background: #CCC;
}
.rightpanel{
  float: left;
  width: 30%;
  background: #666;
}
<div class="header">Header</div>
<div class="leftpanel">Left Panel</div>
<div class="rightpanel">Right Panel</div>
<div class="clearfix"></div>

6个回答

3

这里有一个使用flexbox的现代解决方案。无论标题的高度如何,其余元素都会垂直拉伸以填充剩余空间。这是fiddle链接:http://jsfiddle.net/mggLY/1/.

HTML:

<div id = "wrapper">
    <div class="header">Header</div>
    <div>
        <div class="leftpanel">Left Panel</div>
        <div class="rightpanel">Right Panel</div>
    </div>
</div>

CSS(层叠样式表):
* {
    margin: 0;
    padding: 0;
    border: 0;
}

html, body {
    height: 100%;
}

.header{
    background: #333;
    padding: 15px;
    text-align:center;
    font-size: 18px;
    font-family: sans-serif;
    color: #fff;
}

.leftpanel{
    background: #CCC;
}

.rightpanel{
    background: #666;
}

#wrapper {
    height: 100%;
    display: -webkit-flex;
    display: flex;
    -webkit-flex-direction: column;
    flex-direction: column;
    outline: 1px solid red;
}

#wrapper > .header {
    -webkit-flex: 0 0 auto;
    flex: 0 0 auto;
}

#wrapper > .header + div {
    -webkit-flex: 1 1 auto;
    flex: 1 1 auto;
    display: -webkit-flex;
    display: flex;
    -webkit-flex-direction: row;
    flex-direction: row;
}

#wrapper > .header + div > div:first-of-type {
    -webkit-flex: 7 0 0;
    flex: 7 0 0;
}

#wrapper > .header + div > div:last-of-type {
    -webkit-flex: 3 0 0;
    flex: 3 0 0;
}

感谢您提供的解决方案! - iammikerodriguez
.leftPanel, .rightPanel添加一些溢出规则,例如overflow: auto;,以防止内容溢出框架并导致页面出现滚动条。 - Wish

3

3
溢出隐藏会导致我网站需要垂直滚动的其他部分无法滚动。 - iammikerodriguez
不,如果你只将它应用于主体,那么在其他元素中你仍然可以使用overflow: auto;来启用它... - T_01
如果您可以接受每列单独滚动的话,这个方法是可行的(在我看来并不理想)。否则,它会截断页面并禁止滚动。 - showdev

2
您可以使用绝对定位,让左面板或右面板保持100%的高度。如果需要,在左面板或右面板内部添加滚动条。

示例: http://jsfiddle.net/G7unG/2/

html, body{
    height: 100%;
    margin: 0;
}
.header{
    background: #333;
    padding: 15px;
    text-align:center;
    font-size: 18px;
    font-family: sans-serif;
    color: #FFF;
    height: 22px;
}
.leftpanel, .rightpanel{
    top: 52px;
    bottom: 0;
    position: absolute;
}
.leftpanel{
    width: 70%;
    left: 0;
    background: #CCC;
}
.rightpanel{
    width: 30%;
    right: 0;
    background: #666;
}

解决方案2 - 使用固定百分比来设置高度:http://jsfiddle.net/G7unG/4/
html, body{
    height: 100%;
    margin: 0;
}
.header{
    background: #333;
    padding: 15px;
    text-align:center;
    font-size: 18px;
    font-family: sans-serif;
    color: #FFF;
    height: 30%;
    box-sizing: border-box;
}
.leftpanel, .rightpanel{
    height: 70%;
    float: left;
}
.leftpanel{
    width: 70%;
    left: 0;
    background: #CCC;
}
.rightpanel{
    width: 30%;
    float: right;
    background: #666;
}

解决方案1:使用绝对定位可能有效,但顶部高度未知且无法固定,因为不同页面的页眉高度不同。解决方案2:页眉根据内容在不同页面上更改高度,因此我认为固定页眉高度不起作用。 - iammikerodriguez
解决方案2正是我所需要的,+1。 - Spankied
只是想让你知道,现在有更简单的方法或更好的解决方案。要使用Flex,请参阅此帖子:https://dev59.com/QV8f5IYBdhLWcg3wD-8v - Niels

1

使用视口。现在的浏览器支持将高度设置为页面高度的百分比。如果有标题占用空间,请将100减少到80。

div {
    height:100vh;
}

1

1
Overflow hidden会导致我网站上其他需要垂直滚动的部分无法滚动。 - iammikerodriguez
没有提到您不想要这样的行为,但我相信您已经找到了一个合适的答案。 :) - Takoyaro

1
你可以使用“假列”类型的结构--将你的列的背景颜色作为“固定”元素添加(它们不会随页面滚动),放在你的真实列后面。
<div id="left_faux"></div>
<div id="right_faux"></div>

div#left_faux {
    position: fixed;
    top:0;
    left:0;
    right:30%;
    bottom:0;
    background-color:#CCC;
}
div#right_faux {
    position: fixed;
    top:0;
    left:70%;
    right:0;
    bottom:0;
    background-color:#666; 
}

.leftpanel{
    float: left;
    width: 70%;
}
.rightpanel{
    float: left;
    width: 30%;
}

这个快速示例可能过于冗长,仅用于演示目的。我相信您可以简化CSS,以减少冗余定义。

工作示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接