设置相对于父级父级的高度,但是拉伸父级

时间:2015-10-08 09:15:40

标签: html css dom

此HTML结构具有div#page,其中当前页面内容将通过Ajax加载。内容始终由section标记组成,这些标记可以具有动态高度(相对于浏览器的百分比)或静态高度(以像素为单位)。

div#page的高度应该调整,以便footer紧跟在最后div#page > section之后。

为了能够为div#page > section标签设置百分比值,我给div#page高度为100%。因此,它的DOM高度不会拉伸。

如果footer标记位于div#page内,则可行。这对我来说不是一个好的解决方案,因为页脚会被动态加载的页面内容覆盖。

是否有一些神奇的CSS解决方案可以正确拉伸div#page

body, html { margin: 0; padding: 0; }
#outer { background: red; position: absolute; width: 100%; height: 100%; }
#page { height: 100%; }

#page > section { background: #666; width: 100%; }
#page > section:nth-of-type(2n) { background: #333; }
#page > section:nth-of-type(1) { height: 100%; }
#page > section:nth-of-type(2) { height: 160px; }
#page > section:nth-of-type(3) { height: 220px; }
#page > section:nth-of-type(4) { height: 120px; }

footer { background: green; height: 160px; }
<div id="outer">

    <!-- The current page content will be loaded into this div. -->
    <div id="page">
      <section>Full height.</section>
      <section>Static height 1.</section>
      <section>Static height 2.</section>
      <section>Static height 3.</section>
    </div>

    <!-- The footer is static and therefore not inside of the #page div. -->
    <footer>
      Immediately after static height 3.
    </footer>
  </div>

2 个答案:

答案 0 :(得分:2)

如果你放弃#page div的高度并将第一个section设置为100vh我想它会按你的意愿工作,虽然只有较新的浏览器,但支持“ viewport“unit vh

浏览器支持:http://caniuse.com/#feat=viewport-units

  body, html { margin: 0; padding: 0; }
  #outer { background: red; position: absolute; width: 100%; height: 100%; }
  #page { }

  #page > section { background: #666; width: 100%; }
  #page > section:nth-of-type(2n) { background: #333; }
  #page > section:nth-of-type(1) { height: 100vh; }
  #page > section:nth-of-type(2) { height: 160px; }
  #page > section:nth-of-type(3) { height: 220px; }
  #page > section:nth-of-type(4) { height: 120px; }

  footer { background: green; height: 160px; }
<div id="outer">

    <!-- The current page content will be loaded into this div. -->
    <div id="page">
      <section>Full height.</section>
      <section>Static height 1.</section>
      <section>Static height 2.</section>
      <section>Static height 3.</section>
    </div>

    <!-- The footer is static and therefore not inside of the #page div. -->
    <footer>
      Immediately after static height 3.
    </footer>
  </div>

答案 1 :(得分:0)

您试图通过更改外部 div

的位置来解决此问题

body, html { margin: 0; padding: 0; }
  #outer { background: red; position: relative; width: 100%; height: auto; }
  #page { height: 100%; }

  #page > section { background: #666; width: 100%; }
  #page > section:nth-of-type(2n) { background: #333; }
  #page > section:nth-of-type(1) { height: 100%;background: red; }
  #page > section:nth-of-type(2) { height: 160px;background: yellow; }
  #page > section:nth-of-type(3) { height: 220px;background: aqua; }
  #page > section:nth-of-type(4) { height: 120px;background: darkblue; }

  footer { background: green; height: 160px; }

我已经包含了正常工作的演示代码,以便您可以按照您的预期检查出来。

<强> Demo Code you can check out