使一个 div 填充剩余屏幕空间的高度

问:

我正在开发一个 Web 应用程序,我希望内容填满整个屏幕的高度。

该页面有一个标题,其中包含一个徽标和帐户信息。这可以是任意高度。我希望内容 div 将页面的其余部分填充到底部。

我有一个标题 div 和一个内容 div。目前我正在使用一个表格进行布局,如下所示:

CSS 和 HTML

#page { 高度:100%;宽度:100% } #tdcontent { 高度:100%; } #content { 溢出:自动; /* 或溢出:隐藏; */ } … …

页面的整个高度被填满,不需要滚动。

对于内容 div 中的任何内容,设置 top: 0; 会将其放在标题下方。有时内容将是一个真实的表格,其高度设置为 100%。将 header 放入 content 将不允许此操作。

有没有办法在不使用table的情况下达到同样的效果?

更新:

内容 div 中的元素也将高度设置为百分比。因此,div 内 100% 的内容会将其填充到底部。 50% 的两个元素也是如此。

更新 2:

例如,如果标题占据屏幕高度的 20%,则在 #content 内指定为 50% 的表格将占用 40% 的屏幕空间。到目前为止,将整个东西包装在一张桌子上是唯一有效的方法。

答1:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

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。对于 IE 10 或更早版本,您可以使用 FlexieJS shim。

要查看当前支持,您还可以在此处查看:http://caniuse.com/#feat=flexbox

工作示例

使用 flexbox,您可以轻松地在具有固定尺寸、内容尺寸尺寸或剩余空间尺寸的任何行或列之间切换。在我的示例中,我已将页眉设置为对齐其内容(根据 OPs 问题),我添加了一个页脚以显示如何添加固定高度的区域,然后设置内容区域以填充剩余空间。

html, 身体 { 高度:100%;边距:0; } .box { 显示:弹性;弹性流:列;高度:100%; } .box .row { 边框:1px 虚线灰色; } .box .row.header { 弹性:0 1 自动; /* 以上是 flex-grow: 0, flex-shrink: 1, flex-basis: auto */ } .box .row.content { flex: 1 1 auto; } .box .row.footer { 弹性:0 1 40px; } header (根据内容调整大小) content(填充剩余空间) footer(固定高度)

在上面的 CSS 中,flex 属性是 flex-grow、flex-shrink 和 flex-basis 属性的简写,以建立弹性项目的灵活性。 Mozilla 有一个 good introduction to the flexible boxes model。

为什么 box .row 中的 flex: 0 1 30px; 属性在每个 div 中都被覆盖?

这是 flexbox 的浏览器支持 - 很高兴看到所有绿色 - caniuse.com/#feat=flexbox

绝对这是一个非常好的方法,它几乎可以工作;)当 div.content 的内容超过原始的 flex-ed 高度时,会出现一个小问题。在当前的实现中,“页脚”将被推低,这不是开发人员所期望的;)所以我做了一个非常简单的修复。 jsfiddle.net/przemcio/xLhLuzf9/3 我在容器和溢出滚动上添加了额外的 flex。

具有透明度的导航栏不起作用。 rgba 中的 Alpha 通道完全没有效果,固定的页眉/页脚只能有纯色背景色。

所以要在 DOM 树中实现它,我需要将 height: 100% 从 body 到所有 div 设置为我需要的 div?

答2:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

在 CSS 中确实没有一种可靠的、跨浏览器的方式来做到这一点。假设您的布局很复杂,您需要使用 JavaScript 来设置元素的高度。您需要做的事情的本质是:

Element Height = Viewport height - element.offset.top - desired bottom margin

一旦您可以获取此值并设置元素的高度,您需要将事件处理程序附加到窗口 onload 和 onresize 以便您可以触发您的调整大小功能。

此外,假设您的内容可能大于视口,您将需要设置 overflow-y 来滚动。

这就是我所怀疑的。但是,该应用程序也可以在关闭 Javascript 的情况下工作,所以我想我会继续使用该表。

文森特,站稳脚跟的方式。我一直想做同样的事情,但用 css 似乎不可能?我不确定,但无论如何其他大量解决方案都没有按照您的描述进行。 javascript 是目前唯一可以正常工作的。

答3:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

原来的帖子是3年前的。我想很多像我一样来看这篇文章的人都在寻找类似应用程序的布局解决方案,比如以某种方式固定的页眉、页脚和占据其余屏幕的全高内容。如果是这样,这篇文章可能会有所帮助,它适用于 IE7+ 等。

http://blog.stevensanderson.com/2011/10/05/full-height-app-layouts-a-css-trick-to-make-it-easier/

以下是该帖子的一些片段:

@media screen { /* 屏幕规则开始。 / / 通用窗格规则 / body { margin: 0 } .row, .col { overflow: hidden;位置:绝对; } .row { 左:0;右:0; } .col { 顶部:0;底部:0; } .scroll-x { 溢出-x:自动; } .scroll-y { 溢出-y:自动; } .header.row { 高度:75px;顶部:0; } .body.row { 顶部:75px;底部:50px; } .footer.row { 高度:50px;底部:0; } / 屏幕结束规则。 */ } 我的标题 正文 我的页脚

这只有一个问题:页眉和页脚不是自动调整大小的。那是真正的困难,这就是为什么“这不可能”的答案目前在顶部...

