代码之家  ›  专栏  ›  技术社区  ›  AotN

Flexbox/Grid依赖于子百分比高度(Firefox/Edge)

  •  0
  • AotN  · 技术社区  · 7 年前

    我一直在试图从一个桌子布局到更现代的东西。我有一个布局,需要一个“固定”的页眉和一个粘性的页脚。为了实现这个目标,我决定稍微改变页面的工作方式,而不是让整个页面滚动,我创建了一个滚动div作为body/footer区域。这将使页眉保持在动态高度的顶部,同时模拟典型页面的滚动方式。

    但是,我在flexbox和grid中遇到了相同的问题。只要我没有任何基于百分比的子元素,布局就可以工作。如果有,则flexbox将根据子级调整大小。例如,如果其中一个子级中div的高度设置为100%,则它将显示div,但溢出后的任何其他内容和页脚都将显示在不适当的位置。这似乎有点违反直觉,我希望有人能解释背后的设计选择?是否有任何解决方法允许这种功能?

    我基本上认为flexbox系统可以填充剩余的空间(用于身体),但也可以根据需要扩展以包围所有的孩子。

    我写了一个简单的例子来说明我在说什么。请看下面,谢谢!

    编辑: 这似乎只发生在Firefox和Edge上,而不是Chrome上。

    html, body {
      height: 100%;
      width: 100%;
      margin: 0;
      padding: 0;
    }
    
    .container {
      display: inline-block;
      height: 100%;
      width: 50%;
      max-height: 100%;
      overflow: auto;
    }
    
    .bg {
      background-color: gray;
    }
    
    .span {
      width: 100%;
      height: 100%;
    }
    
    .flex {
      display: flex;
      flex-direction: column;
      min-height: 100%;
    }
    
    .flex > .main {
      flex: 1;
    }
    <div class="container">
      <div class="flex">
        <div class="main">
          <ul>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
          </ul>
        </div>
        <footer>
          This should be a sticky footer
        </footer>
      </div>
    </div><div class="container">
      <div class="flex">
        <div class="main">
          <div class="bg span">
            This breaks the page
          </div>
          <ul>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
            <li>This is a spacer</li>
          </ul>
        </div>
        <footer>
          This should be a sticky footer
        </footer>
      </div>
    </div>
    0 回复  |  直到 7 年前