基本的に達成する必要があるのは、親の高さの100%を消費し、コンテンツの高さが高い場合はスクロールを表示する要素(div、span、tableなど)を用意することです。
問題は、癖のあるchromeとIEだけがで問題なく動作することですheight:100%; overflow: auto;
。標準のFirefox、Opera、IE(IE 7以降、「標準」)はオーバーフローを無視し、html要素を親サイズより下に拡大します。固定の高さを設定しても機能しますが、レンダリングする前に使用可能な高さを決定できない場合、複数の可能な値があります。
簡略化された例(この場合はjsFiddle):
<body>
<div id="parent">
<table id='container'>
<tr>
<td>
<div id='element-in-question'>
<!--Content long enough to stretch the div-->
</div>
</td>
</tr>
<tr>
<td id='footer-cell'>
<div id='footer'>I'm footer<div>
</td>
</tr>
</table>
</div>
</body>
Css:
#parent { height:500px; width:500px; position:absolute; }
#container { height: 100%; width:100%; }
#element-in-question { height:100%; width:100%; overflow: auto; }
#footer-cell { height:30px;}
#footer { height: 30px; }
実際のアプリでは、これらすべてがiframeで実行され、テーブルはヘッダーやフッターなどをレンダリングするために使用されます。テーブルの使用をやめることを提案しないでください。これは、注意が必要な100以上の場所があるレガシーアプリケーションです。CSSのみのソリューションが理想的です。
もう1つのポイント:Chrome、IE10標準モードで動作するはずです。FF、Opera、Safariはサポートされていません。IE9以下では処理が異なります。
更新:高さが異なる約10個のフッターがあります。理想的には、ソリューションは固定フッターの高さに依存しないようにする必要があります。