我正在开发一个web应用程序,我希望内容能够填满整个屏幕的高度。
该页面有一个标题,其中包含徽标和帐户信息。这可以是任意高度。我希望contentdiv将页面的其余部分填充到底。
我有一个header div和一个content div。目前,我正在为布局使用一个表,如下所示:
CSS和HTML
#第页{高度:100%;宽度:100%}#td含量{高度:100%;}#内容{溢出:自动;/*或溢出:隐藏*/}<table id=“page”><tr><td id=“tdheader”><div id=“header”></分区></td></tr><tr><td id=“tdcontent”><div id=“content”></分区></td></tr></table>
页面的整个高度已填充,不需要滚动。
对于contentdiv中的任何内容,设置top:0;会把它放在标题下面。有时内容将是一个真实的表格,其高度设置为100%。将标题放在内容内不允许这样做。
有没有一种方法不使用桌子就能达到同样的效果?
更新:
contentdiv中的元素也将高度设置为百分比。因此,div中100%的内容将填充到底部。50%的两个元素也是如此。
更新2:
例如,如果标题占屏幕高度的20%,则在#内容内部指定50%的表将占屏幕空间的40%。到目前为止,把整个东西包在桌子里是唯一有效的方法。
编造外星人先生的想法。。。
这似乎是一个比支持CSS3的浏览器流行的灵活盒更干净的解决方案。
只需将min-height(而不是height)与calc()一起用于内容块。
calc()以100%开始,并减去页眉和页脚的高度(需要包含填充值)
使用“min-height”而不是“height”特别有用,因此它可以处理javascript渲染的内容和Angular2等JS框架。否则,一旦javascript呈现的内容可见,计算将不会将页脚推到页面底部。
这里是一个页眉和页脚的简单示例,两者都使用50px高度和20px填充。
Html:
<body>
<header></header>
<div class="content"></div>
<footer></footer>
</body>
Css:
.content {
min-height: calc(100% - (50px + 20px + 20px + 50px + 20px + 20px));
}
当然,数学可以简化,但你明白了。。。
免责声明:公认的答案给出了解决方案的想法,但我发现它有点臃肿,因为不必要的包装和css规则。下面是一个只有很少css规则的解决方案。
HTML 5
<body>
<header>Header with an arbitrary height</header>
<main>
This container will grow so as to take the remaining height
</main>
</body>
CSS
body {
display: flex;
flex-direction: column;
min-height: 100vh; /* body takes whole viewport's height */
}
main {
flex: 1; /* this will make the container take the free space */
}
上面的解决方案使用视口单元和flexbox,因此是IE10+,前提是您使用IE10的旧语法。
要使用的代码笔:指向代码笔的链接
或者这一个,对于那些需要主容器在内容溢出时可滚动的人:链接到codepen
原来的帖子是3年多前的。我想很多像我一样来这篇文章的人都在寻找一个类似于应用程序的布局解决方案,比如固定的页眉、页脚和占据其余屏幕的全高内容。如果是这样,这篇文章可能会有所帮助,它可以在IE7+等平台上运行。
http://blog.stevensanderson.com/2011/10/05/full-height-app-layouts-a-css-trick-to-make-it-easier/
下面是这篇文章的一些片段:
@媒体屏幕{/*屏幕开始规则。*//*通用窗格规则*/正文{边距:0}.row,.col{溢出:隐藏;位置:绝对;}.行{左:0;右:0;}.col{顶部:0;底部:0;}.soll-x{overflow-x:auto;}.soll-y{overflow-y:auto;}.header.row{height:75px;top:0;}.body.row{顶部:75px;底部:50px;}.footer.row{高度:50px;底部:0;}/*屏幕结束规则。*/}<div class=“header-row”style=“background:yellow;”><h2>我的页眉</h2></div><div class=“body row scroll-y”style=“background:lightblue;”><p>身体</p></div><div class=“footer row”style=“background:#e9e9e9;”>我的页脚</div>
我也有同样的问题,但我无法用上面的柔性箱解决问题。因此,我创建了自己的模板,其中包括:
具有固定大小元素的标头页脚带有滚动条的侧栏,占据剩余高度所容纳之物
我使用了flexbox,但方法更简单,只使用了财产display:flex和flex-direction:row|column:
我确实使用了angular,我希望我的组件大小是它们的父元素的100%。
关键是为所有父母设置大小(以百分比为单位),以限制他们的大小。在以下示例中,myapp高度占视口的100%。
主组件占视口的90%,因为页眉和页脚占5%。
我在这里发布了我的模板:https://jsfiddle.net/abreneliere/mrjh6y2e/3
body{
margin: 0;
color: white;
height: 100%;
}
div#myapp
{
display: flex;
flex-direction: column;
background-color: red; /* <-- painful color for your eyes ! */
height: 100%; /* <-- if you remove this line, myapp has no limited height */
}
div#main /* parent div for sidebar and content */
{
display: flex;
width: 100%;
height: 90%;
}
div#header {
background-color: #333;
height: 5%;
}
div#footer {
background-color: #222;
height: 5%;
}
div#sidebar {
background-color: #666;
width: 20%;
overflow-y: auto;
}
div#content {
background-color: #888;
width: 80%;
overflow-y: auto;
}
div.fized_size_element {
background-color: #AAA;
display: block;
width: 100px;
height: 50px;
margin: 5px;
}
Html:
<body>
<div id="myapp">
<div id="header">
HEADER
<div class="fized_size_element"></div>
</div>
<div id="main">
<div id="sidebar">
SIDEBAR
<div class="fized_size_element"></div>
<div class="fized_size_element"></div>
<div class="fized_size_element"></div>
<div class="fized_size_element"></div>
<div class="fized_size_element"></div>
<div class="fized_size_element"></div>
<div class="fized_size_element"></div>
<div class="fized_size_element"></div>
</div>
<div id="content">
CONTENT
</div>
</div>
<div id="footer">
FOOTER
</div>
</div>
</body>