Css での垂直方向の配置は、楽しくてつらいトピックです。このstackoverflow questonは、垂直方向の配置が非常に苦痛になる理由について、私が見た中で最も簡潔な説明です
あなたの最初の質問に関しては、マージンを使用して垂直方向に整列できない理由は、以下の引用で説明されています。
... ドキュメント フローと要素の高さの計算アルゴリズムの性質により、要素を親の内側で垂直方向に中央揃えするために余白を使用することはできません。垂直マージンの値が変更されるたびに、親要素の高さの再計算 (リフロー) がトリガーされ、元の要素の再中心化がトリガーされ、無限ループになります。
2 番目の質問に関して、 margin auto は、親の幅に対する子コンテナーの幅を計算することにより、水平方向のセンタリングを実現します。次に、単純な計算を行って、子コンテナーの左右に均等な量のマージンを追加し、水平方向の中央揃えを強制します。
2問目のパートBは、
margin: auto
以下と同じです。
margin-top: auto;
margin-bottom: auto;
margin-right: auto;
margin-left: auto;
ここで、asmargin: 0 auto
は次と同等です。
margin-top: 0;
margin-bottom: 0;
margin-right: auto;
margin-left: auto;
垂直センタリングを実現するソリューション
ただし、制限があるにもかかわらず、垂直方向の配置を実現するために利用できるオプションがいくつかあります。最も簡単なのはテーブルを活用することです。テーブルの数少ない長所の 1 つは、vertical-align
プロパティを使用すると、テーブル内で適用されたときに実際に期待どおりに動作することです。したがって、次のようなことができます。
<body>
<table style="width: 100%; height: 100%">
<tr>
<td>
<div id="verticallyCenteredContent" style="vertical-align: middle">
OMG it's vertically aligned
</div>
<td>
<tr>
<table>
<body>
このjsfiddleで説明した他の 2 つの一般的な方法があります。
垂直センタリングを実現するための多くのシナリオとアプローチを示す便利な記事 - Vertical Centering with Css
乾杯!