我有一个标题元素和一个内容元素:
#header
#content
我希望标题具有固定的高度,并且内容用overflow-y: scroll;
填充屏幕上可用的所有剩余高度。
这可能没有Javascript吗?
答案 0 :(得分:248)
忘记所有答案,这行CSS在2秒内为我工作:
height:100vh;
1vh
=浏览器屏幕高度的1%
对于响应式布局缩放,您可能需要使用:
min-height: 100vh
[2018年11月更新] 正如评论中提到的,使用min-height可以避免在reponsive设计上出现问题
[更新于2018年4月] 正如评论中所述,早在2011年提出问题时,并非所有浏览器都支持视口单元。
其他答案是当时的解决方案 - IE中仍然不支持vmax
,因此这可能不是所有人的最佳解决方案。
答案 1 :(得分:73)
这方面的技巧是在html和body元素上指定100%的高度。 有些浏览器会查看父元素(html,body)来计算高度。
<html>
<body>
<div id="Header">
</div>
<div id="Content">
</div>
</body>
</html>
html, body
{
height: 100%;
}
#Header
{
width: 960px;
height: 150px;
}
#Content
{
height: 100%;
width: 960px;
}
答案 2 :(得分:32)
实际上最好的方法就是:
html {
height:100%;
}
body {
min-height:100%;
}
这解决了我的一切,它帮助我控制我的页脚,无论页面是否向下滚动,它都可以有固定的页脚。
技术解决方案 - 已编辑
从历史上看,“高度”是一个难以塑造的东西,与“宽度”相比,最简单。因为css专注于<body>
以便样式工作。上面的代码 - 我们给了<html>
和<body>
一个高度。这就是魔术进入画面的地方 - 因为我们在桌面上有'最小高度',我们告诉浏览器<body>
优于<html>
因为<body>
保持最小高度。这反过来允许<body>
覆盖<html>
,因为<html>
已经具有较高的高度。换句话说,我们正在欺骗浏览器将<html>
从表中“甩掉”,因此我们可以独立设置样式。
答案 3 :(得分:8)
接受的解决方案实际上不起作用。
您会注意到内容div
将等于其父级body
的高度。
因此,将body
高度设置为100%
会将其设置为等于浏览器窗口的高度。假设浏览器窗口的高度为768px
,通过将内容div
高度设置为100%
,div
的高度将依次为768px
。因此,最终标题div为150px
,内容div为768px
。最后,您将在页面底部下方显示内容150px
。如需其他解决方案,请查看this link.
答案 4 :(得分:6)
使用HTML5,您可以这样做:
CSS:
body, html{ width:100%; height:100%; padding: 0; margin: 0;}
header{ width:100%; height: 70px; }
section{ width: 100%; height: calc(100% - 70px);}
HTML:
<header>blabablalba </header>
<section> Content </section>
答案 5 :(得分:4)
您可以在min-height属性上使用vh。
min-height: 100vh;
您可以执行以下操作,具体取决于您使用边距的方式......
min-height: calc(100vh - 10px) //Considering you're using some 10px margin top on an outside element
答案 6 :(得分:2)
请让我在这里加5美分,并提供经典的解决方案:
html {height:100%;}
body {height:100%; margin:0;}
#idOuter {position:relative; width:100%; height:100%;}
#idHeader {position:absolute; left:0; right:0; border:solid 3px red;}
#idContent {position:absolute; overflow-y:scroll; left:0; right:0; border:solid 3px green;}
<div id="idOuter">
<div id="idHeader" style="height:30px; top:0;">Header section</div>
<div id="idContent" style="top:36px; bottom:0;">Content section</div>
</div>
这将在所有浏览器中运行,没有脚本,没有flex。在全页模式下打开代码段并调整浏览器大小:即使在全屏模式下,也可以保留所需的比例。
idHeader.height
和idContent.top
进行了调整,以包括边框,
如果未使用border,则应具有相同的值。除此以外
元素将拉出视口,因为计算出的宽度确实
不包括边框,边距和/或填充。left:0; right:0;
可以用width:100%
代替
原因,如果没有使用边框。padding-top
和/或
padding-bottom
属性为#idOuter
元素。为完成我的回答,这是页脚布局:
html {height:100%;}
body {height:100%; margin:0;}
#idOuter {position:relative; width:100%; height:100%;}
#idContent {position:absolute; overflow-y:scroll; left:0; right:0; border:solid 3px green;}
#idFooter {position:absolute; left:0; right:0; border:solid 3px blue;}
<div id="idOuter">
<div id="idContent" style="bottom:36px; top:0;">Content section</div>
<div id="idFooter" style="height:30px; bottom:0;">Footer section</div>
</div>
这是带有页眉和页脚的布局:
html {height:100%;}
body {height:100%; margin:0;}
#idOuter {position:relative; width:100%; height:100%;}
#idHeader {position:absolute; left:0; right:0; border:solid 3px red;}
#idContent {position:absolute; overflow-y:scroll; left:0; right:0; border:solid 3px green;}
#idFooter {position:absolute; left:0; right:0; border:solid 3px blue;}
<div id="idOuter">
<div id="idHeader" style="height:30px; top:0;">Header section</div>
<div id="idContent" style="top:36px; bottom:36px;">Content section</div>
<div id="idFooter" style="height:30px; bottom:0;">Footer section</div>
</div>
答案 7 :(得分:2)
对我来说,下一个效果很好:
我将标头和内容包装在div中
<div class="main-wrapper">
<div class="header">
</div>
<div class="content">
</div>
</div>
我用这个reference用flexbox填充了高度。 CSS像这样:
.main-wrapper {
display: flex;
flex-direction: column;
min-height: 100vh;
}
.header {
flex: 1;
}
.content {
flex: 1;
}
有关flexbox技术的详细信息,请访问reference
答案 8 :(得分:1)
接受的答案不起作用。最高投票的答案并不能回答实际问题。使用固定的像素高度标题,并在浏览器的剩余显示中填充,并滚动以进行功率流。这是一个使用绝对定位实际工作的解决方案。我还假设通过&#34;固定标题&#34;的声音已知标题的高度。在问题中。我在这里使用150px作为例子:
HTML:
state
CSS :(仅为视觉效果添加背景颜色)
<html>
<body>
<div id="Header">
</div>
<div id="Content">
</div>
</body>
</html>
要更详细地了解这是如何工作的,使用#Header
{
height: 150px;
width: 100%;
background-color: #ddd;
}
#Content
{
position: absolute;
width: 100%;
top: 150px;
bottom: 0;
background-color: #aaa;
overflow-y: scroll;
}
中的实际内容,使用引导行和列来查看此jsfiddle。
答案 9 :(得分:1)
在这种情况下,我希望我的主要内容div为液体高度,以便整个页面占据浏览器高度的100%。
height: 100vh;
答案 10 :(得分:1)
您还可以将父级设置为display: inline
。见http://codepen.io/tommymarshall/pen/cECyH
确保html和body的高度也设置为100%。
答案 11 :(得分:0)
除非您需要支持IE 9及更低版本,否则我会使用flexbox
body { display: flex; flex-direction: column; }
.header { height: 70px; }
.content { flex: 1 1 0 }
你还需要让身体填满整个页面
body, html{ width:100%; height:100%; padding: 0; margin: 0;}
答案 12 :(得分:0)
CSS PLaY | cross browser fixed header/footer/centered single column layout
CSS Frames, version 2: Example 2, specified width | 456 Berea Street
一个重要的事情是,虽然这听起来很简单,但是你的CSS文件中会有相当多的丑陋代码才能获得这样的效果。不幸的是,它确实是唯一的选择。
答案 13 :(得分:0)
非常简单:
#content {
max-height: 100%;
}
答案 14 :(得分:0)
#Header
{
width: 960px;
height: 150px;
}
#Content
{
min-height:100vh;
height: 100%;
width: 960px;
}
答案 15 :(得分:-1)
我到目前为止找到的最佳解决方案是在页面底部设置页脚元素,然后评估页脚偏移量与我们需要展开的元素之间的差异。 e.g。
<div id="contents"></div>
<div id="footer"></div>
#footer {
position: fixed;
bottom: 0;
width: 100%;
}
var contents = $('#contents');
var footer = $('#footer');
contents.css('height', (footer.offset().top - contents.offset().top) + 'px');
您可能还想更新每个窗口调整大小的内容元素的高度,所以......
$(window).on('resize', function() {
contents.css('height', (footer.offset().top -contents.offset().top) + 'px');
});
答案 16 :(得分:-3)
你尝试过这样的事吗?
CSS:
.content {
height: 100%;
display: block;
}
HTML:
<div class=".content">
<!-- Content goes here -->
</div>