div内の要素を垂直方向に整列させる方法は?


792

2つの画像とh1。それらはすべて、div内で互いに隣接して垂直方向に整列する必要があります。

画像の1つをabsolutediv内に配置する必要があります。

これがすべての一般的なブラウザで機能するために必要なCSSは何ですか?

<div id="header">
    <img src=".." ></img>
    <h1>testing...</h1>
    <img src="..."></img>
</div>

14
私は垂直方向に整列するためのすべての方法のリストを作成しました。ここに残します:jsfiddle.net/techsin/FAwku/1
Muhammad

2
div内の要素を垂直方向、水平方向、またはその両方に配置する単純な2つの方法(純粋なCSS)を以下に示します。stackoverflow.com
Michael Benjamin

1
margin-top:autoおよびmargin-bottom:auto(多くのケースで機能します)。
CrippledTable

回答:


932

うわー、この問題は人気があります。vertical-alignプロパティの誤解に基づいています。この優れた記事はそれを説明しています:

vertical-alignGavin Kistnerによる理解、または「コンテンツを垂直方向に中央揃えする方法(しない)」

CSSでセンタリングする方法」は、さまざまな状況で必要なCSSセンタリング属性を見つけるのに役立つ優れたWebツールです。


一言で言えば(そしてリンクの腐敗を防ぐため)

  • インライン要素(およびインライン要素のみ)は、を介してコンテキスト内で垂直方向に整列できますvertical-align: middle。ただし、「コンテキスト」は親コンテナ全体の高さではなく、それらが含まれているテキスト行の高さです。jsfiddleの例
  • ブロック要素の場合、垂直方向の配置は難しく、特定の状況に強く依存します。
    • 内部要素が固定の高さを持つことができる場合、その位置absoluteを作成し、そのheightmargin-topおよびtop位置を指定できます。jsfiddleの例
    • 中央に配置された要素が1本の線で構成されていて その親の高さが固定されている場合は、コンテナーのline-height高さを埋めるように設定するだけです。この方法は、私の経験ではかなり用途が広いです。jsfiddleの例
    • …そのような特別なケースはもっとあります。

142
「有効」なソリューションの問題(ではなくvertical-align: middle)は、固定の高さを指定する必要があることです。レスポンシブWebデザインではあまり可能ではありません。
エミリー2013年

