かなり長い間、私は明らかに間違った方法でアプローチしている特定のレイアウトの問題をいじっています。
基本的なコンポーネントに分解されたアプローチは次のとおりです。
<!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;
適用されていないことです。長くなると、inner
divがコンテナーと重なり、スクロールバーが表示されなくなります。some text...
inner
これがフィドルです:フィドル#1
ページ本体にスクロールバーを配置することを避け、代わりにinner
div内のスクロールバーによってオーバーフローを管理して、stretched
常に完全に見えるようにしたい.
同じトリックを div にも適用できますがposition: absolute; top: 0; ...
、inner
+ の高さをheader
明示的に指定する必要がsomeControls
あります。これは、すべてのページで異なるため、回避したいと考えています。
これは、私が望むように機能する方法です(一部を除くtop: 40px;
):フィドル#2
ここで何が間違っていますか?前もって感謝します!