答4:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

您可以使用 CSS 表格,而不是在标记中使用表格。

标记

    
    hello 
    there


(相关)CSS

body
{
    display:table;
    width:100%;
}
div
{
    display:table-row;
}
div+ div
{
    height:100%;  
}

FIDDLE1 和 FIDDLE2

这种方法的一些优点是:

  1. 少加价

  2. 标记比表格更具语义,因为这不是表格数据。

  3. 浏览器支持非常好:IE8+、所有现代浏览器和移动设备 (caniuse)

CSS 表格模型

table    { display: table }
tr       { display: table-row }
thead    { display: table-header-group }
tbody    { display: table-row-group }
tfoot    { display: table-footer-group }
col      { display: table-column }
colgroup { display: table-column-group }
td, th   { display: table-cell }
caption  { display: table-caption } 

答5:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

仅 CSS 方法(如果高度已知/固定)

当您希望中间元素垂直跨越整个页面时,您可以使用 CSS3 中引入的 calc()。

假设我们有一个 固定高度 header 和 footer 元素,并且我们希望 section 标记占据整个可用的垂直高度…

Demo

假定的标记和你的 CSS 应该是

html, 身体 { 高度:100%; } 标题 { 高度:100px;背景:灰色; } 部分 { 高度:计算 (100% - (100px + 150px)); /* 添加 100 像素的页眉和 150 像素的页脚 */ 背景:番茄; } 页脚 { 高度:150 像素;背景颜色:蓝色; } 100px 展开剩余空间 150px

所以在这里,我正在做的是,将元素的高度相加,而不是使用 calc() 函数从 100% 中扣除。

只需确保将 height: 100%; 用于父元素即可。

OP 说标题可以是任意高度。因此,如果您事先不知道高度,您将无法使用 calc :(

就我而言,height: calc( 100vh - ( 100px + 150px ) ); 效果很好。谢谢你的想法!

答6:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

使用:height: calc(100vh - 110px);

代码:

.header { 高度:60px;顶部:0;背景颜色:绿色} .body { 高度:计算(100vh - 110px); /50+60/ background-color: gray; } .footer { 高度:50px;底部:0; } 我的标题 正文 我的页脚

答7:

与HuntsBot一起,探索全球自由职业机会–huntsbot.com

一个简单的解决方案,使用 flexbox:

html, 身体 { 高度:100%; } 身体 { 显示:弹性;弹性方向:列; } .content { 弹性增长:1; } header

Codepen sample

An alternate solution, with a div centered within the content div

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

答8:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

在 CSS 中使用代表 view height 的 vh 怎么样?

查看我在下面为您创建的代码片段并运行它:

身体{填充:0;边距:0; } .full-height { 宽度:100px;高度:100vh;背景:红色; }

另外,请看下面我为您创建的图像:

https://i.stack.imgur.com/Oy7mP.jpg

仅当您希望 div 跨越窗口的整个高度时,这才很好。现在在其上方放置一个高度未知的标题 div。

答9:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

当内容太高时需要底部 div 滚动时,发布的解决方案都不起作用。这是在这种情况下有效的解决方案:

.table { 显示:表格; } .table-row { 显示:表行; } .table-cell { 显示:表格单元; } .container { 宽度:400px;高度:300px; } .header { 背景:青色; } .body { 背景:黄色;高度:100%; } .body-content-outer-wrapper { 高度:100%; } .body-content-inner-wrapper { 高度:100%;位置:相对;溢出:自动; } .body-content { 位置:绝对;顶部:0;底部:0;左:0;右:0; } 这是高度未知的表头 这是高度未知的表头 这是高度未知的表头 这是高度未知的可滚动内容 这是高度未知的可滚动内容 这是高度未知的可滚动内容 这是高度未知的可滚动内容 这是高度未知的可滚动内容 div> 这是高度未知的可滚动内容 这是高度未知的可滚动内容 这是高度未知的可滚动内容 这是高度未知的可滚动内容 这是滚动条le 高度未知的内容 这是高度未知的可滚动内容 这是高度未知的可滚动内容 这是可滚动内容高度未知 这是高度未知的可滚动内容 这是高度未知的可滚动内容 这是高度未知的可滚动内容is unknown 这是高度未知的可滚动内容 这是高度未知的可滚动内容

Original source: Filling the Remaining Height of a Container While Handling Overflow in CSS

JSFiddle live preview

答10:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

CSS3 简单方式

height: calc(100% - 10px); // 10px is height of your first div...

现在所有主流浏览器都支持它,所以如果您不需要支持老式浏览器,请继续。

答11:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

它可以完全由 CSS 使用 vh 完成:

#page {
    display:block; 
    width:100%; 
    height:95vh !important; 
    overflow:hidden;
}

#tdcontent {
    float:left; 
    width:100%; 
    display:block;
}

#content {      
    float:left; 
    width:100%; 
    height:100%; 
    display:block; 
    overflow:scroll;
}

和 HTML



   
   



我检查了一下,它适用于所有主流浏览器:Chrome、IE 和 FireFox

原文链接:https://www.huntsbot.com/qa/7Q3W/make-a-div-fill-the-height-of-the-remaining-screen-space?lang=zh_CN&from=csdn

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值