Есть несколько способов сделать это. Давайте начнем с самого простого метода.
Если установлена высота нижнего колонтитула (не изменится, независимо от ширины браузера или содержимого нижнего колонтитула), вы можете использовать отрицательное поле для нижнего колонтитула.
Давайте возьмем эту HTML-структуру в качестве примера:
<body>
<div class="container">
<div class="content"></div>
<div class="footer"></div>
</div>
</body>
html,
body {
height: 100%; // First we set the height to make sure the body is always atleast big enough
}
.container {
min-height: 100%; // The container will always be 100% height at minimum;
}
.content {
padding-bottom: 100px; // This is set to the footer height
}
.footer {
height: 100px; // The footer has a set width
margin-bottom: -100px; // We move the footer in the negative space that was created by the padding
}
Рекомендуется:
Немного сложнее становится, когда высота нижнего колонтитула не установлена. Скорее всего, так и будет, так как ваш сайт может быть адаптивным.
В этом случае мы будем использовать flexbox .
html,
body {
height: 100%;
margin: 0;
}
.container{
display: flex;
flex-direction: column;
height: 100vh;
}
.content {
background: gray;
flex: 1 0 auto;
}
.footer {
background: blue;
height: 30px;
flex-shrink: 0;
}
<div class="container">
<div class="content"></div>
<div class="footer"></div>
</div>
Мы устанавливаем контейнер на flex
. Дочерние элементы в гибком контейнере «растут», чтобы заполнить их родительский элемент. Мы устанавливаем flex на column
, чтобы отображать их под друг другом, а не рядом друг с другом. Этот контейнер установлен на 100vh
. vh
означает «Высота окна просмотра» или высоту окна.
Содержание установлено на flex: 1 0 auto
. Это позволит ему расти 1
, но не уменьшаться 0
, а его размер будет auto
Нижний колонтитул никогда не должен уменьшаться flex-shrink: 0
, независимо от размера другого содержимого.
Вы также можете взглянуть на css grid . Однако, так как я предполагаю, что вы немного новичок в этом, я рекомендую придерживаться flex сейчас! Flexbox замечательно, когда вы понимаете, на что он способен.