Flexbox / Grid зависит от процентной высоты дочернего элемента (Firefox / Edge) - PullRequest
0 голосов
/ 18 сентября 2018

Я пытался перейти от сервировки стола к чему-то более современному.У меня есть макет, который требует «фиксированный» заголовок и липкий нижний колонтитул.Чтобы добиться этого, я решил немного изменить работу страницы, вместо того, чтобы позволить прокрутить всю страницу, я создал прокручиваемый 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>
...