Введение
Проблема до CSS3
position: sticky
Решение с Flexbox
flex-grow
flex
main
Пример реализации
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sticky Footer Example</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="container">
<header>Header Content</header>
<main>Main Content</main>
<footer>Footer Content</footer>
</div>
</body>
</html>
CSS:
html, body {
height: 100%;
margin: 0;
}
.container {
display: flex;
flex-direction: column;
min-height: 100vh;
}
header {
background: #f8f9fa;
padding: 1rem;
text-align: center;
}
main {
flex: 1;
background: #e9ecef;
padding: 1rem;
}
footer {
background: #dee2e6;
padding: 1rem;
text-align: center;
flex-shrink: 0;
}
Объяснение
HTML : Основная структура документа включает контейнер с элементами header
, main
и footer
. CSS : html, body
: Задаем высоту 100% и убираем отступы, чтобы контейнер занимал всю высоту экрана. .container
: Используем Flexbox, задаем вертикальное направление ( flex-direction: column
) и минимальную высоту 100vh, чтобы контейнер занимал всю высоту окна. main
: Устанавливаем flex: 1
, что эквивалентно flex-grow: 1
, позволяя основному содержимому занимать все доступное пространство. footer
: Устанавливаем flex-shrink: 0
, чтобы футер не уменьшался при недостатке места.