定義された幅/高さのdivのコンテンツの中央に垂直に配置する方法は?


93

定義された幅/高さでコンテンツを垂直方向に中央揃えする正しい方法は何でしょうかdiv

このでは、高さが異なる2つのコンテンツがあり、クラスを使用して両方を垂直方向に中央揃えする最良の方法は何ですか.content。(そしてそれはすべてのブラウザで動作し、の解決策はありませんtable-cell

心にいくつかのソリューションを持っていますが、1が使用され、他のアイデアを知っていただきたいと思いますposition:absolute; top:0; bottom: 0;margin auto


2
あなたの質問は完全に自己完結型でなければなりません。そうしないと、URLが機能しなくなっても役に立たなくなります。
Sparky


おそらく、しかし、その時間には私が望んだ解決策がありませんでした...これはより多くのオプションを提供します
Ricardo Rodrigues

1
TL; 2020年DRdisplay: flex; align-items: center;。水平方向にも中央に配置したくない場合は、を追加しflex-direction: column;ます。
Devin Burke

回答:


132

私はこれを少し調査しましたが、私が見つけたものから、あなたには4つの選択肢があります:

バージョン1:テーブルセルとして表示される親div

display:table-cell親divでを使用してもかまわない場合は、次のオプションを使用できます。

.area{
    height: 100px;
    width: 100px;
    background: red;
    margin:10px;
    text-align: center;
    display:table-cell;
    vertical-align:middle;
}​

ライブデモ


バージョン2:表示ブロックとコンテンツ表示テーブルセルを持つ親div

.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;    
}​

ライブデモ


バージョン3:表示テーブルセルとしての親divフローティングとコンテンツdiv

.area{
    background: red;
    margin:10px;
    text-align: center;
    display:block;
    float: left;
}

.content {
    display:table-cell;
    vertical-align:middle;
    height: 100px;
    width: 100px;
}​

ライブデモ


バージョン4:親divの位置相対、コンテンツの絶対位置

このバージョンで私が持っていた唯一の問題は、特定の実装ごとに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;
}​

ライブデモ


@JoshMein:いくつかの
揃えするには

1
私が探しているのはバージョン2ですが、コンテンツが垂直方向の中央に配置されません。何areaが含まれているのか、どのようなcontent内容なのかは重要ですか?
Shimmy Weitzhandler 2015年

61

これはdisplay: flex、数行のコードで実行することもできます。次に例を示します。

.container {
  width: 100px;
  height: 100px;
  display: flex;
  align-items: center;
}

ライブデモ


1
@nihiser水平方向にも中央に配置したい場合、または設定した場合のみflex-direction: column
martin36

31

この記事でこの解決策を見つけました

.parent-element {
  -webkit-transform-style: preserve-3d;
  -moz-transform-style: preserve-3d;
  transform-style: preserve-3d;
}

.element {
  position: relative;
  top: 50%;
  transform: translateY(-50%);
}

要素の高さが固定されていない場合、チャームのように機能します。


1
JFYI、私は同じ記事を見つけ、そのアプローチを使用しました。Chromeで機能させるには、絶対位置に変更する必要がありました。
ジャック

@JackA。連携position: relativeわからない行くことどこまでバッククローム62インチ
Jared Smith

-7

マージン:all_four_margin

all_four_marginに50%を提供することにより、要素を中央に配置します

style="margin: 50%"

あなたもフォローに適用できます

マージン:右上、左下

マージン:右上と左下

マージン:上&下右&左

適切な%を与えることで、どこにでも要素を取得できます。


4
明確にしてください。あなたの言い回しは、あちこちに少しあり、バラバラに見えます。
ベンジャミントレント

不正な表現で不明確な回答があり、の可能な値のリストに限定されていますmargin
nuno
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.