Имеем следующий html-код:
<div id="wrapper"> <div id="header">Header</div> <div id="content">Content</div> <div id="footer">Footer</div> </div>
Вот что записываем в css:
- Элементам
htmlиbodyзадаёмheight: 100%;. - Элементу
wrapperзадаёмmin-height: 100%; position: relative;. - Элементу
footerзадаёмposition: absolute;. Из-за абсолютного позиционирования ширина блока автоматически изменилась наauto. Исправляем это с помощьюwidth: 100%;. Позиционируем блок внизу родительского элемента —bottom: 0;. Задаём блоку фиксированную высоту. - Чтобы
footerне налазил на содержимое блокаcontent, добавляем блокуcontentнижнийpaddingравный высоте блокаfooter.
Но сегодня я подсмотрел, на первый взгляд, более изящное решение. Вот готовый пример.
HTML-код:
<div id="wrapper"> <div id="header">Header</div> <div id="content">Content</div> </div> <div id="footer">Footer</div>
Вот что записываем в css:
- Как и в первом случае, элементам
htmlиbodyзадаёмheight: 100%;. - Элементу
wrapperзадаёмmin-height: 100%;, но на этот раз никак не позиционируем его. - Элементу footer задаём фиксированную высоту, а затем задаем ему отрицательный верхний margin равный высоте этого элемента.
- Как и в предыдущем примере чтобы
footerне налазил на содержимое блокаcontent, добавляем блокуcontentнижнийpaddingравный высоте блокаfooter.
Таким образом, мы избавились от лишнего позиционирования двух блоков. Оба способа кроссбраузерны.