当前位置: 首页 > 面试题库 >

使div(高度)占据父级剩余高度

简成仁
2023-03-14
问题内容

我有一个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标记: