Chris Coyierは、2009年にここで見つけた最高のソリューションを投稿しました。コンテンツを垂直方向と水平方向に中央揃えにし、動的な高さ(ここに掲載されている他の回答は固定の高さに依存しますが、不必要に制限されます)と小さな画面のスクロールが可能になるため、これが最適だと思います。これは、モーダルポップアップを置き換える中央揃えのインラインフォームを作成するのに最適です。
そのコードをクリーンアップしてSassミックスインに変換したので、フォームの幅を簡単にカスタマイズできます(ヒント:フォーム要素の幅は中央のインラインフォーム内に制限されるため、フォーム要素のCSSと関連する変数をSassミックスインに追加します)。
jsFiddle
SCSS
html,
body,
form {
height: 100%;
margin: 0;
padding: 0;
}
@mixin CenteredInlineForm( $ContainerSetName, $formWidth) {
div.#{$ContainerSetName}_CenteredForm {
display: table;
overflow: hidden;
margin: 0 auto;
height: 100%;
width: #{($formWidth + 15)}px;
div.#{$ContainerSetName}_CenteredFormContentContainer {
display: table-cell;
vertical-align: middle;
div.#{$ContainerSetName}_CenteredFormContent {
background-color: lightgrey;
border: 3px solid darkgrey;
border-radius: 15px;
padding: 15px;
}
}
}
*:first-child + html div.#{$ContainerSetName}_CenteredForm {
position: relative;
}
/*ie6 Support: */
/* * html div.#{$ContainerSetName}_CenteredForm{position:relative;} */
*:first-child + html div.#{$ContainerSetName}_CenteredFormContentContainer {
position: absolute;
top: 50%;
}
/*ie6 Only: */
/* * html div.#{$ContainerSetName}_CenteredFormContentContainer{position:absolute;top:50%;} */
*:first-child + html div.#{$ContainerSetName}_CenteredFormContent {
position: relative;
top: -50%;
}
}
@include CenteredInlineForm(UserInfoInput, 400);
HTML
<div class="UserInfoInput_CenteredForm">
<div class="UserInfoInput_CenteredFormContentContainer">
<div class="UserInfoInput_CenteredFormContent">
<p>
Content or form labels/inputs
</p>
...
</div>
</div>
</div>