让一个 div 占据剩余屏幕空间的高度
让一个 div 占据剩余屏幕空间的高度
我正在开发一个网络应用程序,希望内容填满整个屏幕的高度。
该页面有一个包含标志和账户信息的头部,其高度可以是任意的。我希望内容div能填满余下的页面到底部。
我有一个头部div和一个内容div。目前我正在使用表格进行布局,如下所示:
CSS和HTML
#page { height: 100%; width: 100% } #tdcontent { height: 100%; } #content { overflow: auto; /* or overflow: hidden; */ }
... |
... |
页面的整个高度都被填满,不需要滚动。
对于内容div内的任何内容,将top:0;
设置为将其放置在导航栏的下方。有时内容将是一个真正的表格,其高度设置为100%。将头部放在内容中将不允许此功能正常工作。
有没有一种方法可以在不使用表格的情况下实现相同的效果?
更新:
内容div内的元素也将设置为百分比的高度。因此,在div
内部的100%内容将填充到底部。两个元素在50%时也是如此。
更新2:
例如,如果头部占屏幕高度的20%,则在#content
内指定的50%表格将占用屏幕空间的40%。到目前为止,将整个内容包装在表格中是唯一有效的方式。
2015 更新: flexbox方法
有两个其他的答案简要提到了flexbox; 然而,那是两年多以前的事了,它们没有提供任何例子。现在flexbox的规格已经安定了。
注意: 虽然CSS灵活盒布局规格处于候选推荐阶段,但并非所有浏览器都实现了该规格。WebKit实现必须加上前缀-webkit-; 之前的Internet Explorer实现了旧版本的规格,带有-ms-前缀; Opera 12.10实现了最新版本的规格,没有前缀。查看每个属性的兼容性表以获取最新的兼容性状态。
(摘自https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes)
所有主要浏览器和IE11+都支持Flexbox。对于IE10或更早的版本,您可以使用FlexieJS shim。
您还可以在此处查看当前的支持情况:
http://caniuse.com/#feat=flexbox
工作示例
使用flexbox,您可以轻松地在任何行或列之间切换,无论其是具有固定维度、按内容大小调整维度还是剩余空间维度。在我的例子中,我已经设置标题根据其内容自适应大小(根据OP的问题),我添加了一个底部展示如何添加固定高度区域,然后将内容区域设置为填满剩余空间。
html, body { height: 100%; margin: 0; } .box { display: flex; flex-flow: column; height: 100%; } .box .row { border: 1px dotted grey; } .box .row.header { flex: 0 1 auto; /* The above is shorthand for: flex-grow: 0, flex-shrink: 1, flex-basis: auto */ } .box .row.content { flex: 1 1 auto; } .box .row.footer { flex: 0 1 40px; }
header (sized to content)
content (fills remaining space)
footer (fixed height)
在上面的CSS中,flex 属性缩写了 flex-grow、flex-shrink 和 flex-basis 属性,以确定 flex 项目的灵活性。Mozilla 有一个关于弹性盒模型的很好的介绍。