定義された幅/高さdiv
のコンテンツを垂直方向に中央揃えする正しい方法は何でしょうか。
example には、高さが異なる2つのコンテンツがあります。両方ともクラス.content
を使用して、垂直方向に中央揃えする最善の方法は何ですか。 (そして、すべてのブラウザで機能し、table-cell
の解決なしで)
いくつかの解決策を念頭に置いていますが、他のアイデアを知りたい場合は、position:absolute; top:0; bottom: 0;
とmargin auto
を使用します。
私はこれを少し研究しましたが、私が発見したことからあなたには4つの選択肢があります:
親divでdisplay:table-cell
を使用しても構わない場合は、次のオプションを使用できます。
.area{
height: 100px;
width: 100px;
background: red;
margin:10px;
text-align: center;
display:table-cell;
vertical-align:middle;
}
.area{
height: 100px;
width: 100px;
background: red;
margin:10px;
text-align: center;
display:block;
}
.content {
height: 100px;
width: 100px;
display:table-cell;
vertical-align:middle;
}
.area{
background: red;
margin:10px;
text-align: center;
display:block;
float: left;
}
.content {
display:table-cell;
vertical-align:middle;
height: 100px;
width: 100px;
}
このバージョンでの唯一の問題は、特定の実装ごとにcssを作成する必要があるように見えることです。この理由は、コンテンツdivがテキストを塗りつぶす高さを設定する必要があり、マージン上部がそこから計算されるためです。この問題はデモで確認できます。コンテンツdivの高さ%を変更し、-。5を掛けてマージントップ値を取得することにより、すべてのシナリオで手動で機能させることができます。
.area{
position:relative;
display:block;
height:100px;
width:100px;
border:1px solid black;
background:red;
margin:10px;
}
.content {
position:absolute;
top:50%;
height:50%;
width:100px;
margin-top:-25%;
text-align:center;
}
これは、数行のコードでdisplay: flex
を使用して行うこともできます。以下に例を示します。
.container {
width: 100px;
height: 100px;
display: flex;
align-items: center;
}
私はこれでこの解決策を見つけました 記事
.parent-element {
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.element {
position: relative;
top: 50%;
transform: translateY(-50%);
}
要素の高さが固定されていなければ、魔法のように機能します。