1
私はこの構造を持っていました:<div height = "## px"> My Text </ div>うまくいきましたdiv heightプロパティで使用されているのと同じ値を使用してプロパティlineHeightを設定します: '## px'(##この値のため私の場合は動的です)ありがとう
patricK 2013

8
これはinline-blockおよびtable-cell要素でも機能します。これに問題がある場合line-heightは、コンテナ要素(つまり、コンテキスト)を調整してみてくださいvertical-align。これは、ラインボックスの計算で使用されるためです。
Alex W

1
css-tricks.com/centering-css-complete-guide <-ここに提示されているいくつかの優れたオプションは、ほとんどの場合、table / table-cellソリューションに頼っています
shaunhusain

1
このツール(howtocenterincsss.com)は、既存のCSS ですぐに動作するため、非常に優れています。それは超レアです。昔はいくつかの例からスタイルシート全体をコピーしなければならなかった昔のことを思い出してください。時にはHTMLの例でさえ、必要なものになるまで要素を次々に削除して名前を変更しました。このサイトには当てはまりません!
コンスタンチン

190

フレックスボックスのサポートが増加しているので、含まれている要素に適用されるこのCSSは、含まれているアイテムを垂直方向に中央揃えにします。

.container {        
    display: flex;
    align-items: center;
}

Explorer 10と古い(<4.4)Androidブラウザーもターゲットにする必要がある場合は、プレフィックスバージョンを使用します。

.container {
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;

    -ms-flex-align: center;
    -webkit-align-items: center;
    -webkit-box-align: center;

    align-items: center;
}

素晴らしい解決策、ありがとうございます。内部要素がコンテナーよりも大きい場合に、フレックスボックスを水平スクロールバーに表示する方法を提案できますか?(パワーポイントのキャンバスのように、コンテナ内で内部要素をズーム/スクロール可能にしようとしています)?まったく可能ですか?
Boris Burkov

1
@YazidErmanこのソリューションはフレックスボックスに依存しているため、IE 10以上のサポートまたは他の最新のブラウザーcaniuse.com/#search=flexbox Flexboxのみがサポートされていますが、それがすべてではありません。表示テーブルとテーブルセルはおそらく最良の解決策です。コンテナはテーブルである必要があり、要素が中央に配置され、要素が表示テーブルセルでラップされ、他のいくつかの答えが示すように中央に配置できます。
ショーンサイン2016

1
なぜこれを見つけるのが難しいのですか>。<回答に感謝します!他の答えがうまくいかなかったシナリオで、これがうまくいくことを確認できます。
Michael McKenna

1
flexboxに関する有用なCSSトリックガイドalign-itemsセクションを参照してください
icc97

1
2020年にはflexbox caniuse.com/#feat=flexbox
tonygatta

116

私はこの非常に単純なコードを使用しました:

HTML:

<div class="ext-box">
    <div class="int-box">
        <h2>Some txt</h2>
        <p>bla bla bla</p>
    </div>
</div>

CSS:

div.ext-box { display: table; width:100%;}
div.int-box { display: table-cell; vertical-align: middle; }

明らかに、.classまたはのどちらを使用しても#id、結果は変わりません。


3
配置の9つの可能性(上中央、下、左中央、右)の完全な例を次に示します。jsfiddle.net
webMac

2020年にはflexbox caniuse.com/#feat=flexbox
tonygatta

私にぴったりの作品
huynq0911

49

それは私のために働きました:

.vcontainer {
    min-height: 10em;
    display: table-cell;
    vertical-align: middle;
}

9
だから、もはや「ブロック」要素ではないのですか?
パセリエ

7
次に、と水平方向に位置合わせしたい場合、次のmargin : 0 auto理由により機能しませんdisplay: table-cell
Ortomala Lokni '30 / 06/13

48
 .outer {
   display: flex;
   align-items: center; 
   justify-content: center;
 }

7
この解決策が最も早くて理解しやすいと思います。選択した答えを理解するのに十分な忍耐力がなかったためと思われます。フレックスボックスすべてのもの!
modulitos 2018

1
justify-content: center水平方向の中央
Samuel Slade

22

私の友人からのテクニック:

HTML:

<div style="height:100px; border:1px solid;">
    <p style="border:1px dotted;">I'm vertically centered.</p>
</div>

CSS:

div:before {content:" "; display:inline-block; height:100%; vertical-align:middle;}
div p {display:inline-block;}

デモはこちら


1
この手法の詳細は、css-tricks.com
in

18

ブロック要素を中央に配置するには(IE9以降で機能)、ラッパーが必要divです。

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

2
この方法では、要素が「ハーフピクセル」に配置されているため、要素がぼやける可能性があります。これに対する解決策は、要素のパースペクティブを設定することです。変換:パースペクティブ(1px)translateY(-50%);
Simon

16

それらはすべてdiv内で垂直方向に位置合わせする必要があります

どのように調整しました?画像の上端をテキストの上端に揃えますか?

画像の1つをdiv内に絶対配置する必要があります。

DIVに対して絶対的に配置されていますか?多分あなたはあなたが探しているものをスケッチすることができます...?

fdはH1要素の表示を調整して画像が要素にインラインで表示されるようにするだけでなく、絶対配置の手順も説明しています。これに、vertical-alignスタイルを使用して画像を配置できることを追加します。

#header h1 { display: inline; }
#header img { vertical-align: middle; }

...これにより、ヘッダーと画像が一緒になり、上端が揃えられます。他の配置オプションが存在します。ドキュメントを参照してください。また、DIVをドロップしてH1要素内の画像を移動すると便利な場合があります。これにより、コンテナに意味的な値が提供され、の表示を調整する必要がなくなりますH1

<h1 id=header">
   <img src=".." ></img>
   testing...
   <img src="..."></img>
</h1>

15

この式を使用すると、常にクラックなしで機能します。

#outer {height: 400px; overflow: hidden; position: relative;}
#outer[id] {display: table; position: static;}

#middle {position: absolute; top: 50%;} /* For explorer only*/
#middle[id] {display: table-cell; vertical-align: middle; width: 100%;}

#inner {position: relative; top: -50%} /* For explorer only */
/* Optional: #inner[id] {position: static;} */
<div id="outer">
  <div id="middle">
    <div id="inner">
      any text
      any height
      any content, for example generated from DB
      everything is vertically centered
    </div>
  </div>
</div>


2
CSSでこの種のセレクター "#outer [id]"を見たことはありません。それは何をすべきですか?idの代わりにクラスがある場合はどうなりますか?
Alexa Adrian

12

ほとんどすべてのメソッドで高さを指定する必要がありますが、高さがない場合がよくあります。
これが、高さを知る必要のないCSS3 3行のトリックです。

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

IE9でもサポートされています。

ベンダープレフィックス付き:

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

出典:http : //zerosixthree.se/vertical-align-anything-with-just-3-lines-of-css/


しかし、これは要素の親の高さが固定されている場合にのみ機能するようです。パーセント値のプロパティ「トップ」は、高さが固定されたコンテナでのみ機能しますよね?
ucdream 2014年

はい、それはいくつかの場合にのみ機能します、後でこの方法で問題が発生しました...可能な限り多くの可能性を持ち、必要なときにすぐにすべてをテストして、良い方法が得られるまで、すべての方法特定のケースでは機能しないものを得た...
Shadoweb

12

2つの方法で、要素を垂直方向と水平方向に位置合わせできます

  1. ブートストラップ4
  2. CSS3

ここに画像の説明を入力してください

1.ブートストラップ4.3.X

垂直方向の配置: d-flex align-items-center

水平配置の場合: d-flex justify-content-center

.container {
    height: 180px;
    width:100%;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" 
rel="stylesheet"/>

<div class="d-flex align-items-center justify-content-center bg-info container">
  <div class="bg-light p-2">I am in Center</div>
</div>

2. CSS3

.container {
    display: flex;
    align-items: center;  // verticall center
    justify-content: center; // horizontally center

    background-color: #17a2b8;
    height: 180px;
    width:100%;
}

.child {
  background-color: #f8f9fa;
  padding: 0.5rem;
}
<div class="container">
  <div class="child">I am in Center</div>
</div>


1
Bootstrapはクラスで同じflex属性を使用するため、どちらの方法も基本的に同じです。
Mx。

ブートストラップは魔法ではありません。すべてのユーザーに影響する、同じCSS制限の影響を受けます。それは平均から何をするかを単に隠しています。ユーザー。
JasonGenX

10

私のトリックは、1行1列のテーブルをdiv内に置き、幅と高さを100%に設定し、プロパティvertical-align:middleを設定することです。

<div>

    <table style="width:100%; height:100%;">
        <tr>
            <td style="vertical-align:middle;">
                BUTTON TEXT
            </td>
        </tr>
    </table>

</div>

フィドル:http : //jsfiddle.net/joan16v/sbq​​jnn9q/


7
これは、多くの頭を引っかくことを避けるための最良の方法のようです。CSSに垂直方向の位置合わせ標準がない理由については、まだ混乱しています。
Kokodoko 14

5

#3親divで中央の子divを作成する方法

  • 絶対位置決め方式
  • フレックスボックス法
  • 変換/変換メソッド

    ここに画像の説明を入力してください

    デモ

/* 1st way */
.parent1 {
  background: darkcyan;
   width: 200px;
   height: 200px;
   position: relative;
}
.child1 {
  background: white;
  height: 30px;
  width: 30px;
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -15px;
}

/* 2nd way */
.parent2 {
  display: flex;
  justify-content: center;
  align-items: center;
  background: darkcyan;
  height: 200px;
  width: 200px;
}
.child2 {
  background: white;
  height: 30px;
  width: 30px;
}

/* 3rd way */
.parent3 {
  position: relative;
  height: 200px;
  width: 200px;
  background: darkcyan;
}
.child3 {
  background: white;
  height: 30px;
  width: 30px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<div class="parent1">
  <div class="child1"></div>
</div>
<hr />

<div class="parent2">
  <div class="child2"></div>
</div>
<hr />

<div class="parent3">
  <div class="child3"></div>
</div>


4

垂直方向の中央にCSSを使用すると、外側のコンテナーをテーブルのように機能させ、コンテンツをテーブルセルとして機能させることができます。この形式では、オブジェクトは中央に配置されたままになります。:)

例としてJSFiddleで複数のオブジェクトをネストしましたが、コアとなるアイデアは次のとおりです。

HTML

<div class="circle">
  <div class="content">
    Some text
  </div>
</div>

CSS

 .circle {
   /* act as a table so we can center vertically its child */
   display: table;
   /* set dimensions */
   height: 200px;
   width: 200px;
   /* horizontal center text */
   text-align: center;
   /* create a red circle */
   border-radius: 100%;
   background: red;
 }

 .content {
   /* act as a table cell */
   display: table-cell;
   /* and now we can vertically center! */
   vertical-align: middle;
   /* some basic markup */
   font-size: 30px;
   font-weight: bold;
   color: white;
 }

複数のオブジェクトの例:

HTML

<div class="container">
  <div class="content">

    <div class="centerhoriz">

      <div class="circle">
        <div class="content">
          Some text
        </div><!-- content -->
      </div><!-- circle -->

      <div class="square">
        <div class="content">
          <div id="smallcircle"></div>
        </div><!-- content -->
      </div><!-- square -->

    </div><!-- center-horiz -->

  </div><!-- content -->
</div><!-- container -->

CSS

.container {
  display: table;
  height: 500px;
  width: 300px;
  text-align: center;
  background: lightblue;
}

.centerhoriz {
  display: inline-block;
}

.circle {
  display: table;
  height: 200px;
  width: 200px;
  text-align: center;
  background: red;
  border-radius: 100%;
  margin: 10px;
}

.square {
  display: table;
  height: 200px;
  width: 200px;
  text-align: center;
  background: blue;
  margin: 10px;
}

.content {
  display: table-cell;
  vertical-align: middle;
  font-size: 30px;
  font-weight: bold;
  color: white;
}

#smallcircle {
  display: inline-block;
  height: 50px;
  width: 50px;
  background: green;
  border-radius: 100%;
}

結果

結果

https://jsfiddle.net/martjemeyer/ybs032uc/1/


3

デフォルトでは、h1はブロック要素であり、最初のimgの後の行にレンダリングされ、2番目のimgがブロックに続く行に表示されます。

これを防ぐには、h1をインラインフローの動作に設定します。

#header > h1 { display: inline; }

img をdiv内に完全に配置する場合、これが正しく機能するためには、含まれるdivを「既知のサイズ」に設定する必要があります。私の経験では、位置属性をデフォルトから変更する必要もあります-位置:相対的な動作:

#header { position: relative; width: 20em; height: 20em; }
#img-for-abs-positioning { position: absolute; top: 0; left: 0; }

それが機能するようになったら、div.headerから高さ、幅、位置の属性を徐々に削除して、必要な効果を得るために最小限必要な属性を取得することをお勧めします。

更新:

以下は、Firefox 3で機能する完全な例です。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <title>Example of vertical positioning inside a div</title>
        <style type="text/css">
            #header > h1 { display: inline; }
            #header { border: solid 1px red; 
                      position: relative; }
            #img-for-abs-positioning { position: absolute;
                                       bottom: -1em; right: 2em; }
        </style>
    </head>

    <body>
        <div id="header">
            <img src="#" alt="Image 1" width="40" height="40" />
            <h1>Header</h1>
            <img src="#" alt="Image 2" width="40" height="40" 
                 id="img-for-abs-positioning" />
        </div>
    </body>
</html>

4
正しいDOCTYPEを使用すると、特にInternet ExplorerでCSSのレンダリング方法に大きな違いが生じる場合があることに注意する必要があります。ブラウザー間でより一貫した動作を期待できるように、厳密な標準モードに合わせることがわかっているDOCTYPEを選択することをお勧めします。
Mike Tunnicliffe、

2
ブラウザ間の一貫性を「期待」するつもりはありません...確認する唯一の方法はテストすることです:/
Cocowalla

3

CSS関数計算を使用して要素のサイズを計算し、それに応じて子要素を配置できます。

HTMLの例:

<div class="box">
    <span><a href="#">Some Text</a></span>
</div>

そしてCSS:

.box {
    display: block;
    background: #60D3E8;
    position: relative;
    width: 300px;
    height: 200px;
    text-align: center;

}
.box span {
    font: bold 20px/20px 'source code pro', sans-serif;
    position: absolute;
    left: 0;
    right: 0;
    top: calc(50% - 10px);
}
a {
    color: white;
    text-decoration: none;
}

ここで作成されたデモ:https : //jsfiddle.net/xnjq1t22/

このソリューションは、レスポンシブdiv heightwidthも適切に機能します。

注:calc関数は、古いブラウザーとの互換性についてはテストされていません。


3

今日のように、CSS3を使用してdiv内の複数のテキスト行を垂直方向に揃える新しい回避策を見つけました(UIを美化するためにブートストラップv3グリッドシステムも使用しています)。これは次のとおりです。

.immediate-parent-of-text-containing-div{
    height: 50px;         /* or any fixed height that suits you.*/
}

.text-containing-div {
    display: inline-grid;
    align-items: center;
    text-align: center;
    height: 100%;
}

私の理解によると、要素を含むテキストの直接の親には、ある程度の高さが必要です。参考になれば幸いです。ありがとう!


非常にきれいなソリューション。これはうまく機能しました。
Akalonda

2

それを行う私のお気に入りの方法は、CSSグリッドを使用することです。

/* technique */

.wrapper {
  display: inline-grid;
  grid-auto-flow: column;
  align-items: center;
  justify-content: center;
}

/* visual emphasis */

.wrapper {
  border: 1px solid red;
  height: 180px;
  width: 400px;
}

img {
  width: 100px;
  height: 80px;
  background: #fafafa;
}

img:nth-child(2) {
  height: 120px;
}
<div class="wrapper">
  <img src="https://source.unsplash.com/random/100x80/?bear">
  <img src="https://source.unsplash.com/random/100x120/?lion">
  <img src="https://source.unsplash.com/random/100x80/?tiger">
