Вот мой собственный ответ на основе flexbox, разработанный после еще нескольких исследований.
Я разместил фрагмент кода ниже, но изменить размер экрана в версии в этой скрипке легче, .
Я застрял на навигационной панели прокрутки в левой руке. средний столбец, который, казалось, не подчинялся обычным правилам установки max-height = 100% с помощью overflow-y = auto / scroll. Последним прорывом стала эта статья , которая решила для меня проблему переполнения страницы столбцом навигации и выталкивания нижнего колонтитула из поля зрения. [Хитрость заключается в том, чтобы переполнение = скрытое в родительском элементе flex!].
Я переписал макет, используя два гибких решения. Сгиб-оболочка дает три строки, а сгиб основной страницы дает столбцы в среднем ряду.
Чтобы получить подход с использованием небольшого стека, медиа-запрос используется для:
- удвоения высоты оболочки со 100vh (100% вертикальной высоты области просмотра) до 200vh,
- включить функцию стека в главной строке страницы
- сделать столбцы в этой строке шириной 100% для запуска переноса
- сделать столбцы в этой строке 50% высота, поэтому они фактически остаются такими же, как и раньше.
Важно: запустите полную страницу фрагмента, затем F12 и измените размер страницы, чтобы увидеть точку останова на ширине 750 пикселей.
html {
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
.wrapper,
html,
body {
height: 100vh;
max-height: 100vh;
margin: 0;
}
.wrapper {
display: flex;
flex-direction: column;
min-height: 100vh; /* Changes in media query to double this */
max-height: 100vh;
}
.page-main {
flex-grow: 1; /* can grow as big as needed */
overflow: hidden; /* The magic dust that is needed to make it scroll - see http://geon.github.io/programming/2016/02/24/flexbox-full-page-web-app-layout */
}
.page-header {
background-color: PaleGreen;
}
.page-footer {
background-color: MediumSpringGreen;
}
.page-content {
height: 100%;
width: 100%;
display: flex;
flex-direction: row;
}
#col1 {
background-color: MediumSeaGreen;
width: 30%;
}
#col2 {
background-color: ForestGreen;
flex-grow: 1;
}
#content {
height: 100%;
max-height: 100%;
background-color: silver;
}
#contentInner {
height: 100%;
min-height: 100%;
overflow-y: auto;
}
/* When we hit the small width breakpoint, double the height of the wrapper to 2 x vp height,
make the page content flex wrap, and make the page content columns 100% width to force the wrap. Also
noe make the page content columns 40% height to retain their original height now the patent is double height.
*/
@media screen and (max-width: 750px) {
.wrapper {
min-height: 200vh;
max-height: 200vh;
}
.page-content {
flex-wrap: wrap;
}
#col1 {
width: 100%;
height: 50%;
}
#col2 {
width: 100%;
height: 50%;
}
}
<div class="wrapper">
<header class="page-header">
This is the top line
</header>
<main class="page-main">
<div class='page-content'>
<div id='col1' class='col'>
<div id='content'>
<div id="contentInner">
<ul>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
<li>Menu Entry</li>
</ul>
</div>
</div>
</div>
<div id='col2' class='col'>
Preview content
</div>
</div>
</main>
<footer class="page-footer">
This is the footer
</footer>
</div>
Важно: запустите полную страницу фрагмента, затем F12 и измените размер страницы, чтобы увидеть точку останова на ширине 750 пикселей.