У меня есть webapp, с которым я использую flexbox для макета.
Я пытаюсь как заполнить экран (это приложение, не документ), так и, насколько это возможно, не указывать фиксированную ширину или высоту, поскольку контент может быть любым видом (полная компоновка жидкости! снилось!)
Итак, мне нужны высоты жидкости, верхние и нижние колонтитулы полной ширины, а затем основная панель в середине, заполняющая оставшееся вертикальное пространство, разделенное на столбцы, каждый из которых прокручивается, когда слишком высокий, и где ширина каждого непервичного столбец должен сжиматься, чтобы соответствовать его содержимому, и первичный столбец, который использует оставшееся пространство.
Я так близко, но мне приходилось прибегать к явным подбором неосновных столбцов - я считаю, что flex-basis: content;
должен это делать, но пока не поддерживается браузерами.
Здесь минимальная демонстрация, показывающая столбцы фиксированного размера:
var list = document.querySelector('ul')
for (var i = 0; i < 100; i++) {
var li = document.createElement('li')
li.textContent = i
list.appendChild(li)
}
html,
body {
height: 100%;
width: 100%;
margin: 0;
}
body {
display: flex;
flex-direction: column;
}
main {
display: flex;
flex-direction: row;
overflow: hidden;
}
main > section {
overflow-y: auto;
flex-basis: 10em;
/* Would be better if it were fluid width/shrink to fit, unsupported: */
/* flex-basis: content; */
}
main > section:last-child {
display: flex;
flex: auto;
flex-direction: column;
}
main > section:last-child > textarea {
flex: auto;
}
<header>
<h1>Heading</h1>
</header>
<main>
<section>
<h1>One</h1>
<ul>
</ul>
</section>
<section>
<h1>Two</h1>
</section>
<section>
<header>
<h1>Three</h1>
</header>
<textarea></textarea>
<footer>
<p>Footer</p>
</footer>
</section>
</main>
<footer>
<p>Footer</p>
</footer>