高さの既知のタイトルバーと高さの不明なコンテンツ領域を持つライトボックスのようなウィンドウを作成しようとしています。
フローティング疑似要素をvertical-align: middle
使用して、垂直方向の中央に配置しています。これは完全に機能します...ウィンドウの高さがビューポートの高さよりも小さい場合。
(CSSトリックからコピーして貼り付けたコード)
/* This parent can be any width and height */
.block {
text-align: center;
}
/* The ghost, nudged to maintain perfect centering */
.block:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -0.25em; /* Adjusts for spacing */
}
/* The element to be centered, can
also be of any width and height */
.centered {
display: inline-block;
vertical-align: middle;
width: 300px;
}
私の問題は、スクロールするコンテンツがビューポートよりも高くなったときに、ウィンドウの高さを制限し、垂直方向の中央揃えを維持する方法がわからないことです。
ウィンドウにタイトルバーと内部コンテンツ領域がない場合、これはウィンドウ要素にmax-height
とを適用することで簡単に実現できます。overflow: auto
しかし、私はタイトルバーが欲しいのですが、この画像のように、スクロールバーをウィンドウのコンテンツ領域にのみ表示したいと思います。
overflow: auto
コンテンツ領域に設定することはできますがmax-height
、パーセントで設定する(ユーザーのビューポートの高さを想定できないため、必要です)は無視されているようです。
このレイアウトはJSを使用せずに可能ですか?
これがで遊ぶデモです。ウィンドウはビューポートの下に溢れていますが、(ビューポートよりも短くするために)十分なコンテンツを削除すると、ウィンドウは垂直方向の中央に配置されます。