</div>


1

div内で1セルのテーブルを使用するだけです!セルとテーブルの高さを100%に設定するだけで、垂直方向の配置を使用できます。

div内の1セルのテーブルは垂直方向の配置を処理し、Stone Ageに下位互換性があります。


0

私は1年以上前から次の解決策(配置なし、行の高さなし)を使用しています。IE7および8でも動作します。

<style>
.outer {
    font-size: 0;
    width: 400px;
    height: 400px;
    background: orange;
    text-align: center;
    display: inline-block;
}

.outer .emptyDiv {
    height: 100%;
    background: orange;
    visibility: collapse;
}

.outer .inner {
    padding: 10px;
    background: red;
    font: bold 12px Arial;
}

.verticalCenter {
    display: inline-block;
    *display: inline;
    zoom: 1;
    vertical-align: middle;
}
</style>

<div class="outer">
    <div class="emptyDiv verticalCenter"></div>
    <div class="inner verticalCenter">
        <p>Line 1</p>
        <p>Line 2</p>
    </div>
</div>

0

これは、div内のi要素に対する私の個人的な解決策です

JSFiddleの例

HTML

<div class="circle">
    <i class="fa fa-plus icon">
</i></div>

CSS

.circle {
   border-radius: 50%;
   color: blue;
   background-color: red;
   height:100px;
   width:100px;
   text-align: center;
   line-height: 100px;
}

.icon {
  font-size: 50px;
  vertical-align: middle;
}

0

私にとって、それはこのように機能しました:

<div style="width:70px; height:68px; float:right; display: table-cell; line-height: 68px">
    <a href="javascript:void(0)" style="margin-left: 4px; line-height: 2" class="btn btn-primary">Login</a>
</div>

「a」要素は、Bootstrapクラスを使用してボタンに変換され、外側の「div」内で垂直方向の中央に配置されるようになりました。


0

ディスプレイフレックスを使用して、最初に、配置するアイテムのコンテナーをラップする必要があります。

<div class="outdiv">
      <div class="indiv">
         <span>test1</span>
         <span>test2</span>
      </div>
    </div>

次に、私の例ではラッパーのdivまたはoutdivに次のCSSを適用します

.outdiv {
    display: flex;
    justify-content:center;
    align-items:center;
}

コードのみの回答はお勧めしません。これにより問題がどのように解決されるか、またはこれが既存の回答とどのように異なるかについて説明を追加してください。レビューから
Nick

-3

これだけ:

<div>
    <table style="width: 100%; height: 100%">
        <tr>
            <td style="width: 100%; height: 100%; vertical-align: middle;">
               What ever you want vertically-aligned
            </td>
        </tr>
    </table>
</div>

div内の1セルのテーブルは垂直方向の配置を処理し、Stone Ageに下位互換性があります。


