Прижать футер к низу окна браузера
Иногда веб разработчикам сайтов требуется сделать так чтобы футер находился постоянно внизу страницы, т.е. прижимался к низу окна браузера. В данной статье мы покажем несколько вариантов решения. Пример HTML кода для нашей задачи:
Родитель на всю высоту окна height: 100%
Футер прижимается вниз за счет вытягивания блока контента и его родительских блоков на всю высоту height: 100% окна браузера и подъема футера вверх через отрицательный отступ margin-top: -100px для того чтобы не появлялся вертикальный скролл. В данном примере обязательно нужно указывать высоту подвала, которая должна быть равна значению отступа.
CSS код 1-го варианта:
Абсолютное позиционирование
Footer прижимается по абсолютному позиционированию от высоты родительских блоков (html, body и .wrapper), которая определена как 100%. При этом блоку .content следует определить нижний отступ, который должен быть равен или больше высоты подвала, иначе последний блок закроет часть контента.
CSS код 2-го варианта:
Имитация поведения таблицы display: table
Указав блоку .wrapper свойство таблицы, а блоку .content свойство строки таблицы (display: table и display: table-row) и когда блоку .content и всем его родительским элементам задана высота 100%, контент растянется на всю высоту экрана, за минусом высоты футера, которая определяется внутренним контентом.
CSS код 3-го варианта:
Использование CSS-функции calc()
100vh — высота окна браузера, а 100px — это высота футера. Функция calc() вычитает вторую величину из первой, в итоге футер прижимается к низу.
CSS код 4-го варианта:
Использование CSS свойства display: flex
Работает только в современных браузерах которые поддерживают это свойство
CSS код 5-го варианта:
- CSS / HTML
- FrontEnd (ФронтЭнд)
Как прижать footer к низу страницы
Задача прижать footer к низу окна браузера — это одна из самых часто встречаемых задач при верстке. В общем, ситуация следующая: на странице есть три области: шапка, основной контент и подвал. Бывают страницы, в которых основной контент занимает совсем немного места и, в итоге, они начинают выглядеть примерно вот так:
charset="utf-8"> rel="stylesheet" type="text/css" href="style.css" /> Прижать footer к низу class="wrapper"> Логотип и слоган class="wrapper"> Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore. Lorem ipsum Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor. class="wrapper"> © Copyright. All rights reserved
/* общие стили */ * < margin: 0; padding: 0; >body < font: 14px/1.2 Arial, sans-serif; color: #000; background: #eee; >.wrapper < max-width: 1000px; margin: 0 auto; >/* шапка */ header < box-sizing: border-box; height: 40px; padding: 10px; font-weight: bold; background: #fff; >/* основной контент */ body > .wrapper < overflow: hidden; margin-top: 20px; margin-bottom: 20px; >body > .wrapper > article, body > .wrapper > aside < box-sizing: border-box; padding: 10px; background: #fff; >body > .wrapper > article < float: left; width: 68%; >body > .wrapper > aside < float: right; width: 30%; >body > .wrapper > article > h1, body > .wrapper > article > p, body > .wrapper > aside > h2, body > .wrapper > aside > p < margin: 10px 0; >/* подвал */ footer
Нижняя часть сайта прижимается к контенту и внизу страницы остается пустое пространство. А теперь код CSS, который позволит решить проблему и прижать footer к низу окна браузера:
/* общие стили */ * < margin: 0; padding: 0; >html < /* прижать footer к низу */ position: relative; min-height: 100%; >body < font: 14px/1.2 Arial, sans-serif; color: #000; background: #eee; /* прижать footer к низу */ height: 100%; >.wrapper < max-width: 1000px; margin: 0 auto; >/* шапка */ header < box-sizing: border-box; height: 40px; padding: 10px; font-weight: bold; background: #fff; >/* основной контент */ body > .wrapper < overflow: hidden; margin-top: 20px; margin-bottom: 20px; /* прижать footer к низу */ padding-bottom: 40px; >body > .wrapper > article, body > .wrapper > aside < box-sizing: border-box; padding: 10px; background: #fff; >body > .wrapper > article < float: left; width: 68%; >body > .wrapper > aside < float: right; width: 30%; >body > .wrapper > article > h1, body > .wrapper > article > p, body > .wrapper > aside > h2, body > .wrapper > aside > p < margin: 10px 0; >/* подвал */ footer < box-sizing: border-box; height: 40px; padding: 10px; background: #fff; /* прижать footer к низу */ position: absolute; bottom: 0; width: 100%; >
Более современный способ прижать footer к низу окна браузера — использовать Flexbox:
Шапка Контент Подвал
html < height: 100%; >body < display: flex; flex-direction: column; min-height: 100%; margin: 0; >main
- CSS. Как работает z-index
- CSS-переходы и CSS-анимации
- Bootstrap 4. Горизонтельное меню «Navbar»
- Bootstrap 4. Навигация: ссылки, вкладки и кнопки
- Bootstrap 4. Компонент «Сообщения»
- Bootstrap 4. Компонент «Модальное окно»
- Bootstrap 4. Компонент «Карточка»
Как прижать footer к низу в bootstrap 3?
Footer в Bootstrap 3 прижать к нижней части сайта очень просто. Нужно изменить код на примерно такой:
добавили nav с классом navbar-fixed-bottom, который прижимает footer к нижней части сайта. И в стилях нужно внести небольшие изменения:
footer nav
Весь код будет выглядеть так: HTML
.header a, a:hover < color: #f0ad4e; text-decoration: none; >.header h1 < letter-spacing: 15px; font-size: 300%; >.header p < color: white !important; font-size: 90%; letter-spacing: 3px; >.nav-pills>li.active>a, .nav-pills>li.active>a:focus, .nav-pills>li.active>a:hover < color: #fff; background-color: #346270; >.nav-pills>li>a < color: #fff; >.nav-pills>li>a:hover < background-color: #346270; >.navbar-inverse < padding: 1%; border-radius: 0; >@media (max-width: 767px) < .nav-pills>li < float: none; >.nav-pills < text-align: center; >.header h1 < font-size: 280%; letter-spacing: 5px; >.header < text-align: center; >> .clear < clear: both; height: 63px; >.wrapper < min-height: 100%; >html, body < height: 100%; >.films_block < text-align: center; >.films_block img < margin-bottom: 5%; border-radius: 5px; border: solid 5px #dad7d5; width: 100%; >.film_label < padding: 2%; margin-bottom: 4%; >.margin-8 < margin-top: 8%; >.panel < border: none; >.panel-body < background-color: #f9f9f9; >.panel-info>.panel-heading < background-color: #f0ad4e; color: white; border-color: transparent; >.sidebar-header < font-size: 120%; letter-spacing: 2px; >.form-control < border-radius: 0px; >.input-lg < font-size: 14px; >footer nav < color: #666; background: #222; padding: 17px 0 18px 0; border-top: 1px solid #000; >footer a < color: #999; >footer a:hover
Прижимаем подвал к низу
Хорошим тоном является заполнение сайтом всей доступной области экрана браузера (как минимум по высоте для статичных по ширине дизайнов).
Часто при не прижатом подвале сайт смотрится странно |
Совсем другое дело, когда задумка дизайнера точно передана |
Решение
Для примера возьмем простую страницу, состоящую из двух основных блоков: основного (main) и подвала (footer). Сделаем чтобы основной блок занял всю площадь окна браузера независимо от количества контента, при этом футер прижмем к низу экрана так, чтобы в браузере не появилась вертикальная полоса прокрутки. Как делаем:
Шаг 1
Делаем 2 блока: основной (main) и подвал (footer). Основной контейнер растягиваем на всю высоту экрана браузера (min-height), подвалу жестко указываем высоту (height).

