2014 ОБНОВЛЕНИЕ : современный способ решения этой проблемы макета - использовать flexbox
модель CSS .Он поддерживается всеми основными браузерами и IE11 +.
2012: правильный способ сделать это только с помощью CSS - использовать display: table
и display: table-row
.Это , поддерживаемый всеми основными браузерами , начиная с IE8.Это не с использованием таблиц для отображения.Вы будете использовать div:
html, body {
height: 100%;
margin: 0;
}
.wrapper {
display: table;
height: 100%;
width: 100%;
background: yellow; /* just to make sure nothing bleeds */
}
.header {
display: table-row;
background: gray;
}
.content {
display: table-row; /* height is dynamic, and will expand... */
height: 100%; /* ...as content is added (won't scroll) */
background: turquoise;
}
.footer {
display: table-row;
background: lightgray;
}
<div class="wrapper">
<div class="header">
<h1>Header</h1>
<p>Header of variable height</p>
</div>
<div class="content">
<h2>Content that expands in height dynamically to adjust for new content</h2>
Content height will initially be the remaining
height in its container (<code>.wrapper</code>).
<!-- p style="font-size: 4000%">Tall content</p -->
</div>
<div class="footer">
<h3>Sticky footer</h3>
<p>Footer of variable height</p>
</div>
</div>
Вот и все.Дивы обернуты, как и следовало ожидать.