-3
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
    <head>
        <style type="text/css">
            #style_center { position:relative; top:50%; left:50%; }
            #style_center_absolute { position:absolute; top:50px; left:50px; }
            <!--#style_center { position:relative; top:50%; left:50%; height:50px; margin-top:-25px; }-->
        </style>
    </head>

    <body>
        <div style="height:200px; width:200px; background:#00FF00">
            <div id="style_center">+</div>
        </div>
    </body>
</html>

-4

以下は、別の(レスポンシブ)アプローチです。

html,
    body {
        height: 100%;
    }
    body {
        margin: 0;
    }

    .table {
        display: table;
        width:  auto;
        table-layout:auto;
        height: 100%;
    }
        .table:nth-child(even) {
            background: #a9edc3;
        }
        .table:nth-child(odd) {
            background: #eda9ce;
        }

    .tr {
        display: table-row;
    }
    .td {
        display: table-cell;
        width: 50%;
        vertical-align: middle;
    }

http://jsfiddle.net/herrfischerhamburg/JcVxz/


-4

私はWebプログラミングを始めたばかりの.NETの人です。私はCSSを使用しませんでした(まあ、少し)。小さなJavaScriptを使用して、jQueryの.css関数と共に垂直方向の中央揃えを実現しました。

私はテストからすべてを投稿しています。それはおそらく過度にエレガントではありませんが、これまでのところ機能します。

script.

<html>
    <head>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>

        <script type="application/javascript">
            function centerElementVertically(id) {
                var btnDivHeight = $(id).outerHeight();
                var prnt = $(id).parent();
                var parentHeight = prnt.outerHeight();

                var newTop = ((parentHeight - btnDivHeight) / 2) + 'px';
                var newPct = newTop / parentHeight+'%;';

                $(id).css({top: newTop});
            }

            function showAlert(){
                alert("alert");
            }

            $(window).load(()=>{
                centerElementVertically('#buttonRight');
                centerElementVertically('#buttonLeft');
                centerElementVertically('#testerbtn')
            });

            $(window).resize(()=>{
                centerElementVertically('#buttonRight');
                centerElementVertically('#buttonLeft');
                centerElementVertically('#testerbtn')
            })
        </script>

        <style>
            #div1 {
                position:relative;
                height: 33%;
                background-color: red;
                overflow: hidden;
            }
            #buttonLeft {
                position: relative;
                float:left;
                width:50%;
                height:20%;
                background-color: cornsilk;
            }
            #buttonRight {
                position: relative;
                float:right;
                width:50%;
                height:50%;
                background-color: darkorchid;
            }
            #testerbtn {
                position: absolute;
            }
            body {
                background-color: aqua;
            }
        </style>

        <body>
            <div id="div1">
                <div id="buttonLeft">
                    <button id="testerbtn">tester</button>
                </div>
                <div id="buttonRight"></div>
            </div>
        </body>
    </head>
</html>

7
あなたは新しいWeb開発者に間違ったやり方を教えています。HTMLはコンテンツを定義するためのものであり、CSSはHTMLのスタイルを設定するためのものであり、JavaScriptは実行時に条件に応じて両方を操作するためのものです。それらを
混同する

-8
<div id="header" style="display: table-cell; vertical-align:middle;">

...

またはCSS

.someClass
{
   display: table-cell;
   vertical-align:middle;
}

ブラウザのカバレッジ


1
divはdisplay:blockであるため、vertical-alignプロパティは適用されません。デフォルトでは、ブロックを変更するための処理は行われていません。
Quentin

3
どうやら表示がに更新されtable-cellvertical-align: middle;動作します。さらに良いことに、ネストされたラッパー/バッファーdivを必要とせずに機能し、テキストと画像の両方(または両方)で機能、位置のプロパティを変更する必要はありません。
MSpreij

3
これは機能します。表示を、vertical-alignプロパティを取るtable-cellに変更します。なぜ人々がこれに反対票を投じたのかはわかりません。
texasbruce

1
はい、私が知る限り、div内で垂直方向に何かを中央に配置するための最も煩わしくない方法です。+1
2013年

OK、たぶん私は私の結論で速すぎました... display:table-cellを追加するとdivマージンが壊れ、追加のボーダーがdivの外側に表示され、ボーダーと半径の組み合わせが外側の代わりにdivの内側に丸い角を表示します
Pma
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.