要約すると、コンテナー内でコンテンツを垂直方向に配置する方法はほとんどありません。これらは主なアプローチです(今それを行うためのまったく異なる方法がある場合は、例を提供することは非常に寛大です-ここに組み込みます)
- プロパティの使用
position
- http://jsfiddle.net/EjV4V/3/これは素晴らしいですが、私にとっては、特にレンダリングの最適化の問題を考えると、少しやり過ぎです。最新のすべてのブラウザで動作しますが、IE7 では動作しません。transform
display: inline-block
補助ブロックを 1 つ追加してプロパティを使用する - http://jsfiddle.net/mmxm4/3/。追加の DOM 要素を使用しているため、このアプローチは適切ではないと思います。IE7 では動作しません。:before
また、コンテンツを使用または:after
生成できることにも言及する価値があります (これについて言及してくれた @nclenorton に感謝します) 。しかし、もう一度 - IE7 ではありません。- プロパティの使用
display: table
- http://jsfiddle.net/Ppk3p/2/。このアプローチが適切な場合もあれば、そうでない場合もあります。他の例とは対照的に、子セルの幅に問題があることに注意してください。いずれにせよ、IE7 では動作しません。display: table-cell
使用
display: box
- http://jsfiddle.net/9Phgg/9/ - これは物事を処理する最もセクシーな方法ですが、私たちが知っているように、仕様は 100% 完成していません。さらに、Opera はフレックス ボックスをサポートしていません。そして、もちろん、IE7 でこのようなことを試みることさえ考えないでください。私の質問は次のとおりです:「上記のアプローチのすべてが IE7 で失敗するという事実に関して、すべての最新のブラウザーとIE7 で要素を垂直方向に中央揃えする最も一般的で、エレガントで、シンプルで正しい方法は何ですか?」
ヘラス、2012 年ですが、テーブル レイアウトを使用することが解決策であると強く感じています。たとえば
position: absolute
、JavaScript 式を使用したエキゾチックなアプローチを見てきましたが、これはエレガントでシンプルとはほど遠いものです。
経験豊富な html 開発者の皆さん、間違っていたら訂正してください。
UPD: 実際には、もう 1 つのアプローチがありますが、根本的に間違っており、多くの理由で使用できないと思います。しかし、言及する価値があります。デフォルトでは、ボタン内のすべてが垂直方向の中央に配置されるため、http://jsfiddle.net/s5nz4/3/をご覧ください。これはIE7で機能しますが、私たちはここにいるすべての成人です。これが不適切であることを理解してください)))