1. ホーム
  2. html

[解決済み] margin:autoを使用してdivを垂直方向に整列させる

2022-06-02 15:58:11

質問

で、div を水平方向にセンタリングできることは知っています。 margin:0 auto; . とする必要があります。 margin:auto auto; は、私が考えるように動作するはずですか?縦方向にもセンタリングする?

なぜ vertical-align:middle; も機能しないのでしょうか?

.black {
    position:absolute;
    top:0;
    bottom:0;
    left:0;
    right:0;
    background:rgba(0,0,0,.5);
}
.message {
    background:yellow;
    width:200px;
    margin:auto auto;
    padding:10px;
}
<div class="black">
    <div class="message">
        This is a popup message.
    </div>
</div>

JSFiddle

どのように解決するのですか?

2020年8月更新

下記はまだ有益な情報で読む価値がありますが、Flexbox は以前からありましたので、以下のようにそれを使ってください。 この回答 .


使用できません。

vertical-align:middle なぜなら ではない ブロックレベル要素に適用される

margin-top:auto そして margin-bottom:auto というのは として計算され、使用される値は ゼロ

margin-top:-50% なぜなら パーセントベースのマージン値は 含むブロックの

実際、ドキュメントフローの性質と 要素の高さ計算アルゴリズム の性質上、要素をその親要素内の垂直方向の中央に配置するためにマージンを使用することは不可能です。垂直方向のマージンの値が変更されるたびに、親要素の高さの再計算 (再フロー) が行われ、その結果、元の要素の再中心化が行われます...つまり、無限ループとなります。

使えます。

このようないくつかの回避策 のように、3つの要素をこのようにネストさせなければなりません。

.container {
    display: table;
    height: 100%;
    position: absolute;
    overflow: hidden;
    width: 100%;
}
.helper {
    #position: absolute;
    #top: 50%;
    display: table-cell;
    vertical-align: middle;
}
.content {
    #position: relative;
    #top: -50%;
    margin: 0 auto;
    width: 200px;
    border: 1px solid orange;
}
<div class="container">
    <div class="helper">
        <div class="content">
            <p>stuff</p>
        </div>
    </div>
</div

JSFiddle は、Browsershotによると正常に動作しています。