Как правильно прижать «footer» к низу страницы в IE
Опубликовано: 6 февраля, 2009 | Рубрика: Кодинг | Тэги: footer внизу страницы, баги, кодинг, причуды IE | 20 Комментариев »Думаю, что для многих web-дизайнеров уже не составляет труда сверстать страницу, где «подвал» будет прижат к её нижней границе. Вот метод который использую я, подсмотренный уже не помню где.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style type="text/css"> *{ margin:0; padding:0; } html {height: 100%;} body {height:auto !important; min-height:100%; height:100%; position:relative; } #content { background:#ccc;} #footer {position:absolute; bottom:0; width:100%; background:red} </style> </head> <body> <div id="content"> <p>Содержимое сайта</p> </div> <div id="footer"> «Подвал» сайта прижатый к низу </div> </body> </html> |
Итак, несколько пояснений для новичков: для начала уберём (обнулим) все лишние отступы.
* { margin:0; padding:0;}Далее укажем, что высота html должна быть 100% от высоты браузера.
html {height: 100%;}Для body устанавливаем высоту равную высоте содержимого страницы, но как минимум это должно составлять 100%. А также зададим относительное позиционирование для body, ведь именно относительно него будет позиционироваться “подвал”.
body {height:auto !important; min-height:100%; height:100%; position:relative; }Вот эта строка {height:auto !important; min-height:100%; height:100%;} может кого-то из новичков запутать, но ничего страшного тут нет. В Internet Explorer, height работает также как в нормальных браузерах min-height. Правило !important, опять же, повысит приоритет стилевого параметра для тех браузеров, которые его понимают, а IE обработает последнее, указанное в конструкции. Это ещё один весёлый такой «косяк» всенародного браузера от Microsoft.
В вышеописанной конструкции мы его используем просто как трюк для сокращения записи. Вообще-то, я всё же рекомендую выносить стилевые правила для IE в отдельный css-файл, подключенный с помощью “сonditional comments”.
Наконец, задаём абсолютное позиционирование для подвала и указываем координаты.
#footer {position:absolute; bottom:0;}Вроде ничего сложного. Однако, как всегда есть некоторые нюансы.
Итак, после того как была расчитана высота документа «подвал» был отрисован точно в том месте, где мы указали. Но, предположим, на странице есть динамическое содержимое, которое отображается уже после того, как страница была сформирована браузером, что довольно частый случай.
В этом случае, всеми любимый Internet Explorer добавит динамическое содержимое, но высоту документа пересчитывать не станет и позиция «подвала» не изменится, а значит содержимое «провалится».
Для того чтобы этого избежать, нам понадобится дополнительный блок между содержимым и «подвалом», который будет как бы толкать его вниз страницы при изменении содержимого.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | < !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style type="text/css"> * { margin:0; padding:0; } html {height: 100%;} body {height:auto !important; min-height:100%; height:100%; position:relative;} #content { background:#ccc;} #footer {position:absolute; bottom:0; width:100%; background:red} #dynamic-block {width:100%; height:800px; display:none; background:green; } #pusher {clear:left; float:left; height:0; } </style> </head> <body> <div id="content"> <p>Содержимое сайта <a href="#" onclick="document.getElementById('dynamic-block').style.display = 'block';"> показать скрытый блок </a></p> <div id="dynamic-block"></div> </div> <div id="pusher"></div> <div id="footer"> «Подвал» сайта прижатый к низу </div> </body> </html> |
Признаться, решение этой проблемы было найдено мною давно методом «тыка». Поведение IE всегда было большой загадкой, то или иное решения чаще подсказывает интуиция, и не поддаётся какому-либо логичному объяснению. Хотя, если у вас есть обоснование решения описанной проблемы, пишите свои мысли в комментариях, с удовольствием почитаю.


Суперовый метод, спасибо огромное, очень помогло…я удивился, что есть всё таки решение для IE6…. ещё раз 10х))
Ну вот да действительно работает, НО, вы измените окно браузера, сделайте его поменьше, и посмотрите что будет, футер будет только в видимой части окна, если документ скролить вправо, то его не видно дальше, и такая проблема у большинства сайтов, сверстанных на дивах, и что тут делать? ява скрипт применять?
Скопировал и вставил в документ, в FF нормально работает, в IE 7 footer находится не в самом низу, если текст большой
http://vk.osvita.org.ua/footer.htm вот этот метод попробуйте
[b]ouea[/b], такой проблемы не наблюдаю. Увеличил шрифт свойствами css, затем свойствами браузера, «подвал» всё равно чётко прижат книзу.
Макс, интересное решение, надо будет потестить на предмет всяких неожиданностей.
Спасибо большое!!!
))
)
потратил море времени пока не наткнулся здесь на решение
Роман! Потрясающее решение. Но не для всякого динамического содержание это помогает, что ли…
Есть сайт – он использует выезжающюю панель на jQuery – и когда она выдвигается то содержимое все равно наезжает на футер.
может быть есть какое то решение для этой ситуации?
вот сайт zpmer.ru
Спасибо.
Piombo, попробуйте включить для блока с id=comContainer свойство hasLayout
Приветствую! Да так заработало, спасибо огромное! Правда не все указания на hasLayout одинаково полезны. У меня display:inline-block не заработало, получилось только при явном указании height:1%;
Piombo, я обычно применяю более безопасный метод zoom:1
Ну он не валидный вроде… Да и height:1%; у меня тока для ie6 применен…
В топку этот IE6… кто-нибудь вообще им еще пользуется?
К сожалению, да. Если верить статистике http://marketshare.hitslink.com/browser-market-share.aspx?qprid=2, то более 20% пользователей всё ещё используют этого “уродца”. Слишком ещё высокий показатель, чтобы отказываться от его поддержки.
Как ни странно (Если верить GA) из всех посититиелей zpmer.ru – пользователей ie6 15-20%
Добавлю…. оч. вероятно, что допустим на webcocktail.ru ie6 не ходят из-за специфики… но у меня именно так.
15-20% все же не мало…………
Вот ещё вариант, работает во всех браузерах: http://webkev.com/2010/02/13/futer-vnizu-stranicy-mytarstva-zakoncheny/
K_E_V_in , а чем ваш вариант отличается от моего??
Лучше строку
body {height:auto !important; min-height:100%; height:100%; position:relative;}
заменить на
body {height:auto !important; min-height:99.9%; height:99.9%; position:relative;}
Это избавит от появления полосы прокрутки, когда ее быть не должно.