При этом общая высота сайта составит высота экрана + высота подвала.
Шаг 2
Отрицательным отступом (margin-top) «въезжаем» в основной блок, чтобы высота сайта составляла только 100% высоты экрана.

При таком расположении блоков и при достаточном количестве контента (например, текста) в основном блоке, возможны накладки контента в основном блоке на подвал:

Шаг 3
Для избежания этой потенциальной проблемы, добавляем в конец основного блока пустой блок, высотой не меньше высоты подвала (а лучше немного больше, чтобы был отступ между контентом и подвалом):

Теперь, если контента будет много, он будет двигать пустой блок вниз. А это будет опускать и подвал, не давая налезть на него контенту.
Смотрим как это выглядит в коде:
Футер прижат к низу Это основной блокЭто подвал
Заметка: при использовании блочной верстки и плавающих основных блоков (колонок) для .hFooter следует добавить clear: both, чтобы подвал расположился под колонками.:
.hFooter
Заметка 1: Если ты уже немного освоил CSS, тогда может возникнуть вопрос: » Зачем использовать дополнительный элемент, если можно воспользоваться padding-bottom?». Ответ — так просто его тут использовать нельзя, т.к. размер блока равен его ширине и высоте + сумме внутренних отступов + сумме толщин бордюров. Связка min-height: 100% и padding-bottom даст высоту сайта больше высоты экрана. В итоге даже при отсутствии контента вовсе, подвал будет за пределами «первого экрана». Как это можно обойти смотри ниже.
Заметка 2. В Opera версии 9.5 и выше при добавлении doctype этот пример не сработает. Варианты обхода:
-
добавить в основной тег-контейнер хотя бы один плавающий блок:
Это основной блокЭто подвал

Часто при не прижатом подвале сайт смотрится странно
Совсем другое дело, когда задумка дизайнера точно передана