Все родительские элементы, которые занимают оставшуюся высоту области просмотра, должны иметь высоту 100%
.В начальной загрузке используйте h-100
.
Ближайший родительский элемент этих элементов должен быть flex
и должен иметь flex-direction: column
.В начальной загрузке используйте d-flex
и flex-column
.Некоторые classes
, такие как row
, уже flex
, поэтому не используйте d-flex
.
- Используйте
flex-grow-1
для элемента, который занимает оставшуюся высоту.Опять же, некоторые classes
, такие как col
, имеют flex-grow:1
.
Bootstrap flex классы
html,
body {
height: 100%;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" />
<div class="d-flex flex-column h-100">
<div class="py-3 bg-danger">
</div>
<div class="py-3 bg-danger">
</div>
<div class="flex-grow-1 bg-primary">
</div>
</div>
Сетка начальной загрузки
html,
body {
height: 100%;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet"/>
<div class="fluid-container h-100">
<div class="row flex-column h-100">
<div class="col-auto py-3 bg-danger">
</div>
<div class="col-auto py-3 bg-success">
</div>
<div class="col bg-primary">
</div>
</div>
</div>
Теперь div.col
/ div.flex-grow-1
занимает оставшуюся высоту области просмотра.Однако, если высота их содержимого больше, чем у viewport
, они этого не сделают: их высота равна высоте их содержимого.Если вы хотите сделать его прокручиваемым, используйте overflow: auto
.Я думаю, у bootstrap-4 нет класса ни для одного из свойств overflow
.Таким образом, вы должны использовать пользовательские CSS.
https://codepen.io/anon/pen/JwWpgQ
В качестве примечания: если вы хотите, чтобы нижний колонтитул находился внизу , используйте эти методы, но поменяйте местами col
col-auto
Если вы хотите, чтобы несколько элементов можно было прокручивать отдельно, используйте overflow-auto
и h-100
для этих элементов.
html,
body {
height: 100%;
}
.overflow-auto {
overflow: auto;
}
.h-200vh {
height: 200vh;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" />
<div class="fluid-container h-100">
<div class="row flex-column h-100">
<div class="col-auto py-3 bg-danger">
</div>
<div class="col-auto py-3 bg-success">
</div>
<div class="col bg-dark d-flex">
<div class="w-50 h-100 overflow-auto">
<div class="bg-danger h-200vh"></div>
</div>
<div class="w-50 overflow-auto h-100">
<div class="bg-primary h-200vh"></div>
</div>
</div>
</div>
</div>
https://codepen.io/anon/pen/QzpQRO
Вывод:
Используйте загрузочную сетку, как обычно, но используйте flex-column
on row
и col
для элемента, который занимает всю оставшуюся высоту области просмотра.Если вы хотите сделать его прокручиваемым, используйте специальный CSS, чтобы применить overflow:auto
.
Комментарий, если у вас есть какие-либо вопросы, и я отвечу.Я решил твои проблемы, но я не буду публиковать их, потому что я думаю, что лучше всего сначала попробовать.
Обновление
Это мое решение.https://codepen.io/anon/pen/Jwrzwm