Имеем следующий 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
.
Таким образом, мы избавились от лишнего позиционирования двух блоков. Оба способа кроссбраузерны.
к сожалению не кроссбраузерно, в IE7 не работает
ОтветитьУдалитьВы ошибаетесь. Оба примера работаю не только в IE7, но и в IE6.
ОтветитьУдалить