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