可変の高さのコンテンツを垂直方向および水平方向に中央に配置するための最も効率的な(またはエレガントな)方法を探しています。私はこれを思いついた:http://cssdeck.com/t/2veysdkg/16、これはcssテーブルを使用してメインコンテンツを垂直方向に中央揃えにします。
この特定のコードを書くための私の要求は次のとおりです。
- 可変幅および固定幅のコンテンツを垂直方向および水平方向に中央揃えできる必要があります
- 中央揃えのコンテンツは、通常のドキュメントフロー内にある必要があります(重複しないように)
- スティッキーフッターと通常のヘッダー、どちらも幅100%
- ハック、醜いコード、または非セマンティックHTMLを可能な限り少なくする
- IE6、IE7のサポートについては気にしませんでした(それらには別のスタイルシートを使用します)
display:table-row
奇妙なことに、上記の要求は、ヘッダーとフッターがに設定され、body-tagがに設定されている場合にのみ満たされdisplay:table
ます。私が理解しているように、親テーブル要素が欠落している場合、cssは匿名テーブル要素を生成するため、これは奇妙です。したがってdisplay:table-cell
、周囲のすべての要素がなくても機能するはずですが、それでも私はそれを機能させることができませんでした。
自分次第だとしたら、bodyタグの表示モードを台無しにせず、ヘッダーとフッターをオンのままにしておきdisplay:block
ます。しかし、私はそれを機能させることができませんでした。なぜこれが機能しないのか、そしてとを使用せずに上記の要求を満たす方法を誰かが理解していますdisplay:table
かdisplay:table-row
?
cssdeckにアクセスして私のソースコードを表示したくない場合は、ここに投稿します。
HTML
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Vertical Centering</title>
</head>
<body>
<div id="header">header</div>
<div id="vertical">
<div id="horizontal">content</div>
</div>
<div id="footer">footer</div>
</body>
</html>
CSS
body, html {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
body {
display: table;
}
#header {
display: table-row;
height: 2em;
background: gray;
}
#vertical {
display: table-cell;
vertical-align: middle;
width: 100%;
height: 100%;
}
#horizontal {
height: 500px;
width: 500px;
margin: auto;
background: gray;
}
#footer {
height: 2em;
display: table-row;
width: 100%;
background: gray;
}