Могу предложить стандартное решение для XHTML, проверенно работающее в большинстве браузеров:
Вот HTML код body:
- Код: Выделить всё
<body>
<div id="wrapper">
<p>Здесь твой контент</p>
<div id="push"></div>
</div>
<div id="footer"><p>Это подвал</p></div>
</body>
Т.е. весь контент размещается в wrapper, а подвал соответственно в footer. push всегда пустой, он нужен в том случае, когда контент заполняет всю страницу и push накладывается на footer
А это CSS:
- Код: Выделить всё
<style type="text/css">
/* <![CDATA[ */
* {
margin: 0;
}
html, body {
height: 100%;
}
#wrapper {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -4em;
}
#footer, #push {
height: 4em;
}
/* ]]> */
</style>
Суть данного подхода довольно проста, как и все гениальное . wrapper растягивается на весь body, при этом задается отрицательный отступ, равный высоте footer, а для push и footer явно задается одинаковая высота.