我有一个div
带两个孩子的容器。第一个孩子有给定的身高。如何让第二个孩子占据容器的“自由空间” div
而不给其指定高度?
在示例中,粉红色div
也应占据白色空间。
与此问题类似:如何使div占据剩余高度?
但是我不想摆 绝对的位置 。
可以通过多种方式扩展#down
子级以填充剩余的空间,#container
具体取决于您希望获得的浏览器支持以及是否#up
具有定义的高度。
样本
.container {
width: 100px;
height: 300px;
border: 1px solid red;
float: left;
}
.up {
background: green;
}
.down {
background: pink;
}
.grid.container {
display: grid;
grid-template-rows: 100px;
}
.flexbox.container {
display: flex;
flex-direction: column;
}
.flexbox.container .down {
flex-grow: 1;
}
.calc .up {
height: 100px;
}
.calc .down {
height: calc(100% - 100px);
}
.overflow.container {
overflow: hidden;
}
.overflow .down {
height: 100%;
}
<div class="grid container">
<div class="up">grid
<br />grid
<br />grid
<br />
</div>
<div class="down">grid
<br />grid
<br />grid
<br />
</div>
</div>
<div class="flexbox container">
<div class="up">flexbox
<br />flexbox
<br />flexbox
<br />
</div>
<div class="down">flexbox
<br />flexbox
<br />flexbox
<br />
</div>
</div>
<div class="calc container">
<div class="up">calc
<br />calc
<br />calc
<br />
</div>
<div class="down">calc
<br />calc
<br />calc
<br />
</div>
</div>
<div class="overflow container">
<div class="up">overflow
<br />overflow
<br />overflow
<br />
</div>
<div class="down">overflow
<br />overflow
<br />overflow
<br />
</div>
</div>
格网
CSS的grid
布局提供了另一种选择,尽管它可能不如Flexbox模型那么简单。但是,只需要设置容器元素的样式即可:
.container { display: grid; grid-template-rows: 100px }
所述grid-template-rows
定义的第一行作为固定100px的高度,并且保持行会自动拉伸以填充剩余的空间。
我非常确定IE11需要-ms-
前缀,因此请确保在希望支持的浏览器中验证html" target="_blank">功能。
弹性盒
现在,CSS3的灵活框布局模块(flexbox
)得到了很好的支持,并且可以非常容易地实现。由于它具有灵活性,因此即使在#up
没有定义的高度时也可以使用。
#container { display: flex; flex-direction: column; }
#down { flex-grow: 1; }
重要的是要注意,IE10和IE11对某些flexbox属性的支持可能会出现问题,而IE9或更低版本完全不支持。
计算高度
另一个简单的解决方案是使用CSS3calc
功能单元,正如Alvaro在他的回答中指出的那样,但是它要求第一个孩子的身高是一个已知值:
#up { height: 100px; }
#down { height: calc( 100% - 100px ); }
它得到了广泛的支持,唯一值得注意的例外是<= IE8或Safari 5(不支持)和IE9(部分支持)。其他一些问题包括将 calc 与_transform_ 或 box-shadow 结合使用,因此如果您担心此问题,请确保在多个浏览器中进行测试。
其他选择
如果需要较早的支持,则可以添加height:100%;
,#down
使粉红色div完全高出一个警告。因为#up
将其向下推,将导致容器溢出。
因此,您可以添加overflow: hidden;
到容器中以解决此问题。
或者,如果的高度#up
是固定的,则可以将其绝对放置在容器中,并在上添加padding-top #down
。
并且,另一个选择是使用表格显示:
#container { width: 300px; height: 300px; border: 1px solid red; display: table;}
#up { background: green; display: table-row; height: 0; }
#down { background: pink; display: table-row;}
http://jsfiddle.net/s8g4e/ 类似于这个问题:如何使div占据剩余高度? 但我不想给位置绝对。
问题内容: 我有这个问题,我有两个股利: 如何使div2占据页面的剩余高度? 问题答案: 使用绝对定位:
问题内容: 我正在一个Web应用程序上工作,我希望其中的内容能填满整个屏幕的高度。 该页面具有标题,其中包含徽标和帐户信息。这可以是任意高度。我希望内容div将页面的其余部分填充到底部。 我有一个标题和一个内容。目前,我正在使用表格进行布局,如下所示: CSS和HTML 页面的整个高度已填满,不需要滚动。 对于content div中的任何内容,设置将其放在标题的正下方。有时,内容将是一个实际表,
问题内容: 是否可以使包装器填充窗口高度(不滚动),并且可以使div滚动中心而不弄乱像素和javascript? 基本上,我希望页眉在顶部可见,而页脚在底部始终可见,并且在中心具有可滚动的内容,占据剩余的高度。 页眉,页脚和中心div的高度都是未知的(未设置px或%,即可变的字体大小或填充)。纯CSS可能吗? 问题答案: html, body {
问题内容: 我有一个容器div,我想至少拉伸到整个窗口的高度。如果容器div中有很多内容,我希望它可以扩展到大于窗口的高度。这可行。 在容器div中,我有一个图像。图片下方/下方,我有第二个div。我希望此嵌套div垂直拉伸以填充容器div的剩余空间。这行不通。 我试图用这张图来说明问题。我希望div以右图 左侧 所示的方式拉伸,而不是像 右图 右侧所示。 以下是我的代码。如您所见,在这段代码中,
我试图让id为的div作为列表项填充页面上的剩余高度。我对web开发前端相当陌生,尝试过几种不同的方法,但似乎都不起作用。 绿色边框的div是我想填充剩余高度的,也保持表单在上面。由于某种原因,窗口的整个高度已经有一个滚动条,我在想黑色/红色边框会一直到屏幕的底部,但也因为某种原因超过了它。关于如何解决这些问题有什么想法吗? HTML/CSS标记: