【问题标题】:How can I make a div 100% of window height?如何使 div 100% 的窗口高度?
【发布时间】:2012-11-16 13:36:56
【问题描述】:

我只想有一个 100% 为窗口高度的侧边栏,但除此之外没有任何效果:

#sidebarBack {
background: rgba(20, 20, 20, .3);
position: fixed;
width: 250px;
height: 100%;
left: 0;
}

我不想拥有position: fixed,因为我有可水平滚动的内容,所以固定部分会保留,嗯,固定。

有没有办法做这样的事情,也许是relativeabsolute的位置?

这里有一个快速的 Fiddle 仅用于测试和解释: JSFiddle

【问题讨论】:

  • 原谅我,但我有点好奇 - 如果你能够滚动它,那不是破坏了让它成为页面高度的想法吗?
  • 您希望边栏滚动到窗口之外,还是留在原处?并隐藏侧边栏下的可滚动代码?
  • 如果内容正在滚动,我希望它滚动出窗口。就像一个相对/绝对的位置......就像 Wordpress 管理面板......他们有类似的东西......

标签: html css


【解决方案1】:

您可以使用新的非常有用的-I-can't-imagine-what-took-W3C-so-long vh CSS 单元:

height:100vh;

【讨论】:

  • 如果我在顶部有一个菜单栏?
  • 为什么每个人都建议使用vh...浏览器的导航栏,你不会用它做任何事情。
【解决方案2】:

tl;dr - 将 html, body {height:100%;} 添加到您的 CSS。


CSS 中的百分比值是从某个已经声明了高度的祖先继承而来的。在您的情况下,您需要告诉侧边栏的所有父母都是 100% 的高度。我假设#sidebarBackbody 的直接子代。

基本上,您上面的代码告诉#sidebarBack 是其父级的100% 高度。它的父级(我们假设)是body,因此您还需要在body 上设置height: 100%;。然而,我们不能止步于此; body 继承自 html 的高度,因此我们需要在html 上设置height: 100%;。我们可以在这里停下来,因为html 继承了viewport 的属性,viewport 已经声明了高度为100%

这也意味着如果您最终将#sidebar 放入另一个div,那么div 也需要height:100%;

这是一个Updated JSFiddle

将您的 CSS 更改为:

html, body {
    height:100%;
}

#sidebar {
    background: rgba(20, 20, 20, .3);
    width: 100px;
    height: 100%;
    left: 0;
    float:left;
}

section#settings {
    width:80%;   
    float:left;
    margin-left:100px;
    position:fixed;
}

【讨论】:

  • 嗯,如果我添加它,它会使我的内容水平和垂直滚动,并且不会在相对/绝对位置为侧边栏提供 100% 的高度。
  • 对 - 很多人忘记了标签:html、body、form 仍然是 HTML 元素,它们的默认高度不是 100% - 它们需要手动设置。
  • @NenaddvL 我不确定您为什么选择此答案,因为它似乎无法完成您的要求。除其他问题外,此答案通过在您的 #settings 部分设置 position:fixed 有效地禁用所有滚动。我在下面添加了一个答案,我认为这将是您问题的更完整解决方案(请参见此处:stackoverflow.com/a/13610461/416630)。
  • @Darren 我注意到不止一个问题被标记为与此问题重复,因此我在您的答案中添加了更多信息并修改了该问题以更好地作为未来的规范问答.如果您希望改进它,请随时调整您的答案!
【解决方案3】:

首先,告诉 body 元素填充窗口,而不是缩小到内容的大小:

body { position: absolute; min-height: 100%; }

通过使用min-height 而不是height,当内容长于窗口时,主体将被允许扩展超出窗口的高度(即,这允许在需要时进行垂直滚动)。

现在,将“#sidebar”设置为position:absolute,并使用top:0; bottom:0; 强制它填充父元素的垂直空间:

#sidebar {
    position: absolute;
    top:0; bottom:0;
    left: 0;
    width: 100px;
    background: rgba(20, 20, 20, .3);
}

这里有几个 jsFiddles:

如您所见,在这两个示例中,我都在“#settings”部分保留了您的宽度设置,从而表明水平滚动可以按照您的要求进行。

【讨论】:

  • 我对每一个答案都有疑问。没有一个能真正解决问题。如果我将他在#settings 上的固定位置替换为绝对位置,则检查答案除外。然而,这两种方式都不好,因为 html, body 100% 给了我高度可滚动的页面,这就是我现在想要的。我想我会改变设计和立场,因为它肯定不会这样。也感谢您的帮助!
【解决方案4】:

试试下面的

#sidebarBack {
 background: rgba(20, 20, 20, .3);
 position: fixed;
 width: 250px;
 top:0;
 bottom:0;
 left: 0;
}

【讨论】:

  • 嗯,这不是我需要的。由于 top:0;
【解决方案5】:

试试这个 -

html,body{height:100%;}
#sidebar {
background: rgba(20, 20, 20, .3);
/*position: fixed;*/
width: 100px;
height: 100%;
left: 0;
float:left;
}


section#settings {
width: 62%;
height: auto;
display: inline-block;
position: relative;
margin-left: 100px;
float:left;
}

【讨论】:

  • 不会使侧边栏仍然 100% 高度 :(
猜你喜欢
  • 2013-01-02
  • 2010-12-07
  • 2012-01-18
  • 1970-01-01
相关资源
最近更新 更多