かなり長い間、私は明らかに間違った方法でアプローチしている特定のレイアウトの問題をいじっています。
基本的なコンポーネントに分解されたアプローチは次のとおりです。
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div class="stretched">
<div class="header">SOME HEADER</div>
<div class="someControls">
<input type="button" value="click me"/>
<input type="button" value="no me"/>
</div>
<div class="inner">
some text...
</div>
</div>
</body>
</html>
次のCSSを使用:
.stretched {
position:absolute;
height:auto;
bottom: 0;
top: 0;
left: 0;
right: 0;
width: 250px;
margin: 30px auto 20px;
background-color: green;
}
.inner {
margin:10px;
background-color: red;
overflow: auto;
}
私がやろうとしているのは、stretched利用可能なすべての垂直方向のビューポート スペース (ヘッダーとフッターの上下数ピクセルを差し引いたもの) を利用して div を作成し、水平方向に固定して中央に配置することです。
これはかなりうまくいくようです。問題は、プロパティがコンテンツにoverflow: auto;適用されていないことです。長くなると、innerdivがコンテナーと重なり、スクロールバーが表示されなくなります。some text...inner
これがフィドルです:フィドル#1
ページ本体にスクロールバーを配置することを避け、代わりにinnerdiv内のスクロールバーによってオーバーフローを管理して、stretched常に完全に見えるようにしたい.
同じトリックを div にも適用できますがposition: absolute; top: 0; ...、inner+ の高さをheader明示的に指定する必要がsomeControlsあります。これは、すべてのページで異なるため、回避したいと考えています。
これは、私が望むように機能する方法です(一部を除くtop: 40px;):フィドル#2
ここで何が間違っていますか?前もって感謝します!